Подключите определенный этап AWS API Gateway к определенному псевдониму Lambda в шаблоне CloudFormation - PullRequest
0 голосов
/ 18 мая 2018

Я создаю шаблон CloudFormation для своих функций AWS API Gateway и Lambda, и мне нужно подключить определенный этап API Gateway к определенному псевдониму Lambda.У меня есть два псевдонима - QA и Prod, и два этапа API (также QA & Prod), в шаблоне CloudFormation это выглядит так:

AWSTemplateFormatVersion: "2010-09-09"

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

Description: Lambda function configuration

Resources:
  EndpointLambda:
    Type: "AWS::Lambda::Function"
    Properties:
      FunctionName: "endpoint-lambda"
      Handler: "com.test.aws.RequestHandler::handleRequest"
      Runtime: java8
      Code:
        S3Bucket: "lambda-functions"
        S3Key: "test-endpoint-lambda-0.0.1.jar"
      Description: Test Lambda function
      MemorySize: 256
      Timeout: 60
      Environment:
        Variables:
          ES_HOST: test-es-host-url
          ES_ON: true
          ES_PORT: 443
          ES_PROTOCOL: https
          REDIS_URL: test-redis-host-url

  QaLambdaAlias:
    Type: "AWS::Lambda::Alias"
    Properties:
      FunctionName: !Ref EndpointLambda
      FunctionVersion: 1
      Name: "QA"
      Description: "QA alias"

  ProdLambdaAlias:
    Type: "AWS::Lambda::Alias"
    Properties:
      FunctionName: !Ref EndpointLambda
      FunctionVersion: 1
      Name: "Prod"
      Description: "Production alias"

  RestApi:
    Type: "AWS::ApiGateway::RestApi"
    Properties:
      Name: "test-rest-api"
      Description: "Test REST API"

  RestApiResource:
    Type: "AWS::ApiGateway::Resource"
    Properties:
      RestApiId: !Ref "RestApi"
      ParentId: !GetAtt "RestApi.RootResourceId"
      PathPart: "/test"

  RestApiDeployment:
    Type: "AWS::ApiGateway::Deployment"
    Properties:
      RestApiId: !Ref "RestApi"

  QaRestApiStage:
    Type: "AWS::ApiGateway::Stage"
    Properties:
      DeploymentId: !Ref "RestApiDeployment"
      RestApiId: !Ref "RestApi"
      StageName: "qa"

  ProdRestApiStage:
    Type: "AWS::ApiGateway::Stage"
    Properties:
      DeploymentId: !Ref "RestApiDeployment"
      RestApiId: !Ref "RestApi"
      StageName: "prod"

Как я могу описать в шаблоне, что этап API QA должен вызывать псевдоним QAлямбда-функции и стадия Prod - псевдоним Prod?

1 Ответ

0 голосов
/ 18 мая 2018

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

https://docs.aws.amazon.com/apigateway/latest/developerguide/stage-variables.html

Но для быстрого ответа, что выищем это $: {stageVariables.stage}, это связывает псевдоним лямбды, который вы хотите вызвать.В графическом интерфейсе это выглядело бы примерно так: enter image description here

Что это сделает, это разрешит вашей лямбде вызывать определенный псевдоним.После этого вы сможете увидеть новую опцию при использовании функции тестирования в шлюзе API.Так что здесь вы бы указать QA.Enter the lambda Alias here

Итак, чтобы отразить это в Cloudformation, нам нужно сделать нечто подобное -

  RestApi:
      Type: "AWS::ApiGateway::RestApi"
      Properties:
          Name: "test-rest-api"
          Description: "Test REST API"
          paths:
              /ExamplePath:
                put:
                    #Here will go all the configuration setting you want
                    #Such as security, httpMethod, amd passthroughBehavior
                    #But what you need is
                    uri: 'arn:aws:apigateway:${AWS:Region}:lambda:path/2-15/03/31/functions/${LambdaARN}:${!stageVariables.stage}/invocations'

Более подробную информацию об этом можно найти здесь: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apitgateway-method-integration.html то, что вы хотите увидеть, находится в самом низу страницы.Надеюсь, это поможет!

...