Роль, определенная для функции, не может быть принята лямбда
Я получаю сообщение об ошибке "Роль, определенную для функции, не может быть принята лямбда-выражением", когда я пытаюсь создать лямбда-функцию с помощью команды create-function.
AWS лямбда-создать функцию
--регион сша-запад-2
--function-name HelloPython
--zip-файл fileb: //hello_python.zip
--role arn: aws: iam:: my-acc-account-id: role / default
--handler hello_python.my_handler
--runtime python2.7
- время ожидания 15
- размер памяти 512
11 ответов
Я получил сообщение об ошибке "Роль, определенная для функции, не может быть принята лямбдой", потому что я не обновил файл конфигурации ролей "Доверительные отношения". Я не сталкивался с проблемами тайм-аута, как в связанном ответе в комментариях.
Комментарии в ответах выше указали, что вам нужно добавить следующее.
- Перейдите к "IAM > Роли> YourRoleName"
- (Примечание: если вашей роли нет в списке, вам нужно ее создать.)
- Выберите вкладку "Доверительные отношения"
- Выберите "Изменить доверительные отношения"
Мой закончился как ниже.
{
"Version": "2012-10-17",
"Statement": [
{
<your other rules>
},
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Я также сталкиваюсь с этой ошибкой. Не получил окончательного ответа (пока), но подумал, что я дам пару советов, которые могут помочь вам и / или кому-либо еще решить эту проблему.
A) Если вы создаете Ролевую ARN, комбинируя идентификатор своей учетной записи и имя роли, я думаю, что идентификатор учетной записи должен быть без черточек
Б) Если вы только что создали роль и, возможно, добавили к ней политики, похоже, существует (небольшое) окно времени, в которое роль вызовет эту ошибку. Сон на 5 или 6 секунд между последней операцией над ролью и вызовом create-function позволил мне обойти проблему (но, конечно, время может быть переменным, так что в лучшем случае это обходной путь).
Для меня проблема заключалась в том, что у меня было неполное название для роли. Я поставил
--role arn:aws:iam::000000000000:role/MyRoleName
когда это должно было быть
--role arn:aws:iam::000000000000:role/service-role/MyRoleName
(конечно, мой идентификатор aws на самом деле не 000000000000)
Я обнаружил это, запустив
aws iam get-role --role-name MyRoleName
и глядя на "Arn"
свойство в наборе результатов.
У меня возникла эта проблема при тестировании лямбда-функции.
Для меня сработало форматирование 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 работал отлично.
aws lambda create-function `
--function-name $fn `
--runtime java8 `
--role $currentRoleARN `
--handler "handleRequest" `
--memory-size 128 `
--zip-file $jarFile
Была такая же проблема, хотя у моей роли в 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 }}"
У меня была эта ошибка просто потому, что у меня была опечатка в роли ARN. Я действительно хотел бы, чтобы ошибка была более явной и говорила что-то вроде «этой роли не существует», но, увы.
Для меня проблема заключалась в том, что я установил неправильный ключ среды региона по умолчанию.
Я столкнулся с этой ошибкой с 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}"
}
Возможно, в Lambda отсутствует исполнительная роль. Или эта роль была удалена.
В консоли вы можете увидеть статус в Lambda > Functions > YourFunction > Permissions. Даже пустой роли IAM без политик достаточно, чтобы заставить ее работать.
Большинство людей заканчивают с этой ошибкой из-за неправильного Ролевого ARN в CloudFormation при создании Лямбда-функции.
Сначала убедитесь, что роль завершена с помощью "DependsOn" и используйте встроенную функцию """{ "Fn::GetAtt": [ "your-role-logic-name", "Arn" ] }"""