AWS CloudFormation 创建完成或创建失败时的回调通知

56次阅读
没有评论

问题描述

在使用 AWS CloudFormation 创建堆栈时,希望能够只在整个堆栈的 CREATE_COMPLETE 或 CREATE_FAILED 事件发生时收到通知。他在使用 aws cloudformation create-stack 命令的 --notification-arns 标志发送通知到电子邮件主题,但这会产生大量垃圾邮件,因为它记录了每个资源的 X_IN_PROGRESSX_COMPLETE 事件,其中 X=CREATE/DELETE

用户想要的是只接收堆栈级别的 CREATE/DELETE 事件的通知。这是否可能实现呢?

解决方案

请注意以下操作可能存在版本差异,确保备份重要数据。

方案1

您可以考虑使用 CloudTrail 结合 CloudWatch 规则来实现仅接收堆栈级别的 CREATE/DELETE 事件的通知。这将允许您更精确地控制通知的触发条件,以适应您的需求。

以下是一些有关如何配置此方案的信息:

  1. 启用 CloudTrail 日志记录 AWS CloudFormation 活动:
    首先,您需要启用 CloudTrail 来记录 AWS CloudFormation 的操作。这将使您能够捕获有关堆栈创建和删除的事件。

  2. 创建 CloudWatch 事件规则:
    使用 CloudWatch 控制台,您可以创建一个事件规则,该规则将根据您定义的条件筛选 CloudTrail 活动,并在符合条件时触发操作。

a. 登录 AWS 控制台,并转到 CloudWatch 服务。
b. 在左侧导航栏中,选择 “事件”。
c. 单击 “创建规则” 按钮。
d. 选择 “事件源” 为 “事件历史”。
e. 在 “构建事件模式” 部分,选择 “事件类型”。
f. 在 “事件类型” 下拉菜单中,选择 “AWS API 调用”。
g. 在 “服务名称” 下拉菜单中,选择 “CloudTrail”。
h. 在 “事件类型” 下拉菜单中,选择 “AWS CloudTrail 操作”。
i. 在 “特定 CloudTrail 事件” 下拉菜单中,选择 “CreateStack” 和 “DeleteStack”。

  1. 定义目标操作:
    在触发规则时,您可以定义要执行的操作。这可以是发送电子邮件通知、运行 Lambda 函数等。在您的情况下,您可以选择发送电子邮件通知。

请注意,上述步骤可能会因 AWS 服务的版本变化而有所不同。建议您查阅当前的 AWS 文档以获取最新信息。

方案2

另一种方法是在通知主题上放置一个 Lambda 函数,该函数将监听通知主题,并在发送电子邮件通知之前筛选所需的事件。

以下是一个示例 Lambda 函数的伪代码:

import boto3

def lambda_handler(event, context):
    # 检查 CloudFormation 事件类型
    if event.get('ResourceType') == 'AWS::CloudFormation::Stack':
        if event.get('ResourceStatus') == 'CREATE_COMPLETE' or event.get('ResourceStatus') == 'CREATE_FAILED':
            # 发送电子邮件通知
            send_email_notification(event)

def send_email_notification(event):
    # 使用 AWS SDK 发送电子邮件通知
    sns = boto3.client('sns')
    topic_arn = 'your_notification_topic_arn'
    message = f"CloudFormation Stack Event: {event.get('ResourceStatus')} - StackName: {event.get('ResourceName')}"
    sns.publish(TopicArn=topic_arn, Message=message)

在上述示例中,Lambda 函数会检查 CloudFormation 事件,如果事件的资源类型为堆栈,并且资源状态为 CREATE_COMPLETECREATE_FAILED,则会发送相应的电子邮件通知。

您需要将上述示例代码适应您的实际需求,并将其部署到 AWS Lambda,并将 Lambda 函数添加为通知主题的订阅者。

方案3

使用 Lambda 来处理通知可以使您更加灵活地控制事件筛选和通知内容。

总结

在 AWS CloudFormation 中,实现仅在整个堆栈的 CREATE/DELETE 事件发生时收到通知的需求,可以通过 CloudTrail 结合 CloudWatch 规则来实现。另外,您还可以使用 Lambda 函数来更加灵活地控制事件筛选和通知内容。根据您的实际需求和环境,选择合适的方案来实现通知目标。

正文完