Как я могу ссылаться на имена наборов записей в разделе вывода моего скрипта cloudformation?

Я создаю несколько записей DNS в своем облачном хранилище. В скрипт cfn передается параметр, который приводит к созданию записи Route53, например hostname-test.example.com:

"Host" : {
  "Type" : "AWS::Route53::RecordSetGroup",
  "Properties" : {
      "HostedZoneName" : "example.com.",
      "RecordSets" : [
        {
          "Name" : { 
            "Fn::Join" : [ "-", [
                {"Ref" : "Hostname" },
                "test.example.com"
            ]]
          },
          "Type" : "A",
          "AliasTarget" : {
            "DNSName" : { "Fn::GetAtt" : [ "PublicWebLoadBalancer", "CanonicalHostedZoneName" ] },
            "HostedZoneId" : { "Fn::GetAtt" : [ "PublicWebLoadBalancer", "CanonicalHostedZoneNameID" ] }
          }
        }
      ]
  }
}

В моем выводе я хотел бы получить атрибут Name из RecordSet, но я не знаю, как на него ссылаться. Согласно документации по Fn::GetAtt Объекты Route53 не поддерживаются.

Это возможно?


person chris    schedule 02.02.2015    source источник


Ответы (4)


Этот вопрос немного устарел, но я только что столкнулся с этой же проблемой. Вам нужно вывести весь RecordSet, т.е.:

"Outputs" : {
  "MyDNSRecord" : {
    "Description": "The DNS Record of ...",
    "Value" : { "Ref": "MyRecordSet" }
  }
}

Который (не интуитивно) выводит значение имени набора записей, которое вы ищете.

person acumartini    schedule 28.07.2017
comment
Этот ответ правильный, но изначально мне он не был ясен. Я добавил аналогичный ответ для yaml. - person brandonsimpkins; 31.07.2018

У меня был тот же вопрос, и я искал четкий ответ в yaml.

Учитывая следующее AWS::Route53::RecordSet

rPublicReverseProxyNLBDnsRecord:
  Type: AWS::Route53::RecordSet
  Properties:
    HostedZoneName: !Ref pPublicHostedZoneName
    Comment:  !Sub 'DNS record for the ${AWS::StackName} ELB front door.'
    Name: !Sub '${pDeploymentType}.${pPublicHostedZoneName}'
    Type: CNAME
    TTL: '30'
    ResourceRecords:
      - !GetAtt rPublicReverseProxyNLB.DNSName

Мне удалось вывести URL-адрес приложения, который я хотел, со следующим кодом раздела вывода:

Outputs:

  ApplicationURL:
    Description: 'The public URL for the application'
    Value: !Sub 'https://${rPublicReverseProxyNLBDnsRecord}/'
person brandonsimpkins    schedule 30.07.2018

Вместо того, чтобы встраивать свой RecordSet в RecordSetGroup, определите его как отдельное свойство с тем же именем HostedZoneName, что и у RecordSetGroup.

Затем вы можете использовать «Ref», чтобы получить значение атрибута Name.

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-recordset.html

person bsvingen    schedule 03.02.2015

Я поддерживаю предложение попробовать RecordSet.

Но ваше "Имя" детерминировано. Если стек завершается, вывод того, что у вас уже есть, никогда не будет отличаться от того, что вы хотите:

          { 
            "Fn::Join" : [ "-", [
                {"Ref" : "Hostname" },
                "test.example.com"
            ]]
          }

Если бы это было ООП, я бы сказал, что совершенно неправильно отказываться от аргумента, не воспользовавшись возможностью неявно протестировать функцию.

person nik.shornikov    schedule 10.02.2015