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

问题描述 投票:25回答:6

当我尝试使用create-function命令创建lambda函数时,我收到错误“Lambda不能为函数定义角色”。

aws lambda create-function - 区域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

python amazon-web-services boto aws-sdk aws-lambda
6个回答
46
投票

我收到错误“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"
    }
  ]
}

28
投票

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

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

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


16
投票

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

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


2
投票

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


0
投票

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

我也尝试“暂停”几秒钟,但没有帮助。

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

0
投票

由于在创建Lambda函数时在CloudFormation中提供了错误的角色ARN,大多数人都会遇到此错误。

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


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}"
}
© www.soinside.com 2019 - 2024. All rights reserved.