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

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