放大获取 lambda 中的托管 URL 作为环境变量
Posted
技术标签:
【中文标题】放大获取 lambda 中的托管 URL 作为环境变量【英文标题】:Amplify get Hosting URL in lambda as environment variable 【发布时间】:2020-04-02 19:39:20 【问题描述】:我需要使用放大 cli 添加的 Cloudfront 分发的 URL 作为环境变量。 状态:
我发现了如何在我的函数配置下的文件“api-cloudformation-template.json”中添加模板变量。
“hosting/S3AndCloudFront/template.json”的期望输出变量是CloudFrontSecureURL
。
所以我在 lambda 配置文件中添加了行,如下所示:
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Lambda resource stack creation using Amplify CLI",
"Parameters":
...
"hostingS3AndCloudFrontHostingBucketName": // working example
"Type": "String",
"Default": "hostingS3AndCloudFrontHostingBucketName"
,
"hostingS3AndCloudFrontCloudFrontSecureURL": // my example
"Type": "String",
"Default": "hostingS3AndCloudFrontCloudFrontSecureURL"
,
,
"Resources":
"LambdaFunction":
"Type": "AWS::Lambda::Function",
"Metadata":
"aws:asset:path": "./src",
"aws:asset:property": "Code"
,
"Properties":
...
"Environment":
"Variables":
...
"HOSTING_S3ANDCLOUDFRONT_HOSTINGBUCKETNAME":
"Ref": "hostingS3AndCloudFrontHostingBucketName"
,
"HOSTING_S3ANDCLOUDFRONT_CLOUDFRONTSECUREURL":
"Ref": "hostingS3AndCloudFrontCloudFrontSecureURL"
,
....
,
....
发布功能后,我在process.env.HOSTING_S3ANDCLOUDFRONT_CLOUDFRONTSECUREURL
中得到hostingS3AndCloudFrontCloudFrontSecureURL
(默认值)。
【问题讨论】:
您能否发布您正在关注的教程,您正在尝试将“cloudfront”网址作为环境变量传递给 lambda,但您没有得到它,因为在通过放大部署,对吗? 【参考方案1】:尝试使用模板的Outputs 部分以及Fn::ImportValue 函数文档HERE
CloudFront 堆栈:
...
"Outputs" :
"CloudfrontDomainOutput" :
"Description" : "The cloudfront domain",
"Value" :
"Fn::GetAtt": [
"hostingS3AndCloudFrontCloudFrontSecureURL",
"DomainName"
]
,
"Export" :
"Name" : "Fn::Sub": "$AWS::StackName-hostingS3AndCloudFrontCloudFrontSecureURL"
Lambda 堆栈
...
"Environment":
"Variables":
"HOSTING_S3ANDCLOUDFRONT_HOSTINGBUCKETNAME":
"Ref": "hostingS3AndCloudFrontHostingBucketName"
,
"HOSTING_S3ANDCLOUDFRONT_CLOUDFRONTSECUREURL":
"Fn::ImportValue" : "Fn::Sub" : "$CloudFront_Stack_Name-hostingS3AndCloudFrontCloudFrontSecureURL"
【讨论】:
这行不通。因为hostingS3AndCloudFrontCloudFrontSecureURL
是一个参数。我们使用ref
引用参数。你说什么
@ArunK 你说得对,谢谢你指出这一点,我已经更新了我的回复,你能做一个跨堆栈引用吗?
语法看起来不错,要使其正常工作,cloudfront
必须是使用 cloudformation 创建的,并且应该导出 url。以上是关于放大获取 lambda 中的托管 URL 作为环境变量的主要内容,如果未能解决你的问题,请参考以下文章