Lambda 不能承担为函数定义的角色

当我试图用 create-function 命令创建一个 Lambda 函数时,我得到了一个错误“ The role Definition for The function can not be  Lambda”。

Aws lambda create-function
美国西部2区
函数名为 HelloPython
—— zip-file fileb://hello _ python. zip
—— role arn: aws: iam: : my-acc-account-id: role/default
—— handler hello _ python. my _ handler
——运行时 python2.7
暂停15分钟
内存大小512

89208 次浏览

我也遇到了这个错误。还没有得到一个明确的答案(还没有) ,但我想我会传递一些提示,可能会帮助你和/或任何其他人解决这个问题。

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

B)如果您刚刚创建了角色,并且可能向其添加了策略,那么似乎存在一个(小)时间窗口,在这个时间窗口中,角色将触发此错误。在角色的最后一个操作和 create-function 调用之间休息5到6秒钟,这让我绕过了这个问题(当然,时间可能是可变的,所以这充其量只是一个解决方案)。

我得到一个错误“为函数定义的角色不能由 Lambda 承担”,因为我没有更新角色“ Trust Relations”配置文件。我没有遇到评论中链接答案中的超时问题。

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

  1. 转到“ IAM > Roles > YourRoleName”
    • (注意: 如果您的角色没有列出,那么您需要创建它。)
  2. 选择“信任关系”选项卡
  3. 选择“编辑信任关系”

我的结局就像下面这样。

{
"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 模块时。

我也试着“暂停”几秒钟,但没有用。

最终添加了重试和延迟,直到 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 函数时,在 CloudForm 中给出了错误的角色 ARN。

确保通过使用“ DependsOn”并使用内部函数“”{“ Fn: : GetAtt”: [“ your-role-logic-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 体系结构:

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 > Function> YourFunction > Permission 的状态。即使是一个没有策略的 IAM 空角色也足以让它工作。

我出现这个错误仅仅是因为我在 ARN 这个角色中有一个打字错误。我真的希望这个错误更明确一些,并且说一些类似于“这个角色不存在”的话,但是唉。