Lambda不能假定为函数定义的角色

时间:2016-04-05 07:09:35

标签: python amazon-web-services boto aws-sdk aws-lambda

我收到错误" Lambda"不能假定为该功能定义的角色。当我试图用create-function命令创建一个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
   - 超时15
  --memory-size 512

11 个答案:

答案 0 :(得分:44)

我收到错误“Lambda不能假定为函数定义的角色”,因为我没有更新角色“Trust Relationship”配置文件。我没有像评论中的链接答案那样遇到超时问题。

上述答案中的评论指出您需要添加以下内容。

  1. 转到'IAM>角色> YourRoleName”
    • (注意:如果未列出您的角色,则需要创建它。)
  2. 选择“信任关系”标签
  3. 选择“编辑信任关系”
  4. 我的结局如下。

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

答案 1 :(得分:27)

我也遇到了这个错误。尚未得到确定的答案(但)但我认为我会传递一些可能有助于您和/或其他任何人解决此问题的提示。

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

B)如果你刚刚创建了角色,并且可能添加了策略,那么角色似乎会在一个(小)时间窗口中触发此错误。在角色的最后一次操作和创建函数调用之间休息5或6秒允许我绕过这个问题(当然,时间可能是变化的,所以这最好是解决方法)。

答案 2 :(得分:15)

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

--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"属性。

答案 3 :(得分:5)

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

对我有用的是格式化JSON。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

我也尝试过&#34;暂停&#34;几秒钟,但它没有帮助。

结束添加重试和延迟,直到定义了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 }}"

答案 7 :(得分:0)

大多数人最终由于在创建Lambda函数时在CloudFormation中提供错误的Role ARN而导致此错误。

确保首先使用“ DependsOn”完成角色,然后使用内部函数“”” {“ Fn :: GetAtt”:[“您的角色逻辑名称”,“ Arn”]}“”“

答案 8 :(得分:0)

我遇到了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}"
}

答案 9 :(得分:0)

我只是在学习使用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 

答案 10 :(得分:0)

可能是 Lambda 缺少执行角色。或者此角色已被删除。

在控制台中,您可以在 Lambda > 函数 > YourFunction > 权限中查看状态。即使是没有策略的 IAM 空角色也足以让它发挥作用。