4

我已将管道设置为调用 AWS Lamba 函数。运行 10 分钟后,这是我得到的错误:

操作执行失败 AWS Lambda 函数 addAMIToAutoScalingLC 未能返回结果。检查该函数以验证它是否有权调用 PutJobSuccessResult 操作以及是否调用了 PutJobSuccessResult。

日志本身不包含相关信息。

我认为我的 IAM 权限设置正确:

  • Lambda 函数使用以下角色运行:AWSLambdaFullAccess, AWSCodePipelineFullAccess
  • 我认为 CodePipeline 的运行角色AWS-CodePipeline-Service具有:AWSLambdaFullAccess

我认为我的脚本会调用,PutJobSuccessResult因为当我测试脚本时,我会得到一个Execution result: succeeded.

我的脚本不需要任何参数,所以我没有在 CodePipeline 中提供任何用户参数。

我应该怎么做才能进一步调查?

4

1 回答 1

12

找到了答案。问题不是来自权限,而是来自没有调用PutJobSuccessResult:管道不知道 lambda 函数已经完成,所以一直等到超时。

这段代码解决了这个问题(Python):

import boto3
pipeline = boto3.client('codepipeline')

def lambda_handler(event, context):

    # stuff

    response = pipeline.put_job_success_result(
        jobId=event['CodePipeline.job']['id']
    )
    return response
于 2017-04-25T15:27:55.460 回答