通过 Cloudformation/lambda 发送 SNS 消息以更新安全组

Send SNS message via Cloudformation/lambda for updating security group

我正在尝试 "populate" 连接到我的 ALB 的 SG 以允许来自 Cloudfront 的流量进入。

这个 ALB/CF dist 是通过 Cloudformation 创建的。我目前有一个 Lambda 函数可以处理来自 AmazonIpSpaceChanged 的​​ SNS 消息。但是,当我创建此 CF 堆栈时,需要触发 SNS 消息以最初填充 SG。

有没有办法创建 SNS 消息来触发此 Lambda 函数?我查看了 SNS 支持的自定义资源,但似乎没有用。

我也遇到过这个问题。我无法让我的 SNS 主题工作以触发 lambda 函数。但是,我能够使用自定义资源来做到这一点。

只要 lambda 函数与 CloudFormation 模板中的自定义资源相关联,它就会在创建该自定义资源的过程中被调用。您将不得不依赖于其中包含代码的 cloudformation 资源,因为如果它在创建 lambda 函数之前触发,它将无法工作。

This is a link to the custom resource documentation

为什么不使用 AWS::EC2::SecurityGroupIngress 直接从 CloudFormation 添加规则到安全组?

  InboundRule:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      IpProtocol: tcp
      FromPort: 0
      ToPort: 65535
      SourceSecurityGroupId:
        Fn::GetAtt:
        - XX_NEW_SECURITY_GROUP_XX
        - GroupId
      GroupId: sg-XX_EXISTING_GROUP_XX

您可以使用的一个选项是 CloudFormation API 提供的通知功能:调用 UpdateStack 时,您可以提供 NotificationARNs 列表,这是一个 SNS 主题列表获得有关堆栈的每个 CloudFormation 相关更改的通知。您可以将通知 SNS 主题设置为您订阅 AWS Lambda 函数的 SNS 主题。这当然只有在您不创建 SNS 主题作为 CloudFormation 堆栈的一部分时才有效,您不依赖 SNS 消息上的内容,只需要这样的消息作为触发器,如果​​您过滤 SNS 消息Lambda 函数仅对对您重要的消息做出反应(例如仅在堆栈创建时进行更新,而不是在堆栈删除时进行更新)。

使用 AWS CLI 及其 deploy 命令,指定通知 ARN 如下所示:

aws cloudformation deploy \
  --template-file your-template.yaml \
  --stack-name your-stack \
  --notification-arns arn:aws:sns:us-east-1:1234567890123456:yourtopic