【问题标题】:CloudFormation !Ref Topic not giving ARNCloudFormation !Ref 主题不提供 ARN
【发布时间】:2021-04-12 13:06:37
【问题描述】:

我在使用 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中被传递/读取时,除了最后一个之后的最后一位之外,所有的东西都被剥离了:?有谁知道如何克服这个问题?

【问题讨论】:

    标签: python aws-lambda amazon-cloudformation aws-sam


    【解决方案1】:

    我不确定为什么这不能完全正常工作,但您可以使用应该始终有效的长格式。

    Environment:
        Variables:
          SNS_TOPIC_ARN:
             Ref: EmailNotificationTopic
    

    【讨论】:

    • 这似乎不是云形成的问题,当我查看 lambda 时,我可以在 aws 控制台中看到 SNS_TOPIC_ARN 是完全限定的 id,但是在使用 os.environ 时在 python 中为了获得 env var,它被剥夺了一切..所以这似乎是特定于 python 容器交互的东西......
    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2021-12-30
    • 2020-10-23
    • 2020-11-29
    相关资源
    最近更新 更多