从AWS CodePipeline调用AWS Lambda函数时拒绝权限

Nic*_*orr 3 amazon-web-services aws-lambda aws-codepipeline

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

操作执行失败AWS Lambda函数addAMIToAutoScalingLC无法返回结果。检查该函数以验证其具有调用PutJobSuccessResult操作的权限,并且已对PutJobSuccessResult进行了调用。

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

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

  • Lambda函数的运行角色为:AWSLambdaFullAccessAWSCodePipelineFullAccess
  • 我认为CodePipeline具有以下角色AWS-CodePipeline-ServiceAWSLambdaFullAccess

我认为我的脚本可以调用该命令,PutJobSuccessResult因为在测试该脚本时会收到一个Execution result: succeeded

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

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

Nic*_*orr 5

找到了答案。问题不是出自许可,而是出自对以下对象的调用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
Run Code Online (Sandbox Code Playgroud)