【问题标题】:Permission denied when calling AWS Lambda function from AWS CodePipeline从 AWS CodePipeline 调用 AWS Lambda 函数时权限被拒绝
【发布时间】:2017-09-18 17:22:12
【问题描述】:

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

操作执行失败 AWS Lambda 函数 addAMIToAutoScalingLC 未能返回结果。检查函数以验证它是否具有 调用 PutJobSuccessResult 操作的权限,并且它创建了一个 调用 PutJobSuccessResult。

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

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

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

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

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

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

【问题讨论】:

  • 您在这里使用哪种身份验证? IAM 还是基于资源?
  • 我使用 IAM(我描述了规则)

标签: amazon-web-services aws-lambda aws-codepipeline


【解决方案1】:

找到了答案。问题不是来自许可,而是来自没有调用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

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2020-12-07
    • 2023-03-06
    • 2022-06-17
    • 2016-07-03
    • 2020-09-06
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多