我有一个带有SNS主题和Lambda/API网关的SAM部署。Lambda是一个NodeJS Lambda,它正在寻找环境变量sns_create_collection_topic。这在我的SAM模板中定义如下:
Resources:
CollectionApiPostFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: 'http-post/src/'
Environment:
Variables:
deployed_environment: !Ref TargetEnvironment
sns_create_collection_topic: !Ref CollectionCreatedTopic
CollectionCreatedTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: test-topic
TopicName: test-topic当我在Cloud9中运行Lambda并访问该环境变量时,值是CollectionCreatedTopic,它是模板中的显式资源名称,而不是ARN。NodeJS中读取env的代码是:
constructor() {
this.aws_region = process.env.AWS_REGION;
this.messageBus = {
topic: process.env.sns_create_collection_topic,
};
console.info(this.messageBus);
}当我运行sam deploy并在AWS中执行Lambda时,我会看到与模板get一起部署的SNS主题的ARN被记录下来,所以这看起来像预期的那样工作。但是,当我在Cloud9中使用Lambda调试器调试它时,我没有看到环境变量被设置为已部署的SNS主题的ARN。
为了解决这个问题,我在Cloud9 EC2上的Cloud9上导出了一个环境变量,并以ARN作为值。
sns_create_collection_topic=arn:aws:sns:us-east-1:0000000:test-sns
export sns_create_collection_topic我可以运行printenv并正确地看到环境变量。我还可以在本地运行sam local start-api并在Cloud9中压缩API调用,从而正确使用来自Cloud9环境变量的SNS主题ARN。我不知道为什么当我在Cloud9中运行Lambda (本地)调试会话时,它既没有从SAM部署中获取ARN,也没有在EC2上更奇怪地选择环境变量。
我是不是做错了什么,还是Cloud9和Lambda调试没有明确支持?这似乎不是SAM的问题,因为它为我提供了所有的Cloud9 EC2 env,当我通过sam local invoke或sam local start-api使用SAM运行Lambda。
发布于 2020-06-17 20:46:18
sam可以输入一个文件来为容器设置env。它的格式是:
{ "LogicalFucntionName": { "env-var1': "env-var1-setting", "env-var2": "env-var2-setting" }
我通常将我的文件命名为envvars.json。启动sam时,请使用-n开关,如下所示:
sam local invoke LogicalFunctionName -n ./envvars.json
https://stackoverflow.com/questions/61354542
复制相似问题