VPCを新しく作り、サブネットを切り、いよいよEC2を起動!⋯⋯と思ったら、なぜかインスタンスにパブリックDNS名が割り当てられていない。パブリックIPはあるのに、名前解決ができない。
「サブネットの設定を間違えたかな?」「セキュリティグループのせい?」とあちこち設定をいじくり回して時間を溶かした経験はありませんか?
私は模擬試験でこの原因を問われ、「サブネットの設定」と答えて不正解。実は、犯人はVPCそのものの「あるオプション」がオフになっていたことだったんです。
犯人は「DNSホスト名(DNS Hostname)」設定
パブリックサブネットにあるEC2インスタンスが、ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.comのような名前(パブリックDNSホスト名)を取得するには、VPCの属性設定で以下の2つがEnabled(有効)になっている必要があります。
1.DNS解決(enableDnsSupport)
VPC内のAmazon提供DNSサーバーを使って名前解決をするかどうか。
2.DNSホスト名(enableDnsHostnames)
VPC内で起動されるインスタンスにパブリックDNSホスト名を割り当てるかどうか。
特に、カスタムVPCを「ウィザードを使わず手動」で作ると、これらがデフォルトで無効になっていることがあるため、注意が必要です!
なぜ「サブネット」ではなく「VPC」の設定なのか?
試験で迷いやすいのが、「設定の適用範囲」です。
DNSの設定は、個別のサブネットやEC2インスタンスごとにポチポチ設定するものではなく、VPCという「ネットワーク全体」のルールとして管理されます。VPCという大きな箱のルールで「名前を付けない」と決まっている以上、その中のどのサブネットで起動しても名前は付かない⋯⋯というわけです。
解決手順:コンソールでどこで直す?
もし名前が表示されていないことに気づいたら、以下の手順で一瞬で直せます。
1.VPCマネジメントコンソールを開く。
2.対象のVPCを選択。
3.[アクション]メニューから[VPC 設定を編集]を選択。
4.[DNS ホスト名を有効化]にチェックを入れて保存!
これだけで、次に起動するインスタンス(または再起動したインスタンス)にはちゃんと名前が付くようになります。
試験で役立つ!キーワード判別法
通信トラブル系の問題で、以下のフレーズがあればVPCのDNSホスト名設定を疑いましょう。
- 「インスタンスがパブリックDNS名を取得していない」
- 「パブリックIPはあるが、名前解決ができない」
- 「新規作成したVPCで名前解決が失敗する」
- 「enableDnsHostnames オプション」
今回の学び:攻略の格言
「名前が出ないなら、サブネットを疑う前にVPCの横顔(属性設定)を見ろ。DNSホスト名にチェック一発で解決!」
あとがき:一歩ずつ、合格へ
最後まで読んでいただき、ありがとうございました!
今回のトラブルは、実務でも「あるある」の筆頭です。特にTerraformやCloudFormationでインフラをコード化(IaC)しているとき、このパラメータを書き忘れて「SSHできない!」と騒ぐのは新米アーキテクチャの登竜門(笑)。
華やかな新サービスだけでなく、こうした地味なネットワークの基礎設定を一つずつ押さえていくことが、結局は一番の近道になるんですよね。
それでは、次回の記事でお会いしましょう!
