Day 8: EC2インスタンスのネットワーク設定:実践的なデプロイ
皆さん、こんにちは!「実践!AWSネットワーク構築・運用30日チャレンジ」の第2週、Day 8へようこそ!
いよいよ本日からは、これまでの基礎知識を活かして、より実践的なネットワーク設定へと進んでいきます。第1週では、VPC、サブネット、インターネットゲートウェイ、ルートテーブル、セキュリティグループ、NACLといったAWSネットワークの土台を築き、その概念を深く理解しました。
今日は、その構築したネットワーク上に、いよいよ主要なコンピューティングリソースであるEC2インスタンスをデプロイし、そのネットワーク設定について詳しく見ていきます。EC2インスタンスのネットワーク設定は、アプリケーションが適切に動作し、セキュアにアクセスできるための鍵となります。
1. EC2インスタンスとは?そのネットワーク関連性
EC2 (Elastic Compute Cloud) は、AWSが提供する仮想サーバーです。クラウド上でCPU、メモリ、ストレージ、ネットワークといったコンピューティングリソースを柔軟に利用できます。
EC2インスタンスは、必ず特定のVPC内のサブネットにデプロイされます。インスタンスがデプロイされるサブネットによって、そのインスタンスがインターネットに直接アクセスできるか(パブリックサブネット)、それともできないか(プライベートサブネット)が決まります。また、インスタンスに適用されるセキュリティグループによって、そのインスタンスへのアクセスが制御されます。
EC2インスタンスのネットワーク設定は多岐にわたりますが、特に重要なのは以下の要素です。
- プライベートIPアドレス: VPC内のサブネットから自動的に割り当てられるIPアドレス。VPC内部での通信に使用されます。
- パブリックIPアドレス: インターネットから直接アクセスするためのIPアドレス。動的に割り当てられる場合と、固定のElastic IP (EIP) を割り当てる場合があります。
- Elastic IP (EIP): AWSアカウントに紐付けられた固定のパブリックIPアドレス。インスタンスを停止・起動してもIPアドレスが変わりません。
- Elastic Network Interface (ENI): EC2インスタンスにアタッチされる仮想ネットワークインターフェース。IPアドレス、MACアドレス、セキュリティグループなどを保持します。
2. EC2インスタンスの起動とネットワーク設定の実践
それでは、実際にEC2インスタンスを起動し、ネットワーク設定を確認・実践していきましょう。今回は、Webサーバーを想定してパブリックサブネットにEC2インスタンスをデプロイします。
事前準備:Webサーバー用セキュリティグループの確認
Day 6で作成した web-server-sg
が存在することを確認してください。もし作成していなければ、以下のルールで作成しておきましょう。
-
セキュリティグループ名:
web-server-sg
- VPC: あなたのVPC
-
インバウンドルール:
- タイプ:
HTTP
(ポート 80), ソース:0.0.0.0/0
- タイプ:
HTTPS
(ポート 443), ソース:0.0.0.0/0
- タイプ:
SSH
(ポート 22), ソース:My IP
(あなたの現在のIPアドレス)
- タイプ:
-
アウトバウンドルール:
All traffic
(全て許可)
2.1. EC2インスタンスの起動
- AWSマネジメントコンソールにログインし、「EC2」サービスを開きます。
- 左側のナビゲーションペインから「インスタンス」をクリックし、「インスタンスを起動」ボタンをクリックします。
-
ステップ 1: 名前とタグ
-
名前:
MyWebServer01
など、分かりやすい名前を付けます。
-
名前:
-
ステップ 2: アプリケーションおよび OS イメージ (Amazon マシンイメージ)
- 「Amazon Linux AMI」または「Ubuntu Server」など、お好みのAMIを選択します。今回は
Amazon Linux 2023 AMI (HVM) - Kernel 6.1
を選択します。
- 「Amazon Linux AMI」または「Ubuntu Server」など、お好みのAMIを選択します。今回は
-
ステップ 3: インスタンスタイプ
- t2.micro または t3.micro (無料利用枠対象) を選択します。
-
ステップ 4: キーペア (ログイン)
- 既存のキーペアを選択するか、「新しいキーペアの作成」をクリックして作成します。キーペアはSSHでインスタンスに接続するために必要です。作成した場合は、秘密鍵ファイル(.pem)を安全な場所に保存してください。
-
ステップ 5: ネットワーク設定 (ここが重要!)
- VPC: Day 3で作成したあなたのVPCを選択します。
-
サブネット: Day 3で作成したパブリックサブネットA (
my-vpc-public-subnet-a
など) を選択します。 -
自動割り当てパブリック IP: 「有効化」を選択します。
- ポイント: これを有効にすると、インスタンス起動時に自動的にパブリックIPアドレスが割り当てられ、インターネットから直接アクセスできるようになります。
-
ファイアウォール (セキュリティグループ):
- 「既存のセキュリティグループを選択する」を選び、
web-server-sg
を選択します。 - 注意: デフォルトのセキュリティグループを使用すると、意図しないアクセスが許可される可能性があるため、必ずカスタマイズしたSGを使用しましょう。
- 「既存のセキュリティグループを選択する」を選び、
-
ステップ 6: ストレージの設定
- デフォルトのまま (8 GiB) で問題ありません。
-
ステップ 7: 高度な詳細 (オプション)
- 今回はデフォルトのままで構いません。後ほどWebサーバーを起動するためのユーザーデータスクリプトを追加できますが、今回は手動で設定する前提とします。
- 「インスタンスを起動」をクリックします。
インスタンスが起動するまで数分待ちます。ステータスが「実行中」になることを確認しましょう。
3. EC2インスタンスのネットワーク情報の確認
起動したEC2インスタンスのネットワーク情報を確認しましょう。
- EC2ダッシュボードの「インスタンス」リストで、起動した
MyWebServer01
を選択します。 - 下部の「詳細」タブをクリックします。
ここで以下のネットワーク関連の情報を確認できます。
- パブリック IPv4 アドレス: インターネットからアクセスするためのグローバルIPアドレス。
- プライベート IPv4 アドレス: VPC内部で通信するためのIPアドレス。選択したサブネットのCIDR範囲内のアドレスが割り当てられているはずです。
- VPC ID: インスタンスが属するVPCのID。
- サブネット ID: インスタンスが属するサブネットのID。
-
アベイラビリティゾーン: インスタンスが配置されているAZ(例:
ap-northeast-1a
)。 - ネットワークインターフェース: インスタンスにアタッチされているENIの情報。
- セキュリティグループ: インスタンスに適用されているセキュリティグループ。
4. SSH接続と簡単なWebサーバーの起動テスト
EC2インスタンスが正しくネットワーク設定されているか、SSHで接続して確認し、簡単なWebサーバーを起動してみましょう。
4.1. SSHでEC2インスタンスに接続
ターミナル(macOS/Linux)またはWSL/Git Bash(Windows)を開き、以下のコマンドでSSH接続します。
ssh -i /path/to/your/keypair.pem ec2-user@<Your_EC2_Public_IP_Address>
-
/path/to/your/keypair.pem
: インスタンス起動時に指定したキーペアの秘密鍵ファイルへのパス。 -
ec2-user
: Amazon Linuxの場合のデフォルトユーザー名。Ubuntuの場合はubuntu
。 -
<Your_EC2_Public_IP_Address>
: EC2インスタンスの「パブリック IPv4 アドレス」。
トラブルシューティングのヒント:
-
Permission denied (publickey): キーペアのパーミッションが正しくない可能性があります。
chmod 400 /path/to/your/keypair.pem
でパーミッションを変更してください。 - Connection timed out: セキュリティグループのSSHルールが間違っているか、NACLがSSHをブロックしている可能性があります。Day 6の記事を見直しましょう。
-
Host key verification failed: 以前に同じIPアドレスに接続したことがあり、ホストキーが変わった可能性があります。
~/.ssh/known_hosts
ファイルから該当IPアドレスの行を削除してみてください。
4.2. 簡単なWebサーバーの起動
SSH接続ができたら、インスタンス内でApache HTTPサーバーをインストール・起動してみましょう。(Amazon Linuxの場合)
# パッケージリストの更新
sudo yum update -y
# Apache HTTPサーバーのインストール
sudo yum install -y httpd
# Apacheを起動
sudo systemctl start httpd
# Apacheをシステム起動時に自動起動するよう設定
sudo systemctl enable httpd
# デフォルトのWebページを作成
echo "<h1>Hello from My AWS EC2 Web Server!</h1>" | sudo tee /var/www/html/index.html
これらのコマンドを実行した後、WebブラウザでEC2インスタンスのパブリック IPv4 アドレスにアクセスしてみてください。もし「Hello from My AWS EC2 Web Server!」と表示されれば、Webサーバーが正常に動作し、セキュリティグループとサブネット設定が正しく機能していることになります。
5. Elastic IP (EIP) の活用:固定IPアドレスの重要性
Day 3でNATゲートウェイのためにElastic IP (EIP) を取得しましたが、EC2インスタンスにもEIPを関連付けることができます。
EC2インスタンスに自動割り当てされるパブリックIPアドレスは、インスタンスを停止・起動するたびに変更されます。Webサーバーなど、常に同じIPアドレスでアクセスしたい場合には不便です。
そこで活躍するのがElastic IP (EIP) です。EIPはAWSアカウントに紐付けられる固定のパブリックIPアドレスであり、特定のEC2インスタンス、ENI、またはNATゲートウェイに関連付けることができます。
5.1. EC2インスタンスへのEIPの割り当て
- EC2ダッシュボードの左側ナビゲーションペインから「Elastic IP」をクリックします。
- 「Elastic IP アドレスの割り当て」をクリックして、新しいEIPを割り当てます。(すでにDay 4でNATゲートウェイ用に取得済みの場合、もう一つ取得します。)
- 割り当てたEIPを選択し、「アクション」ドロップダウンから「Elastic IP アドレスの関連付け」をクリックします。
-
リソースタイプで「インスタンス」を選択し、起動したEC2インスタンス (
MyWebServer01
) を選択します。 - 「関連付ける」をクリックします。
これで、EC2インスタンスのパブリックIPアドレスが、割り当てたEIPに変わります。インスタンスを停止・起動しても、このEIPは変わらなくなります。WebブラウザでEIPにアクセスしても、Webサーバーが表示されることを確認してください。
注意: EIPは、関連付けられていない状態だと課金対象となる場合があります。不要になった場合は、必ずEIPを解放するようにしてください。
6. Elastic Network Interface (ENI) の概要
全てのEC2インスタンスには、少なくとも1つのElastic Network Interface (ENI) がアタッチされています。ENIは仮想ネットワークカードのようなもので、以下のものを保持しています。
- プライベートIPアドレス(主IPアドレスとセカンダリIPアドレス)
- パブリックIPアドレス(関連付けられている場合)
- Elastic IPアドレス(関連付けられている場合)
- MACアドレス
- セキュリティグループ
- ソース/宛先チェック属性
- 説明
ENIは、インスタンスからデタッチして別のインスタンスにアタッチしたり、複数のIPアドレスをインスタンスに持たせたり、異なるセキュリティグループをインスタンスの異なるENIに適用したりする際に利用されます。高度なネットワーク構成で活用されますが、通常のインスタンスでは意識することは少ないかもしれません。
7. AI時代におけるEC2ネットワーク設定の考慮事項
AI/MLワークロードでは、EC2インスタンスのネットワーク設定が特に重要になります。
- GPUインスタンスの配置: 大規模なAI学習にはGPUを搭載したEC2インスタンス(例: Pシリーズ、Gシリーズ)が使われます。これらのインスタンスは通常、セキュリティのためにプライベートサブネットに配置し、インターネットからの直接アクセスを避けます。
- データアクセス: 学習データがS3などのデータレイクにある場合、VPCエンドポイントを利用して、プライベートサブネットからインターネットを経由せずにS3にアクセスするように設定します。これにより、データ転送のセキュリティとパフォーマンスが向上します。
- 高速インターコネクト: 大規模分散学習では、複数のGPUインスタンス間での超高速なデータ転送が求められることがあります。EC2インスタンスタイプによっては、EFA (Elastic Fabric Adapter) のような専用のネットワークインターフェースが提供されており、これを使用することでネットワークレイテンシを最小限に抑え、学習パフォーマンスを向上させることができます。
- SSH以外の管理アクセス: AI/MLの実験環境では、WebベースのJupyter NotebookやTensorBoardなどのUIを介してインスタンスにアクセスすることも多いため、セキュリティグループでこれらのポートも適切に許可する必要があります。
本日のまとめと次へのステップ
今日は、AWSネットワークの基盤の上に、実際にEC2インスタンスをデプロイし、そのネットワーク設定について深く学びました。
- EC2インスタンスは必ずVPCのサブネットに配置され、そのパブリック/プライベートIPアドレス、EIP、セキュリティグループがネットワーク通信を決定します。
-
自動割り当てパブリック IP
の有効化、適切なセキュリティグループの選択、そして必要に応じてElastic IPの関連付けが、インスタンスの外部接続性を制御する上で重要です。 - SSHでインスタンスに接続し、簡単なWebサーバーを起動するテストを通じて、これまでのネットワーク設定が正しく機能していることを確認しました。
これらの実践的な知識は、あなたがAWSでアプリケーションやAI/MLワークロードをデプロイする際の基礎となります。
明日のDay 9では、「NAT GatewayとBastion Host:プライベートサブネットからの安全なアクセス」と題して、Day 4で導入したNATゲートウェイの動作原理をさらに深掘りしつつ、プライベートサブネット内のリソースに安全にアクセスするための「Bastion Host (踏み台サーバー)」の構築と設定について学びます。よりセキュアなインフラ構築のための重要なステップです。
今日のEC2インスタンスの起動とSSH接続、Webサーバーのテストはうまくいきましたか?ぜひ「いいね」👍であなたの成功を教えてください!