Шаблон SAM: несколько микросервисных лямбд, совместно использующих один AWS :: ApiGateway :: DomainName - PullRequest
0 голосов
/ 28 апреля 2018

Моя цель - предоставить нескольким независимым лямбда-ресурсам (микросервисам) общий пользовательский домен для тестовой среды. Используя приведенный ниже шаблон, развертывание микросервиса № 1 прошло без проблем. Однако при развертывании микросервиса № 2 CloudFormation завершается сбоем и выполняется откат, поскольку доменное имя назначено микросервису № 1.

Разумеется, должна быть возможность совместного использования общего пользовательского домена между несколькими микросервисами с уникальными путями?

Сервис № 1 template.yaml

Resources:
  ApiGatewayApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Sub ${apiGatewayStageName}
      DefinitionBody:
        swagger: "2.0"
        info:
          title: !Sub ${functionName}
        paths:
          "/service_one":
            post:
              responses: {}
              x-amazon-apigateway-integration:
                uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${functionName}:live/invocations"
                httpMethod: POST
                type: aws_proxy

  ApiGatewayCustomDomainName:
    Type: AWS::ApiGateway::DomainName
    Properties:
      CertificateArn: !Sub "arn:aws:acm:${AWS::Region}:${AWS::AccountId}:certificate/${apiGatewayCDNCertificateId}"
      DomainName: !Sub "${envName}.${apiGatewayCustomDomainNameSuffix}"
    DependsOn:
      - "LogsSubscriptionFilter"
      - "ApiGatewayApi"

  ApiGatewayBasePathMapping:
    Type: AWS::ApiGateway::BasePathMapping
    Properties:
      DomainName: !Ref ApiGatewayCustomDomainName
      RestApiId: !Ref ApiGatewayApi
      Stage: !Ref apiGatewayStageName
    DependsOn: "ApiGatewayCustomDomainName"

Шаблон службы # 2 такой же, за исключением другого пути (например, /service_two.

1 Ответ

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

Работал с поддержкой AWS, чтобы добраться до сути этого. В его текущей форме (май 2018 г.), если вам нужны отдельные шаблоны SAM для каждой лямбды по причинам развертывания, но у вас есть общий ресурс шлюза API для этих лямбд, тогда у вас должен быть отдельный выделенный шаблон SAM шлюза API. Кроме того, параметр Events в AWS :: Serverless :: Function должен быть исключен в пользу определения путей в AWS :: Serverless :: Api.

Наконец, AWS :: Serverless :: Function (s) необходимо экспортировать в разделе «Вывод», а затем импортировать с помощью ресурса AWS :: Serverless :: Api.

...