gpt4 book ai didi

python - 如何使用对流层将记录集数组添加到 Cloud Formation 中?

转载 作者:行者123 更新时间:2023-12-03 07:32:43 24 4
gpt4 key购买 nike

我正在使用 python 模块对流层来创建我的云形成模板。大部分内容已完成,但我似乎对如何使用 RecordSets 方法/函数为负载均衡器创建 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."

但是我不清楚应如何输入 RecordSets 值。

我想我可以直接使用

myRecordSet.RecordSets = 

然后将 json 放到适当的位置,但这似乎有点像滥用对流层的初衷。

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

AttributeError:AWS::Route53::RecordSet 对象不支持属性 RecordSets

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()

关于python - 如何使用对流层将记录集数组添加到 Cloud Formation 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com