我收到错误" 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
答案 0 :(得分:44)
我收到错误“Lambda不能假定为函数定义的角色”,因为我没有更新角色“Trust Relationship”配置文件。我没有像评论中的链接答案那样遇到超时问题。
上述答案中的评论指出您需要添加以下内容。
{
"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 空角色也足以让它发挥作用。