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" 配置文件。我没有遇到评论中链接答案中的超时问题。
上面回答中的注释指出需要添加以下内容
- 转到'IAM > Roles > YourRoleName'
- (注意:如果您的角色未列出,则需要创建它。)
- Select 'Trust Relationships' 选项卡
- 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 中输入错误。我真的希望错误更明确一些,并说出“这个角色不存在”之类的话,但是唉。
我在尝试使用 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" 配置文件。我没有遇到评论中链接答案中的超时问题。
上面回答中的注释指出需要添加以下内容
- 转到'IAM > Roles > YourRoleName'
- (注意:如果您的角色未列出,则需要创建它。)
- Select 'Trust Relationships' 选项卡
- 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 中输入错误。我真的希望错误更明确一些,并说出“这个角色不存在”之类的话,但是唉。