Назад | Перейти на главную страницу

Как создать запись route53 частного IP-адреса в Cloudformation

У меня есть сценарий облачной информации в AWS, который создает экземпляр EC2 с некоторыми правилами брандмауэра, сопоставлениями S3 и прочим ... и я создаю запись DNS в route53 для общедоступного IP-адреса экземпляра, это хорошо работает.

Теперь мне нужно создать еще одну запись в DNS внутреннего IP-адреса хоста (для внутреннего использования, чтобы другие экземпляры могли разговаривать с этим экземпляром, не переходя через общедоступный IP-адрес).

Я не нашел способа сделать это. Является ли это возможным? у кого-нибудь есть пример сценария облачной информации?

Это возможно, но вам необходимо настроить «частную размещенную зону», как описано в этой статье. Получите доступ к внутренней версии вашего веб-сайта, используя то же доменное имя | Поддержка Amazon AWS затем адаптируйте следующую облачную информацию в соответствии со своими потребностями

"myDNSRecord2" : {
    "Type" : "AWS::Route53::RecordSet",
    "Properties" : {
        "HostedZoneId" : "Z3DG6IL3SJCGPX",
        "Name" : "mysite.example.com.",
        "Type" : "A",
        "TTL" : "900",
        "ResourceRecords" : [{
            "Fn::GetAtt" : [ "MyInstance", "PrivateIp" ]
        }]
    }
}

Создайте частную размещенную зону в отдельном скрипте Cloudformation и выведите идентификатор зоны Route53.

Используйте этот идентификатор частной зоны в качестве параметра в сценарии создания EC2 Cloudformation. Создайте тип записи ресурса с идентификатором зоны в качестве параметра и укажите частный IP-адрес экземпляра EC2.

То же самое можно сделать с Public, но я бы создал для этого ENI, если вы не собираетесь использовать ELB.

Создание записи ресурса с CFN

После нескольких дней вопросов, тестирования и попыток я нашел решение от хорошего парня из 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, не знаю, почему я сам этого не получил).