You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Lambda中用Python解析CodePipeline的SNS通知消息

用Python Lambda解析AWS CodePipeline的SNS通知

1. 配置Lambda触发器

  • 打开AWS Lambda控制台,创建Python函数(建议选Python 3.10及以上版本)
  • 在触发器配置中选择SNS,关联你已有的CodePipeline通知主题
  • 给Lambda角色配置权限:需包含SNS读取权限(用于获取触发消息),若要转发解析后的消息,还需添加SNS发布权限(可附加AmazonSNSFullAccess或更细粒度的自定义权限)

2. Python解析代码示例

原始SNS消息的Records[0].Sns.Message字段是CodePipeline的原始JSON内容,我们提取关键信息并转换为可读格式:

import json
import boto3

def lambda_handler(event, context):
    # 提取SNS中的CodePipeline原始消息
    cp_message = json.loads(event['Records'][0]['Sns']['Message'])
    
    # 提取核心部署信息
    pipeline_name = cp_message.get('detail', {}).get('pipeline', '未知')
    execution_id = cp_message.get('detail', {}).get('execution-id', '未知')
    status = cp_message.get('detail', {}).get('state', '未知')
    current_stage = cp_message.get('detail', {}).get('stage', '未知')
    aws_region = cp_message.get('region', '未知')
    event_time = cp_message.get('time', '未知')
    
    # 构造可读性强的通知文本
    readable_content = f"""
AWS CodePipeline 部署状态通知
------------------------------
流水线名称: {pipeline_name}
执行ID: {execution_id}
当前状态: {status.upper()}
当前阶段: {current_stage}
AWS区域: {aws_region}
通知时间: {event_time}
"""
    
    # 转发解析后的消息到SNS主题(替换为你的目标主题ARN)
    sns_client = boto3.client('sns')
    sns_client.publish(
        TopicArn='arn:aws:sns:你的区域:账号ID:目标主题名称',
        Message=readable_content,
        Subject=f"CodePipeline {pipeline_name} {status.upper()}"
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps('消息解析并转发完成')
    }

3. 代码说明

  • 从Lambda触发事件中提取SNS消息,解析为JSON格式后,提取CodePipeline的核心字段
  • 用格式化文本整理信息,避免原始JSON的冗余内容,突出关键状态和细节
  • 通过boto3调用SNS发布接口,将可读文本发送到目标主题,订阅者将直接收到清晰的通知

4. 权限补充

  • 确保Lambda角色的信任策略允许SNS触发执行
  • 若自定义权限,需包含sns:Publish动作,资源指定为目标SNS主题ARN

内容的提问来源于stack exchange,提问作者unknow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:24:26