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