问题描述
我在使用 python 运行时获取通过环境变量传递给 lambda 的 SQS 主题的 ARN 时遇到问题。
这里是云形成yaml的相关部分:
HandlerFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: xxx/
Handler: app.handler
Runtime: python3.8
Timeout: 60
...
Environment:
Variables:
SNS_TOPIC_ARN: !Ref EmailNotificationTopic
EmailNotificationTopic:
Type: AWS::SNS::Topic
Properties:
Subscription:
- Endpoint: xxx@xxx.com
Protocol: email
在我的处理程序中,当我调用 sns_topic = os.environ['SNS_TOPIC_ARN']
时,我得到的是 EmailNotificationTopic
而不是完整的 ARN,这是我对 docs 的期望。
这会在发布主题时产生问题。我知道我可以对 ARN 进行硬编码,但其他教程(和官方文档)似乎表明 Ref 函数应该提供 ARN。
我对云形成很陌生,任何建议都表示赞赏。谢谢
编辑:我将 !Ref EmailNotificationTopic 添加到 sam 模板中的输出并确认它显示为完整的 ARN,我还在 AWS 控制台的主题中确认了完整的 ARN,所以看起来当在python中传递/读取环境变量时,除了最后一个:?有谁知道如何克服这个问题?
解决方法
我不确定为什么这不能正常工作,但是您可以使用应该始终有效的长格式。
Environment:
Variables:
SNS_TOPIC_ARN:
Ref: EmailNotificationTopic