如何检测AWS CodePipeline的STOPPED状态并配置对应通知?
检测AWS CodePipeline手动停止(STOPPED)状态的办法
用CloudTrail+EventBridge追踪手动停止操作
CodePipeline的手动停止动作会被CloudTrail记录下来,你可以这么做:
- 先确认CloudTrail已经开启,并且在记录CodePipeline的相关事件
- 去EventBridge(原CloudWatch Events)创建规则,匹配事件源
codepipeline.amazonaws.com和事件名称StopPipelineExecution - 给规则加个目标(比如Lambda函数),触发时就把DynamoDB里的流水线状态更新为STOPPED
EventBridge规则的事件模式示例:
{ "source": ["aws.codepipeline"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["codepipeline.amazonaws.com"], "eventName": ["StopPipelineExecution"] } }
定期调用API轮询状态
通过定时任务调用CodePipeline API查询执行状态:
- 写个Lambda函数,配合CloudWatch定时触发器,定期查询目标流水线的执行记录
- 发现状态为
STOPPED时,立即更新DynamoDB中的对应记录
Lambda中的Python代码示例:
import boto3 codepipeline = boto3.client('codepipeline') def lambda_handler(event, context): pipeline_name = "你的流水线名称" executions = codepipeline.list_pipeline_executions(pipelineName=pipeline_name)['pipelineExecutionSummaries'] for execution in executions: if execution['status'] == 'STOPPED': # 此处添加更新DynamoDB的逻辑 print(f"流水线执行ID {execution['pipelineExecutionId']} 已停止")
补充说明
目前CodePipeline控制台的SNS通知配置里确实没有直接触发STOPPED状态的选项,官方自带通知仅支持SUCCEEDED、FAILED、CANCELED等状态。但通过上述两种方法可以间接捕获手动停止操作,解决DynamoDB记录卡在IN_PROGRESS的问题。
内容的提问来源于stack exchange,提问作者KickinMhl
相关产品推荐
相关产品推荐

