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

CodePipeline部署阶段缺失Lambda,求ECS任务自动更新配置方案

解决CodePipeline部署阶段调用Lambda的问题

为什么找不到Lambda选项?

CodePipeline的部署阶段没有直接显示Lambda选项,你需要通过**「Invoke」动作类型**来调用Lambda函数,而非在常规部署提供商列表中查找。

具体操作步骤

  1. 将脚本部署为Lambda函数

    • 登录AWS控制台进入Lambda服务,创建新函数,选择「从头开始创作」,填写函数名并匹配脚本对应的运行时(比如Python 3.x)。
    • 把你的脚本粘贴到Lambda代码编辑器,调整IAM权限:给Lambda配置ECR镜像读取权限、ECS服务更新权限,以及CodePipeline任务结果上报权限(codepipeline:PutJobSuccessResult、codepipeline:PutJobFailureResult)。
    • 保存函数并测试,确保能正常触发ECS任务更新逻辑。
  2. 在CodePipeline部署阶段添加Invoke动作

    • 进入你的CodePipeline控制台,编辑流水线。
    • 在部署阶段点击「添加动作组」:
      • 动作名称:自定义命名(比如Update-ECS-Task)
      • 提供程序:选择**「AWS Lambda」**(这就是你要找的选项,属于Invoke类型的提供程序)
      • 函数名称:选择你刚创建的Lambda函数
      • 输入工件:可选源阶段的输出工件(用于传递镜像标签、分支信息等)
    • 保存流水线配置即可。
  3. 优化触发逻辑(更贴合需求)
    你当前用GitLab作为CodePipeline源,更高效的方式是让ECR镜像推送事件直接触发CodePipeline:

    • 进入ECR仓库控制台,添加事件通知,目标选择CodePipeline,触发条件勾选「镜像推送」。
    • 这样GitLab CI/CD推新镜像到ECR时,会直接触发CodePipeline,再调用Lambda更新ECS任务,流程更顺畅。

脚本适配提示

你的脚本需要适配CodePipeline的调用格式,Lambda需处理CodePipeline的Job事件,示例代码片段:

import boto3

codepipeline_client = boto3.client('codepipeline')
ecs_client = boto3.client('ecs')

def lambda_handler(event, context):
    job_id = event['CodePipeline.job']['id']
    try:
        # 执行ECS服务更新,强制部署新版本
        ecs_client.update_service(
            cluster='你的ECS集群名称',
            service='你的ECS服务名称',
            forceNewDeployment=True
        )
        # 通知CodePipeline任务成功
        codepipeline_client.put_job_success_result(jobId=job_id)
    except Exception as e:
        # 通知CodePipeline任务失败
        codepipeline_client.put_job_failure_result(
            jobId=job_id,
            failureDetails={'message': str(e), 'type': 'JobFailed'}
        )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:55:06