我在 AWS 中有一个云形成脚本,它可以创建一个 EC2 实例,其中包含一些防火墙规则、S3 映射和其他内容。并且我在 route53 中为该实例的公共 IP 创建了一个 DNS 记录,效果很好。
现在我需要在主机的内部 IP 的 DNS 中创建另一条记录(供内部使用,以便其他实例无需通过公共 IP 即可与该实例通信)。
我还没有找到办法做到这一点。可能吗?有人有示例云形成脚本吗?
答案1
这是可能的,但您需要设置一个“私人托管区域”,如本文所述使用相同域名访问您网站的内部版本 | Amazon AWS 支持然后调整以下云信息以满足您的需求
"myDNSRecord2" : {
"Type" : "AWS::Route53::RecordSet",
"Properties" : {
"HostedZoneId" : "Z3DG6IL3SJCGPX",
"Name" : "mysite.example.com.",
"Type" : "A",
"TTL" : "900",
"ResourceRecords" : [{
"Fn::GetAtt" : [ "MyInstance", "PrivateIp" ]
}]
}
}
答案2
在单独的 Cloudformation 脚本中创建一个私有托管区域并输出 Route53 区域 ID。
在 EC2 创建 Cloudformation 脚本中使用该私有区域 ID 作为参数。创建一个资源记录类型,以区域 ID 作为参数,并引用 EC2 实例的私有 IP 地址。
对公共用户也可以做同样的事情,但是如果您不打算使用 ELB,我会为此创建一个 ENI。
答案3
经过几天的询问、测试和尝试,我在 Reddit 上找到了一个好心人的解决方案。我的问题的完整解决方案如下:
"myInternalIPHostRecord": {
"Type": "AWS::Route53::RecordSet",
"Properties": {
"HostedZoneId": {
"Ref" : "HostedZoneId"
},
"Comment": "Internal DNS name for my instance.",
"Name": {
"Fn::Join": [
"",
[
"internal",
".",
{
"Ref": "DNSEnvironment"
},
".",
{
"Ref": "HostedZoneName"
},
"."
]
]
},
"Type": "A",
"TTL": "120",
"ResourceRecords": [
{
"Fn::GetAtt" : [ "MyInstance", "PrivateIp" ]
}
]
}
}
对我来说,新部分是从我的实例中Fn::GetAtt
检索"PrivateIP"
,在获得帮助之前,我没有找到这样做的方法。否则,这就像创建的公共 IP 记录一样(例如,之前已有详细记录这里:(现在我看到它使用了 Fn::getAtt,不确定为什么我自己没有得到它)。