在 cloudformation 中启用 SNS 传递状态日志记录配置

Enable SNS Delivery Status Logging configuration in cloudformation

我正在尝试使用 AWS CloudFormation 设置 SNS 主题。 我能够获取主题及其 SQS 订阅并 运行,但我找不到指定传递状态日志记录选项的方法(告诉主题将其日志写入 cloudwatch 的选项)。

official SNS/Cloudformation docs对此功能只字不提。

I found here 显然它还没有实现。有人知道这方面的最新情况吗?

下面是我的模板(片段):

SNSBouncesTopic:
  Type: AWS::SNS::Topic
  Properties: 
    DisplayName: SNS-Bounces
    Subscription: 
     - Endpoint: !GetAtt
        - SQSBouncesQueue
        - Arn
       Protocol: sqs
    TopicName: SNS-Bounces

SQSBouncesQueue 是处理 SNS 消息的堆栈的另一个资源。

目前,CloudFormation 不支持启用 SNS 传递状态日志记录。

您需要使用控制台、SDK 或 CLI。如果您仍需要使用 CloudFormation 工作流,请查看以下解决方法:

此解决方法涉及使用 Lambda 支持的自定义资源,通过向 SNS 主题添加必要的属性来启用 SNS 传递状态日志记录。

A custom resource essentially triggers a Lambda function when your CFN stack is created, updated, or deleted.

要设置主题属性,您需要以下内容:

a) 一个 IAM 角色,具有 SNS 服务代入该角色的权限。它应该包括以下内容:

  Permissions : 
  Actions : 
  "logs:CreateLogGroup"
  "logs:CreateLogStream”
  "logs:PutLogEvents”
  "logs:PutMetricFilter"
  "logs:PutRetentionPolicy"

b) SNS 主题

c) 接受 IAM 角色 ARN 和 SNS 主题 ARN 并调用相应设置主题属性的 Lambda 函数的自定义资源。

在 Lambda 函数中,您需要指定 SNS TopicArn,使用 set_topic_attributes() 方法设置主题属性。对于 AttributeName,您必须将其指定为 “LambdaSuccessFeedbackRoleArn” 以设置成功交付的属性,并指定为 “LambdaFailureFeedbackRoleArn” 以设置交付失败的属性。

注:

  1. 成功和失败的 AttributeValue 都是具有修改 CloudWatch 日志访问权限的 IAM 角色的 ARN。

  2. 该函数应该被调用两次,一次是为成功传递设置属性,另一次是为传递失败设置属性。