Роль, определенная для функции, не может быть принята лямбда

Я получаю сообщение об ошибке "Роль, определенную для функции, не может быть принята лямбда-выражением", когда я пытаюсь создать лямбда-функцию с помощью команды 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 ответов

Я получил сообщение об ошибке "Роль, определенная для функции, не может быть принята лямбдой", потому что я не обновил файл конфигурации ролей "Доверительные отношения". Я не сталкивался с проблемами тайм-аута, как в связанном ответе в комментариях.

Комментарии в ответах выше указали, что вам нужно добавить следующее.

  1. Перейдите к "IAM > Роли> YourRoleName"
    • (Примечание: если вашей роли нет в списке, вам нужно ее создать.)
  2. Выберите вкладку "Доверительные отношения"
  3. Выберите "Изменить доверительные отношения"

Мой закончился как ниже.

{
  "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" ] }"""

Другие вопросы по тегам