Добавьте AWS :: Route53 :: RecordSet DnsRecord в безсерверный дистрибутив Cloudfront - PullRequest
0 голосов
/ 31 мая 2018

Я нашел это о том, как связать запись DNS-маршрута route53 с корзиной S3 в файле serverless.yml.

Я пытался адаптировать это в случае развертыванияcloudfront distrib

DnsRecord:
  Type: "AWS::Route53::RecordSet"
  Properties:
    AliasTarget:
      DNSName: <cloudfrontdistribution id>
      HostedZoneId: Z21DNDUVLTQW6Q
    HostedZoneName: ${self:custom.appFQDN}.
    Name:
      Ref: WebAppCloudFrontDistribution
    Type: 'CNAME'

, но я пытаюсь выяснить, как получить идентификатор распространения в виде ссылки, а не фиксированной строки.

Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Вот так выглядит моя рабочая конфигурация в безсерверных шаблонах:

DnsRecord:
  Type: "AWS::Route53::RecordSet"
  Properties:
    AliasTarget:
      DNSName:
        Fn::GetAtt:
          - CloudFrontDistribution
          - DomainName
      # Looks like it is always the same for CloudFront distribs.
      # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html
      # https://docs.aws.amazon.com/general/latest/gr/rande.html#cf_region
      HostedZoneId: ${self:custom.zoneId}
    HostedZoneName: ${self:custom.secondLevelDomain}.
    Name: ${self:custom.appFQDN}
    Type: 'A'

И

CloudFrontDistribution:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      ...
      Aliases:
        - ${self:custom.appFQDN}

Также любезно предоставлен пример Тома Маклафлина: https://github.com/ServerlessOpsIO/serverless-zombo.com/blob/master/serverless.yml

0 голосов
/ 02 ноября 2018

Я изо всех сил пытался создать AWS::Route53::RecordSet с CloudFormation, производящим неспецифические, бесполезные сообщения об ошибках типа «Ресурс не удалось создать».Ключом для меня было использование HostedZoneId вместо HostedZoneName для указания родительской "размещенной зоны".Вот чем я закончил:

  NaaaaaComDNSEntry: 
    Type: 'AWS::Route53::RecordSet'
    DependsOn: NaaaaaComCloudFront
    Properties: 
      AliasTarget:
        DNSName: !GetAtt NaaaaaComCloudFront.DomainName
        # For CloudFront, HostedZoneId is always Z2FDTNDATAQYW2, see:
        # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-hostedzoneid
        HostedZoneId:  Z2FDTNDATAQYW2
    # HostedZoneId is for ID for 'naaaaa.com.'; In theory its valid to use `HostedZoneName` OR `HostedZoneId`
    # but in practice the recordset always failed to create if I used `HostedZoneName`
    HostedZoneId: ZABCDEFGHIJK5M
    Name: 'www.naaaaa.com.'
    Type: 'A'
0 голосов
/ 01 июня 2018

Чтобы настроить AliasTarget, вам просто нужно предоставить DNS-имя CloudFront для параметра DNSName, а не ID дистрибутива.Вы можете сделать это с помощью:

!GetAtt WebAppCloudFrontDistribution.DomainName

Я предполагаю, что WebAppCloudFrontDistribution является логическим идентификатором ресурса AWS :: CloudFront :: Distribution в вашем шаблоне, а не параметром.Если это на самом деле параметр, просто задайте в качестве значения параметра DNS-имя, указанное для распределения на панели мониторинга консоли AWS для CloudFront.

Есть некоторые другие вещи, которые вам необходимо исправить в шаблоне.:

  • HostedZoneName должно быть именем размещенной зоны Route53, а не полным доменным именем, которое вы хотите использовать.Лично я предпочитаю использовать свойство HostedZoneId для ресурсов AWS :: Route53 :: RecordSet, поскольку оно более понятно, каково значение этого свойства, но каждому из них свой.(Примечание. Свойство HostedZoneId для ресурса AWS :: Route53 :: RecordSet должно быть размещенной зоной HostedZoneId для ВАШЕЙ зоны, а не значением AliasTarget HostedZoneId.)
  • Имя должно быть именем DNS, которое вы хотите использоватьбыть CNAME для дистрибутивного ресурса CloudFront.
  • Я знаю, что это немного странно, но для псевдонимов цели вы должны установить тип либо «A» (для IPv4), либо «AAAA» (IPv6).Я рекомендую сделать и то и другое - вы можете сделать это, создав дубликат вашего ресурса AWS :: Route53 :: RecordSet, но указав тип «AAAA» вместо «A».

Наконец, обратите внимание, что вЧтобы это работало, вам также необходимо добавить полное доменное имя в качестве альтернативного имени для ресурса распределения CloudFront - вы можете установить его, используя свойство «Aliases» свойства «DistributionConfig» ресурса распределения в вашем шаблоне.или путем настройки этого вручную для параметров распространения в консоли AWS, если вы не создаете ресурс в этом шаблоне.

...