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

AWS CodePipeline调用Lambda报PutJobSuccessResult相关错误如何解决

故障根因

你遇到的报错核心原因是Lambda处理函数的参数顺序写反:
AWS Python Lambda运行时固定的handler入参顺序为第一个参数是触发事件event,第二个参数是运行上下文context,你代码中定义的def lambda_handler(context, event):把两个参数顺序颠倒,后续执行jobId= event['CodePipeline.job']['id']取值时,实际是从context对象中取属性,直接抛出属性不存在异常,代码提前终止,没有执行到put_job_success_result回调,CodePipeline长时间收不到任务状态通知,就会抛出你看到的超时错误。

修复方案

调整参数顺序,同时增加异常捕获逻辑,避免其他环节出错时也无法回调CodePipeline导致超时,修复后的代码如下:

import boto3
import time

def lambda_handler(event, context):
    # 初始化codepipeline客户端,提前声明方便异常分支调用
    pipeline = boto3.client('codepipeline')
    job_id = event['CodePipeline.job']['id']
    
    try:
        sts_connection = boto3.client('sts')
        acct_b = sts_connection.assume_role(
            RoleArn="arn:aws:iam::1234567890:role/AssumeRole",
            RoleSessionName="cross_acct_lambda"
        )
        
        ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
        SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
        SESSION_TOKEN = acct_b['Credentials']['SessionToken']

        client = boto3.client(
            'cloudfront',
            aws_access_key_id=ACCESS_KEY,
            aws_secret_access_key=SECRET_KEY,
            aws_session_token=SESSION_TOKEN,
        )
        
        response = client.create_invalidation(
            DistributionId='ABC',
            InvalidationBatch={
                'Paths': {
                    'Quantity': 1,
                    'Items': [
                        '/*',
                    ]
                },
                'CallerReference': str(time.time()).replace(".", "")
            }
        )
        invalidation_id = response['Invalidation']['Id']
        
        print("Invalidation created successfully with Id: " + invalidation_id)
        
        # 回调任务成功
        pipeline.put_job_success_result(jobId=job_id)
        return {
            'statusCode': 200,
            'invalidationId': invalidation_id
        }
    except Exception as e:
        print(f"任务执行失败:{str(e)}")
        # 出错时回调任务失败,避免CodePipeline超时
        pipeline.put_job_failure_result(
            jobId=job_id,
            failureDetails={
                'type': 'JobFailed',
                'message': str(e)
            }
        )
        raise e
可选校验项
  • 确认你使用的跨账号角色arn:aws:iam::1234567890:role/AssumeRole具备cloudfront:CreateInvalidation权限
  • 确认Lambda执行角色的权限策略包含sts:AssumeRole动作,允许调用上述跨账号角色
  • 可以在Lambda控制台配置模拟CodePipeline触发的测试事件,验证代码运行是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:03:01