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

在CodePipeline调用Lambda时传递自定义参数遇KeyError问题

CodePipeline调用Lambda时的参数传递格式与KeyError问题解决

你遇到的问题根源是CodePipeline调用Lambda时传递的event结构和控制台测试的完全不同,直接取顶层的bucket_key自然会报KeyError,而且因为Lambda没有正确通知CodePipeline任务完成,导致CodePipeline不断重试,陷入循环。

CodePipeline传递的Event结构说明

当CodePipeline通过Invoke Lambda动作调用你的函数时,用户自定义参数会被嵌套在固定的层级里,结构大致如下:

{
  "CodePipeline.job": {
    "data": {
      "actionConfiguration": {
        "configuration": {
          "UserParameters": "{\"bucket_key\":\"my_bucket\"}"
        }
      }
      // 其他CodePipeline相关字段省略
    },
    "id": "job-id",
    "accountId": "your-account-id"
  }
}

注意这里的UserParameters是字符串格式的JSON,不是直接的JSON对象。

修改后的Lambda代码

需要调整代码,从正确的路径读取参数,并且完成后必须通知CodePipeline任务状态(否则会一直重试循环):

import boto3
import json

codepipeline = boto3.client('codepipeline')

def lambda_handler(event, context):
    try:
        # 解析CodePipeline的event结构,获取用户参数
        job_id = event['CodePipeline.job']['id']
        user_params_str = event['CodePipeline.job']['data']['actionConfiguration']['configuration']['UserParameters']
        user_params = json.loads(user_params_str)
        
        bucket_name = user_params['bucket_key']
        print(f"获取到Bucket名称: {bucket_name}")
        
        # 通知CodePipeline任务成功
        codepipeline.put_job_success_result(jobId=job_id)
        return bucket_name
    except Exception as e:
        # 通知CodePipeline任务失败,终止循环重试
        codepipeline.put_job_failure_result(
            jobId=job_id,
            failureDetails={
                'message': str(e),
                'type': 'JobFailed'
            }
        )
        raise e

关键注意事项

  • 必须调用put_job_success_result或put_job_failure_result告知CodePipeline任务状态,否则CodePipeline会认为任务未完成,不断重复调用Lambda。
  • UserParameters是字符串格式的JSON,必须用json.loads解析成字典后才能读取内部的key。
  • 在CodePipeline的Invoke Lambda动作配置里,UserParameters要填写标准的JSON字符串(比如{"bucket_key":"my_bucket"})。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:12:39