如何通过AWS CodeDeploy部署成功触发事件启动另一CodeDeploy应用
实现生产CodeDeploy部署触发Staging环境部署的方案
整体流程
当生产环境CodeDeploy完成指定事件(如部署成功)时,触发SNS主题;通过Lambda函数监听该主题,提取部署制品信息,再调用CodeDeploy API启动Staging环境的部署。
具体配置步骤
1. 给生产CodeDeploy部署组添加SNS触发器
- 进入AWS CodeDeploy控制台,打开你的生产环境CodeDeploy应用
- 进入对应部署组的「触发器」标签页,点击「创建触发器」:
- 设置触发器名称(如
prod-deploy-success-trigger) - 选择触发事件(推荐选
Deployment successful,确保生产部署正常后再同步到Staging) - 选择或新建一个SNS主题(如
prod-deploy-success-topic),后续Lambda将监听这个主题
- 设置触发器名称(如
2. 创建监听SNS主题的Lambda函数
- 打开AWS Lambda控制台,新建函数:
- 选择「从头开始创作」,设置函数名(如
trigger-staging-deploy),运行时选Python 3.x(或你熟悉的语言) - 编写函数逻辑:解析SNS消息中的制品信息,调用CodeDeploy API启动Staging部署
- 示例Python代码:
import boto3 import json codedeploy = boto3.client('codedeploy') def lambda_handler(event, context): # 解析SNS推送的部署消息 sns_msg = json.loads(event['Records'][0]['Sns']['Message']) # 提取生产部署的制品S3信息 s3_info = sns_msg['deploymentInfo']['revision']['revisionLocation']['s3Location'] # 触发Staging环境部署 codedeploy.create_deployment( applicationName='你的Staging CodeDeploy应用名', deploymentGroupName='你的Staging部署组名', revision={ 'revisionType': 'S3', 's3Location': { 'bucket': s3_info['bucket'], 'key': s3_info['key'], 'bundleType': 'zip' # 根据你的制品类型调整,如tar } } ) return {'statusCode': 200, 'body': 'Staging部署已触发'} - 配置Lambda权限:
- 给Lambda执行角色添加内联策略,允许调用CodeDeploy的
CreateDeployment接口:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codedeploy:CreateDeployment", "Resource": "arn:aws:codedeploy:你的区域:你的账号ID:deploymentgroup:你的Staging应用名/你的Staging部署组名" } ] } - 回到之前创建的SNS主题,添加订阅:选择「Lambda函数」,指定刚创建的Lambda函数
- 给Lambda执行角色添加内联策略,允许调用CodeDeploy的
- 选择「从头开始创作」,设置函数名(如
3. 配置Staging环境CodeDeploy
- 确保Staging的CodeDeploy应用、部署组已配置完成,EC2实例镜像生产环境的配置(实例类型、安全组、IAM角色等)
- 确认Staging的EC2实例已安装CodeDeploy代理,并关联到对应部署组
4. 测试流程
- 触发一次生产环境的CodeDeploy部署,等待部署成功
- 检查Lambda函数执行日志,确认Staging部署已触发
- 验证Staging的EC2实例是否成功部署相同制品
内容的提问来源于stack exchange,提问作者geoff swartz
相关产品推荐
相关产品推荐

