Lambda 无法承担为函数定义的角色

The role defined for the function cannot be assumed by Lambda

我在尝试使用 create-function 命令创建 lambda 函数时遇到错误 "The role defined for the function cannot be assumed by Lambda"。

aws lambda create-function
--region us-west-2
--function-name HelloPython
--zip-file fileb://hello_python.zip
--role arn:aws:iam::my-acc-account-id:role/default
--handler hello_python.my_handler
--runtime python2.7
--timeout 15
--memory-size 512

我也遇到了这个错误。还没有得到明确的答案(但),但我想我会传递一些可能对您有帮助的提示 and/or 其他遇到此问题的人。

A) 如果您通过将您的账户 ID 和角色名称放在一起来构建角色 ARN,我认为账户 ID 需要没有任何破折号

B) 如果您刚刚创建了角色,并且可能向其添加了策略,则似乎有一段时间 window 角色会触发此错误。在角色的最后一次操作和创建函数调用之间休眠 5 或 6 秒让我绕过了这个问题(当然,时间可能是可变的,所以这充其量是一种解决方法)。

我收到错误 "The role defined for the function cannot be assumed by Lambda" 因为我没有更新角色 "Trust Relationship" 配置文件。我没有遇到评论中链接答案中的超时问题。

上面回答中的注释指出需要添加以下内容

  1. 转到'IAM > Roles > YourRoleName'
    • (注意:如果您的角色未列出,则需要创建它。)
  2. Select 'Trust Relationships' 选项卡
  3. Select 'Edit Trust Relationship'

我的结果如下。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      <your other rules>
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

对我来说,问题是我的角色名称不完整。我设

--role arn:aws:iam::000000000000:role/MyRoleName

什么时候应该

--role arn:aws:iam::000000000000:role/service-role/MyRoleName

(当然我的aws id实际上不是000000000000)

我通过 运行

发现了这个
aws iam get-role --role-name MyRoleName

并查看结果集中的 "Arn" 属性。

对我来说,问题是我设置了错误的默认区域环境密钥。

尽管我的 IAM 角色确实具有正确的策略和信任关系,但我遇到了同样的问题。 通过 CLI 完成 Lambda 创建工作正常问题是在创建 IAM 角色后使用 lambda 模块时。

我也试过 "pause" 几秒钟,但没用。

最终添加了重试和延迟,直到定义了 registerdLambda.code。通常在尝试 1-2 次后它会起作用。

示例:

 - name: creating lambda function
   lambda:
     state: present
     name: "{{ lambdaName }}"
     zip_file: "{{ lambdaZipFile }}"
     runtime: "{{ lambdaRuntime }}"
     role: "{{ lambdaRole }}"
     description: "{{ lambdaDescription }}"
     handler: "{{ lambdaHandler }}"
   register: lambdaFunc
   retries: 3
   delay: 10
   until: "{{ lambdaFunc.code is defined }}"

大多数人最终会遇到此错误,因为在创建 Lambda 函数时在 CloudFormation 中提供了错误的角色 ARN。

确保首先使用 "DependsOn" 完成角色并使用内部函数 """{ "Fn::GetAtt" : [ "your-role-logical-name", "Arn" ] }"" “

我 运行 在使用 terraform 时遇到了这个错误,需要添加代入角色策略并将其应用于 lambda 代入的角色。

data "aws_iam_policy_document" "lambda_assume_role_policy" {

  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = [
        "lambda.amazonaws.com"
      ]
    }
  }

resource "aws_iam_role" "lambda_rotation_role" {
  name               = "lambda-rotation-role"
  assume_role_policy = "${data.aws_iam_policy_document.lambda_assume_role_policy.json}"
}

我刚刚学习使用 AWS CLI 和 运行 解决这个问题。

我正在使用一系列 PowerShell 脚本来部署整个 AWS 架构。我的 createRole.ps1 脚本包含:

aws iam create-role `
--role-name $roleName `
--assume-role-policy-document file://myRoleTrustPolicy.json

文件myRoleTrustPolicy.json包含:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "elasticmapreduce.amazonaws.com",
          "datapipeline.amazonaws.com",
          "lambda.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

导致问题的是服务列表中缺少的 "lambda.amazonaws.com" 行。

一旦我解决了这个问题,aws lambda create-function 的调用工作得很好。

aws lambda create-function `
--function-name $fn `
--runtime java8 `
--role $currentRoleARN `
--handler "handleRequest" `
--memory-size 128 `
--zip-file $jarFile 

我在测试 lambda 函数时遇到了这个问题。

对我有用的是格式化 JSON。

可能是 Lambda 缺少执行角色。或者这个角色已经被删除了。

在控制台中,您可以在 Lambda > Functions > YourFunction > Permissions 中查看状态。即使是没有策略的 IAM 空角色也足以使其工作。

我遇到这个错误只是因为我在角色 ARN 中输入错误。我真的希望错误更明确一些,并说出“这个角色不存在”之类的话,但是唉。