如何在 Cloudformation 中创建私有 IP 的 route53 记录

如何在 Cloudformation 中创建私有 IP 的 route53 记录

我在 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。

使用 CFN 创建资源记录

答案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,不确定为什么我自己没有得到它)​​。

相关内容