Python 如何使用对流层将一组记录集添加到云形成中?
我正在使用python模块troposphere创建我的云形成模板。大部分内容已经完成,但我似乎对如何使用Recordset方法/函数为负载平衡器创建DNS条目感到困惑。本节的输出应该如下所示: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"
"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"))],
),
],
)
)
找不到HostedZoneIdAliasTarget接受一个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()