【问题标题】:AWS Lambda and IAM error on deploy: The role defined for the function cannot be assumed by LambdaAWS Lambda 和 IAM 部署错误:为函数定义的角色不能由 Lambda 承担
【发布时间】:2019-12-17 14:36:03
【问题描述】:

在我的 AWS 项目中,我使用无服务器框架来部署 lambda 函数和 IAM 角色。

所以我创建了 6 个 lambda 函数,它们都使用下面相同的 IAM 角色:

functions:

  auto-delete-identity:
    handler: src/auto-delete-identity.handler
    role: arn:aws:iam::123456789012:role/lambdaIAMRole
    name: auto-delete-identity

  auto-move-to-user-group:
    handler: src/auto-move-to-user-group.handler
    role: arn:aws:iam::123456789012:role/lambdaIAMRole
    name: auto-move-to-user-group

  auto-validate-user-creation:
    handler: src/auto-validate-user-creation.handler
    role: arn:aws:iam::123456789012:role/lambdaIAMRole
    name: auto-validate-user-creation

  auto-validation-user-email-modification:
    handler: src/auto-validation-user-email-modification.handler
    role: arn:aws:iam::123456789012:role/lambdaIAMRole
    name: auto-validation-user-email-modification

  hello-demo:
    handler: src/hello-demo.handler
    role: arn:aws:iam::123456789012:role/lambdaIAMRole
    name: hello-demo

  reset-user-password:
    handler: src/reset-user-password.handler
    role: arn:aws:iam::123456789012:role/lambdaIAMRole
    name: reset-user-password

resources:

  Resources:

    lambdaIAMRole:
      Type: "AWS::IAM::Role"
      Properties:
        RoleName: lambdaIAMRole
        AssumeRolePolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Action:
                - "sts:AssumeRole"
              Effect: "Allow"
              Principal:
                Service:
                  - "lambda.amazonaws.com"
        Policies:
          - PolicyDocument:
              Version: "2012-10-17"
              Statement:
                - Action:
                    - "logs:CreateLogGroup"
                    - "logs:CreateLogStream"
                    - "logs:PutLogEvents"
                  Effect: "Allow"
                  Resource:
                    - !Sub "arn:aws:logs:eu-central-1:123456789012:log-group:/aws/lambda/*:*"
        PolicyName: "myLambdaPolicy"

当我使用 serverless deploy 命令进行部署时,有时会遇到以下错误:

An error occurred: HelloDashdemoLambdaFunction - The role defined for the function cannot be assumed by Lambda. (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 4099072a-809d-4f1c-b83e-7f4f5dd5170b).

它看起来像一个随机错误,因为它不会每次都发生。此外,当它发生时,它并不总是发生在同一个函数上。

我做错了吗?我该如何解决?

感谢您的帮助。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-iam serverless-framework


    【解决方案1】:

    我认为问题在于,在您的 Lambda 函数声明中,您将 IAM 角色称为 role: arn:aws:iam::123456789012:role/lambdaIAMRole。这是一个绝对 ARN,您将如何指示在您的 serverless.yml 模板外部创建和管理的 IAM 角色(或其他资源)。

    在您的情况下,最快的解决方法是简单地将 role: arn:aws:iam::123456789012:role/lambdaIAMRole 替换为 role: lambdaIAMRole。后者指的是在模板内部声明的 AWS 资源。

    假设您的所有 Lambda 函数都具有相同的角色,一个更好的解决方法是完全删除您的 lambdaIAMRole 声明,然后从 Lambda 函数中删除所有 role: arn:aws:iam::123456789012:role/lambdaIAMRole 属性。角色声明不会对无服务器框架将为您隐式生成并分配给 Lambda 函数的默认 IAM 角色添加任何内容。这是使框架有价值的原因之一——它提供了良好的默认设置来节省您的时间和精力。示例here

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2017-05-12
      • 2016-07-24
      • 2016-09-26
      • 1970-01-01
      • 2021-08-30
      • 2021-10-24
      • 2019-12-31
      • 2021-09-17
      相关资源
      最近更新 更多