Невозможно вызвать лямбда-функцию в методе шлюза API с использованием шаблона облачной информации

Я пытаюсь подготовить Lambda и API Gateway с помощью шаблона CloudFormation и пытаюсь вызвать Lambda в одном из методов, но получаю такую ​​проблему, как функция arn, недействительна. Пожалуйста, примите решение по этому поводу

{

"AWSTemplateFormatVersion":"2010-09-09",

"Transform":"AWS::Serverless-2016-10-31",

"Description":"Testing.",

"Parameters":{
   
},
"Conditions":{
   
},
"Resources":{
   "AspNetCoreFunction":{
      "Type":"AWS::Serverless::Function",
      "Properties":{
         "Handler":"<Handler_details>",
         "Runtime":"dotnetcore3.1",
         "CodeUri":"",
         "MemorySize":256,
         "Timeout":30,
         "Role":"$Function_Role",
         "Policies":null,
      }
   },
   "gateway":{
      "Type":"AWS::ApiGateway::RestApi",
      "Properties":{
         "Name":"Test",
         "Description":"Testing",
         "ApiKeySourceType":"HEADER",
         "EndpointConfiguration":{
            "Types":[
               "REGIONAL"
            ]
         }
      }
   },            
 
   "ApiMethod":{
      "Type":"AWS::ApiGateway::Method",
      "Properties":{
         "RestApiId":{
            "Ref":"gateway"
         },
         "HttpMethod":"ANY",
         "AuthorizationType":"NONE",
         "Integration":{
            "IntegrationHttpMethod":"POST",
            "TimeoutInMillis":29000,
            "Type":"AWS_PROXY",
            "Uri":{
               "Fn::Sub":[
                  "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${lambdaArn}/invocations",
                  {
                     "lambdaArn":{
                        "Fn::GetAtt":[
                           "AspNetCoreFunction",
                           "Arn"
                           
                        ]
                     }
                  }
               ]
            }

         }
      }
   }

}

Я попытался использовать нижеуказанный uri от имени выше uri, который упоминается в приведенном выше коде, но все еще имеет ту же проблему.

uri: Fn :: Sub: [arn: aws: apigateway: us-east-1: lambda: path / 2015-03-31 / functions / $ {AspNetCoreFunction.Arn} / invocations]

@Marcin. Спасибо за ваш комментарий. Найдите ОШИБКУ. Недопустимая лямбда-функция (служба: AmazonApiGateway; код состояния: 400; код ошибки: BadRequestException; идентификатор запроса: 9cc5af0e-f6a1-4fe4-bad4-bdb066959928; прокси: null)   —  person kaka    schedule 04.05.2021

В чем именно заключается сообщение об ошибке?   —  person kaka    schedule 04.05.2021

См. также:  GCP: можно ли использовать Pony ORM с облачными функциями и Cloud SQL
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. kaka

    Я думаю, что ошибка не в ARN, а в том, что у шлюза API нет разрешений на вызов вашей функции. Вам нужно добавить что-то вроде следующего:

    {
      "AllowApiInvokations": {
        "Type": "AWS::Lambda::Permission",
        "Properties": {
          "Action": "lambda:InvokeFunction",
          "FunctionName": "<function-name>" ,
          "Principal": "apigateway.amazonaws.com"
        }
      }
    }
    

    @ Спасибо Marcin, но он ожидает получить имя arn, когда я использовал вызов, а не только лямбда-функцию. Найдите код, который я использовал в соответствии с вашим предложением. AllowApiInvokations: {Тип: AWS :: Lambda :: Permission, Свойства: {Действие: lambda: InvokeFunction, FunctionName: AspNetCoreFunction.Arn, Принципал: apigateway.amazonaws.com}}, person kaka; 04.05.2021

    ОШИБКА: обнаружена 1 ошибка проверки: значение ‘AspNetCoreFunction.Arn’ в ‘functionName’ не удовлетворяет ограничению: элемент должен удовлетворять шаблону регулярного выражения: (arn: (aws [a-zA-Z -] *) ?: лямбда :)? ([az] {2} ((- gov) | (-iso (b?)))? — [az] + — \ d {1}:)? (\ d {12}:)? (функция :) ? ([a-zA-Z0-9- ] +) (: (\ $ LATEST | [a-zA-Z0-9-] +))? (Сервис: AWSLambda; Код состояния: 400; Код ошибки: ValidationException; Идентификатор запроса: 02eb03d7-d249-4d40-bea2-4c75c7720557; Прокси-сервер: null) person kaka; 04.05.2021

    @kaka Вы должны использовать Fn::GetAtt, чтобы получить arn, как в исходном шаблоне. person kaka; 05.05.2021

    @kaka Как все прошло? Все еще не работает? person kaka; 06.05.2021

    AllowApiInvokations: Тип: AWS :: Lambda :: Permission Свойства: Действие: lambda: InvokeFunction Имя функции: Fn :: GetAtt: AspNetCoreFunction.Arn Участник: apigateway.amazonaws.com person kaka; 06.05.2021

    Найдите приведенный выше код, который я использовал в исходном шаблоне, но по-прежнему имеет ту же проблему. person kaka; 06.05.2021

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: