Как настроить собственные доменные имена с Route53 в AWS SAM Cloud-Formation - PullRequest
0 голосов
/ 19 марта 2020

ОРИГИНАЛЬНЫЕ ВОПРОСЫ: Как получить RegionalDomainName из AWS APIGateway DomainName в SAM Cloud-формации

РЕДАКТИРОВАТЬ: я изменил вопрос, чтобы, надеюсь, получить больше трафика c на этот ответ, поскольку он отвечает на несколько вопросов, а не только на мой первоначальный.


При попытке развернуть свой стек возникает следующая ошибка:

resource DomainName does not support attribute type regionalDomainName in Fn::GetAtt

Мой файл yml выглядит следующим образом:

  PublicApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: PublicApi
      ...
      EndpointConfiguration: REGIONAL

  DomainName:
    Type: AWS::ApiGateway::DomainName
    Properties:
      RegionalCertificateArn: "arn:aws:acm:${Region}:XXXXXXXXXXX:certificate/XXXXXXXXXXXXX"
      DomainName: !Sub ${Stage}.${name}
      EndpointConfiguration:
        Types:
          - REGIONAL

  myDNSRecord:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneId : Z1UJRXOUMOOFQ8
      Name: !Sub ${Stage}.${name}
      AliasTarget:
        HostedZoneId: Z1UJRXOUMOOFQ8 
        DNSName: !GetAtt DomainName.regionalDomainName
      Type: A

  UrlMapping:
    Type: AWS::ApiGateway::BasePathMapping
    DependsOn:
      - PublicApi
    Properties:
      DomainName: !Ref DomainName
      RestApiId: !Ref PublicApi
      Stage: !Ref Stage

Ниже приводится документация DomainName :

"RegionalDomainName Имя домена, связанное с региональной конечной точкой для этого настраиваемое доменное имя. Вы устанавливаете эту связь, добавляя запись DNS, которая указывает настраиваемое доменное имя на это региональное доменное имя. "

Я не совсем понимаю, что мне нужно сделать, чтобы сделать это доменное имя региональным.

Я также получаю следующие ошибки в разных итерациях, которые, я думал, это должно исправить:

"Невозможно импортировать сертификаты для EDGE, которые le REGIONAL активен. "

Любая помощь на этом фронте будет принята с благодарностью!

1 Ответ

0 голосов
/ 19 марта 2020

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

  PublicApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: PublicApi
      StageName: ApiStage
      ...
      EndpointConfiguration: REGIONAL
  DomainName:
    Type: AWS::ApiGateway::DomainName
    Properties:
      RegionalCertificateArn: "arn:aws:acm:u${Region}:XXXXXXXX:certificate/XXXXXXXX"
      DomainName: stage.example.com
      SecurityPolicy: TLS_1_2
      EndpointConfiguration:
        Types:
          - REGIONAL
  LambdaDNS:
    Type: AWS::Route53::RecordSetGroup
    Properties:
      HostedZoneName:
        Ref: example.com.
      RecordSets:
        - Name:
            Fn::Sub: stage.example.com.
          Type: A
          AliasTarget:
            HostedZoneId: Z1UJRXOUMOOFQ8
            DNSName:
              Fn::GetAtt:
                - DomainName
                - RegionalDomainName
  UrlMapping:
    Type: AWS::ApiGateway::BasePathMapping
    DependsOn:
      - PublicApi
      - PublicApiStage
    Properties:
      DomainName:
        Ref: DomainName
      RestApiId:
        Ref: PublicApi
      Stage: ApiStage

Ключевым битом для меня стало то, что DependsOn в BasePathMapping.

...