Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用对流层将一组记录集添加到云形成中?_Python_Amazon Web Services_Amazon Cloudformation_Aws Cli_Troposphere - Fatal编程技术网

Python 如何使用对流层将一组记录集添加到云形成中?

Python 如何使用对流层将一组记录集添加到云形成中?,python,amazon-web-services,amazon-cloudformation,aws-cli,troposphere,Python,Amazon Web Services,Amazon Cloudformation,Aws Cli,Troposphere,我正在使用python模块troposphere创建我的云形成模板。大部分内容已经完成,但我似乎对如何使用Recordset方法/函数为负载平衡器创建DNS条目感到困惑。本节的输出应该如下所示: "devdevopsdemoELBDNSARecord0": { "Type": "AWS::Route53::RecordSetGroup", "Properties": { "HostedZoneName": "FOO.net.", "Comment"

我正在使用python模块troposphere创建我的云形成模板。大部分内容已经完成,但我似乎对如何使用Recordset方法/函数为负载平衡器创建DNS条目感到困惑。本节的输出应该如下所示:

"devdevopsdemoELBDNSARecord0": {
    "Type": "AWS::Route53::RecordSetGroup",
    "Properties": {
        "HostedZoneName": "FOO.net.",
        "Comment": "Alias targeted to devdevopsdemoELB ELB.",
        "RecordSets": [
            {
             "Name": "devopsdemo.dev.FOO.net.",
             "Type": "A",
             "AliasTarget": {
             "HostedZoneId": {
                 "Fn::GetAtt": [
                    "devdevopsdemoELB",
                    "CanonicalHostedZoneNameID"
                 ]
             },
             "DNSName": {
                 "Fn::GetAtt": [
                 "devdevopsdemoELB",
                 "CanonicalHostedZoneName"
                 ]
             }
         }
     },
     {
         "Name": "devopsdemo-dev.FOO.net.",
         "Type": "A",
         "AliasTarget": {
            "HostedZoneId": {
            "Fn::GetAtt": [
               "devdevopsdemoELB",
               "CanonicalHostedZoneNameID"
             ]
         },
         "DNSName": {
             "Fn::GetAtt": [
             "devdevopsdemoELB",
             "CanonicalHostedZoneName"
             ]
         }
     }
 }
我从以下几点开始:

hostedzone = "FOO.net"
myRecordSet = RecordSetType("devdevopsdemoELBDNSARecord0")
myRecordSet.HostedZoneName=Join("", hostedzone, "."])
myRecordSet.Comment="Alias targeted to devdevopsdemoELB ELB."
但是我不清楚记录集值应该如何输入

我想我可以用直道

myRecordSet.RecordSets = 
只是把json放在适当的位置,但这似乎有点像一开始就滥用了使用对流层的目的

更新:输入json会导致此错误

AttributeError:AWS::Route53::RecordSet对象不支持属性记录集

myRecordSet.RecordSets = [
                         {
                          "Name": "devopsdemo.dev.FOO.net.",
                          "Type": "A",
                          "AliasTarget": {
                              "HostedZoneId": {
                                  "Fn::GetAtt": [
                                      "devdevopsdemoELB",
                                      "CanonicalHostedZoneNameID"
                                  ]
                              },
                              "DNSName": {
                                  "Fn::GetAtt": [
                                      "devdevopsdemoELB",
                                      "CanonicalHostedZoneName"
                                      ]
                                  }
                              }
                         },
                         {
                          "Name": "devopsdemo-dev.FOO.net.",
                          "Type": "A",
                          "AliasTarget": {
                                 "HostedZoneId": {
                                  "Fn::GetAtt": [
                                      "devdevopsdemoELB",
                                      "CanonicalHostedZoneNameID"
                                      ]
                                  },
                                 "DNSName": {
                                     "Fn::GetAtt": [
                                         "devdevopsdemoELB",
                                         "CanonicalHostedZoneName"
                                         ]
                                     }
                                 }
                          }
                         ]
然后我试了一下:

myDNSRecord = t.add_resource(RecordSetGroup(
        "devdevopsdemoELBDNSARecord0",
        HostedZoneName=Join("", ["inpwrd.net", "."]),
        Comment="DNS Entry to point to the ELB for devopsdemo",
        RecordSets=[
            RecordSet(
                Name="devopsdemo.dev.inpwrd.net.",
                Type="A",
                AliasTarget=[HostedZoneId(GetAtt("devdevopsdemoELB", "CanonicalHostedZoneNameID")),
                             DNSName(GetAtt("devdevopsdemoELB", "CanonicalHostedZoneName"))],
                ),
            RecordSet(
                Name="devopsdemo-dev.inpwrd.net.",
                Type="A",
                AliasTarget=[HostedZoneId(GetAtt("devdevopsdemoELB", "CanonicalHostedZoneNameID")),
                             DNSName(GetAtt("devdevopsdemoELB", "CanonicalHostedZoneName"))],
                ),
            ],
    )
)

找不到HostedZoneId

AliasTarget接受一个AliasTarget帮助程序类,因此您希望这样做:

from troposphere import GetAtt, Join, Template
from troposphere.route53 import AliasTarget, RecordSetType, RecordSetGroup, RecordSet

t = Template()

myDNSRecord = t.add_resource(RecordSetGroup(
        "devdevopsdemoELBDNSARecord0",
        HostedZoneName=Join("", ["example.net", "."]),
        Comment="DNS Entry to point to the ELB for devopsdemo",
        RecordSets=[
            RecordSet(
                Name="devopsdemo.dev.example.net.",
                Type="A",
                AliasTarget=AliasTarget(
                    GetAtt("devdevopsdemoELB", "CanonicalHostedZoneNameID"),
                    GetAtt("devdevopsdemoELB", "CanonicalHostedZoneName"),
                ),
            ),
            RecordSet(
                Name="devopsdemo-dev.example.net.",
                Type="A",
                AliasTarget=AliasTarget(
                    GetAtt("devdevopsdemoELB", "CanonicalHostedZoneNameID"),
                    GetAtt("devdevopsdemoELB", "CanonicalHostedZoneName"),
                ),
            ),
        ],
    )
)

print t.to_json()