AWSに、ファイアウォールルールやS3マッピングなどを含むEC2インスタンスを作成するcloudformationスクリプトがあります。また、インスタンスのパブリックIP用にroute53にDNSレコードを作成します。これはうまく機能します。
次に、ホストの内部IPのDNSに別のレコードを作成する必要があります(内部使用のために、他のインスタンスがパブリックIPを経由せずにこのインスタンスと通信できるようにします)。
私はこれを行う方法を見つけていません。出来ますか?誰かがクラウドフォーメーションスクリプトの例を持っていますか?
数日間質問し、テストし、試した後、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を使用していることがわかりましたが、なぜこれを取得しなかったのかわかりません私自身)。
可能ですが、この記事で説明されているように、「プライベートホストゾーン」を設定する必要があります 同じドメイン名を使用してウェブサイトの内部バージョンにアクセスする| 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ゾーンIDを出力します。
そのプライベートゾーンIDをEC2作成Cloudformationスクリプトのパラメーターとして使用します。ゾーンIDをパラメーターとして使用してリソースレコードタイプを作成し、EC2インスタンスのプライベートIPアドレスを参照します。
Publicでも同じことができますが、ELBを使用しない場合は、そのためのENIを作成します。