首页 > 解决方案 > 亚马逊:如何使用 cloudformation 输出数据发送 SNS

问题描述

在使用将数据发送到 Slack 的 lambda 函数完成后,我想发送一个通知,其中包含我的 cloudformation 堆栈的数据输出。

如何从 SNS 消息访问 cloudformation 输出数据?

标签: amazon-web-servicesamazon-sns

解决方案


CloudFormation 生成的 SNS 消息具有以下形式:

{
    "Records": [
        {
            "EventSource": "aws:sns",
            "EventVersion": "1.0",
            "EventSubscriptionArn": "arn:aws:sns:us-east-1:761323155761:my-topic:6eaf0af0-8707-45b8-a7fb-c900c56e0ca0",
            "Sns": {
                "Type": "Notification",
                "MessageId": "a681c82f-9a58-58a2-bc5a-9fc379857c94",
                "TopicArn": "arn:aws:sns:us-east-1:761323155761:my-topic",
                "Subject": "AWS CloudFormation Notification",
                "Message": "StackId='arn:aws:cloudformation:us-east-1:761323155761:stack/fggg/1294f6d0-0225-11eb-93fc-127c6c2d7f71'\nTimestamp='2020-09-29T07:26:21.471Z'\nEventId='129740c0-0225-11eb-93fc-127c6c2d7f71'\nLogicalResourceId='fggg'\nNamespace='761323155761'\nPhysicalResourceId='arn:aws:cloudformation:us-east-1:761323155761:stack/fggg/1294f6d0-0225-11eb-93fc-127c6c2d7f71'\nPrincipalId='AIDA3CQTFOEYUR5EGW2C5'\nResourceProperties='null'\nResourceStatus='CREATE_IN_PROGRESS'\nResourceStatusReason='User Initiated'\nResourceType='AWS::CloudFormation::Stack'\nStackName='fggg'\nClientRequestToken='Console-CreateStack-5414c3bd-914a-5eec-7b6e-1b0e9139cd20'\n",
                "Timestamp": "2020-09-29T07:26:21.560Z",
                "SignatureVersion": "1",
                "Signature": "pE/h7Euukmm4xD/xedKlqN6pFDmWifx5GxdPHnK1pB+RVZvY60rO2XUBYTB11LNbDhaSxt7z6yyOWBHd29bMRtAeOOpl4wHzi3gYbrZbA//8xCdmoRHS2BRq4HMpT8WTxr6/i1dCrIjjyeT5KRGBZ/7WxvKJBixtHt+hjy9u41KUOL2HeHriiE+HYyqMCpzLb9DLY13jwpjtuwlk+e5le5rFmW6SobFLodhWDfers9wH760A5j3CxFt8uQnZmkInpega+SD3rqU9Ue/ZZAxxe2XDMsWT6EgznEJF/ToTbTo6HtNmiXE5iNd5xZAEjfPLPQ1Bc3R+JuvuWuiqJXkzCg==",
                "SigningCertUrl": "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-a86cb10b4e1f29c941702d737128f7b6.pem",
                "UnsubscribeUrl": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:761323155761:my-topic:6eaf0af0-8707-45b8-a7fb-c900c56e0ca0",
                "MessageAttributes": {}
            }
        }
    ]
}

正如您在上面看到的,它包含Message带有StackId. 因此,当您的函数从 SNS 获取此消息时,您必须对其进行解析以获取StackId,然后使用 AWS 开发工具包来describe-stacks。SDK 调用的结果将包含堆栈的输出。


推荐阅读