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

Mid*_*kar 29 python boto amazon-web-services aws-sdk aws-lambda

当我尝试使用create-function命令创建lambda函数时,我收到错误"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

Emi*_*ile 57

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

上述答案中的注释指出您需要添加以下内容.

  1. 转到'IAM>角色> YourRoleName'
    • (注意:如果未列出您的角色,则需要创建它.)
  2. 选择"信任关系"选项卡
  3. 选择"编辑信任关系"

我的结局如下.

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

  • 我有同样的问题,甚至附加到这个角色政策。我已经配置了 lambda 函数基本设置,转到 Lambda 控制台,编辑 Lambda 执行角色 -&gt; 编辑基本设置 -&gt; 现有角色 -&gt; 选择为 lambda 创建的角色 -&gt; 将角色重新附加到 lambda 函数 -&gt; 保存 -&gt; 它可以工作 (2认同)
  • 对于遇到类似问题的其他人,请检查您的“Principal.Service”,就我而言,我将其错误配置为“ec2.amazonws.com”,显然它不适用于 lambda。 (2认同)

FOR*_*FOR 31

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

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

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

  • +1"睡5或6秒"是这里的解决方案.我使用JavaScript SDK遇到了同样的问题并等待我修复.我发布了一个自我回答[问题](http://stackoverflow.com/q/37503075/1476885),其中包含Node的代码示例. (20认同)
  • @Zanon - 感谢您指向您的问答。如果我有时间,我会尝试将其传递到官方论坛,通常当资源需要时间准备就绪时,我们会得到一个可以查询的状态(如果您使用的是 boto3 ,甚至还有服务员对象),所以这似乎就像一个奇怪的(据我所知)不一致的地方 (2认同)
  • 我有时会遇到需要 5 分钟才能完成工作的问题。其他时候它会立即起作用, (2认同)

ale*_*ird 16

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

--role arn:aws:iam::000000000000:role/MyRoleName
Run Code Online (Sandbox Code Playgroud)

什么时候应该

--role arn:aws:iam::000000000000:role/service-role/MyRoleName
Run Code Online (Sandbox Code Playgroud)

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

我通过跑步发现了这个

aws iam get-role --role-name MyRoleName
Run Code Online (Sandbox Code Playgroud)

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


djh*_*llx 5

我刚刚学习使用 AWS CLI 并遇到了这个问题。

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

aws iam create-role `
--role-name $roleName `
--assume-role-policy-document file://myRoleTrustPolicy.json
Run Code Online (Sandbox Code Playgroud)

文件myRoleTrustPolicy.json包含:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "elasticmapreduce.amazonaws.com",
          "datapipeline.amazonaws.com",
          "lambda.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

导致问题的是服务列表中缺少的“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 
Run Code Online (Sandbox Code Playgroud)


Mar*_*acz 5

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

对我有用的是格式化 JSON。