Роль, определенная для функции, не может быть определена Лямбдой
Я получаю сообщение об ошибке "Роль, определенная для функции, не может быть принята Lambda", когда я пытаюсь создать лямбда-функцию с помощью команды create-function.
aws lambda create-function
--область us-west-2
- имя-функции HelloPython
--zip-file fileb://hello_python.zip
--role arn: aws: iam:: my-acc-account-id: роль /default
--handler hello_python.my_handler
--runtime python2.7
--timeout 15
--memory-size 512
Ответы
Ответ 1
Я получил ошибку "Роль, определенная для функции, не может быть принята Lambda", потому что я не обновил конфигурационный файл роли "Trust Relationship". Я не встречал проблемы с таймаутом, как в связанном ответе в комментариях.
В приведенных выше ответах указано, что вам нужно добавить следующее.
- Перейдите в раздел "IAM > Роли > YourRoleName '
- (Примечание: если ваша роль не указана в списке, вам необходимо ее создать.)
- Выберите вкладку "Доверительные отношения"
- Выберите "Изменить доверительные отношения"
Мина закончилась так, как показано ниже.
{
"Version": "2012-10-17",
"Statement": [
{
<your other rules>
},
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Ответ 2
Я также сталкиваюсь с этой ошибкой. Не получили окончательного ответа (пока), но подумал, что я передам пару советов, которые могут помочь вам и/или кому-либо еще воспользоваться этой проблемой.
A) Если вы создаете ARN роли, объединив свой идентификатор учетной записи и имя роли, я думаю, что идентификатор учетной записи должен быть без каких-либо тире
B) Если вы только что создали роль и, возможно, добавили к ней политики, похоже, есть (небольшое) окно времени, в котором эта роль вызовет эту ошибку. Спящий 5 или 6 секунд между последней операцией роли и вызовом функции-функции позволил мне обойти проблему (но, конечно, время может быть переменным, поэтому это в лучшем случае обход).
Ответ 3
Для меня проблема заключалась в том, что у меня было неполное имя роли. Я установил
--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"
в результирующем наборе.
Ответ 4
Для меня проблема заключалась в том, что я установил неправильный ключ среды по умолчанию.
Ответ 5
Была такая же проблема, хотя у моей роли в IAM была правильная политика и доверительные отношения. Создание лямбды работало нормально, когда выполнялось через CLI, проблема была в том, что при использовании лямбда-модуля после создания роли IAM.
Я также пытался "остановиться" на несколько секунд, но это не помогло.
Завершено добавление повторов и задержек до определения 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 }}"
Ответ 6
Большинство людей заканчивают с этой ошибкой из-за неправильного Ролевого ARN в CloudFormation при создании Лямбда-функции.
Сначала убедитесь, что роль завершена с помощью "DependsOn" и используйте встроенную функцию "" "{" Fn :: GetAtt ": [" your-role-logic-name "," Arn "]}" ""
Ответ 7
Я столкнулся с этой ошибкой с помощью terraform, и мне нужно было добавить политику предполагаемой роли и применить ее к роли, которую принимает лямбда.
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}"
}
Ответ 8
Я только учусь использовать интерфейс командной строки AWS и столкнулся с этой проблемой.
Я использую серию сценариев 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