Выполнение не выполнено из-за ошибки конфигурации: недопустимые разрешения для функции Lambda - PullRequest
0 голосов
/ 07 января 2019

Я создаю безсерверное приложение с использованием AWS Lambda и API Gateway через Visual Studio. Я работаю в C # и использую модель бессерверного приложения (SAM) для развертывания моего API. Я создаю код в Visual Studio, а затем развертываю с помощью публикации в Lambda. Это работает, за исключением того, что каждый раз, когда я делаю новую сборку и пытаюсь выполнить вызов API, я получаю эту ошибку:

Ошибка выполнения из-за ошибки конфигурации: недопустимые разрешения для функции Lambda

Проведя некоторые исследования, я обнаружил, что это исправление упоминалось в другом месте (должно быть сделано с помощью консоли AWS):

Исправлено: перешел к Шлюзу API> Имя API> Ресурсы> Имя ресурса> Метод> Запрос интеграции> Лямбда-функция и повторно выбрал мою существующую функцию, прежде чем "сохранить" ее с помощью маленькой галочки.

Теперь это работает для меня, но это нарушает автоматизацию использования serverless.template (JSON) для построения моего API. Кто-нибудь знает, как это исправить в файле serverless.template? Так что мне не нужно предпринимать действия в консоли, чтобы решить? Вот пример одного из моих методов из файла serverless.template

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Transform" : "AWS::Serverless-2016-10-31",
  "Description" : "An AWS Serverless Application.",

  "Resources" : {

    "Get" : {
      "Type" : "AWS::Serverless::Function",
      "Properties": {
        "VpcConfig":{
          "SecurityGroupIds" : ["sg-111a1476"],
          "SubnetIds" : [ "subnet-3029a769","subnet-5ec0b928"]
        },
        "Handler": "AWSServerlessInSiteDataGw::AWSServerlessInSiteDataGw.Functions::Get",
        "Runtime": "dotnetcore2.0",
        "CodeUri": "",
        "MemorySize": 256,
        "Timeout": 30,
        "Role": null,
        "Policies": [ "AWSLambdaBasicExecutionRole","AWSLambdaVPCAccessExecutionRole","AmazonSSMFullAccess"],
        "Events": {
          "PutResource": {
            "Type": "Api",
            "Properties": {
              "Path": "/",
              "Method": "GET"
            }
          }
        }
      }
    },

1 Ответ

0 голосов
/ 25 февраля 2019

У меня была та же проблема, но я развертывал ее через Terraform. После предложения от другого пользователя я повторно выбрал свою функцию Lambda в части интеграции шлюза API, а затем проверил, что изменилось в моих разрешениях Lambda. Оказывается, мне нужно было добавить "*", где я помещал имя этапа в раздел source_arn триггера шлюза API в моем ресурсе Lambda. Не уверен, как SAM сравнивается с Terraform, но, возможно, вы можете изменить сценическое имя или просто попробовать эту технику устранения неполадок, которую я пробовал.

Моя публикация SO: Шлюз AWS API и функция Lambda развернуты через terraform - Ошибка выполнения из-за ошибки конфигурации: Неверные разрешения для функции Lambda

...