はじめに
インプルの矢島です。
安全に管理するために、EC2をプライベートサブネットにおきたいことありますよね。
今回はプライベートサブネットに作成したEC2に、パブリックサブネットのALBからの接続を試みたいと思います。
前提
- VPCはデフォルトで作成してあるものを使います。
やること
下記の構成を作成します。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/image.png?resize=1320%2C1492&ssl=1)
サブネット作成
2つのアベイラビリティゾーンにパブリックサブネットとプライベートサブネットを作成します。
ALBは各AZに作成されるため、インターネットに接続できるパブリックサブネットを作成しておく必要がある。
プライベートサブネットはEC2用に作成します。
合計4つのサブネットが作成できていればOKです。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-1.33.57.png?resize=697%2C299&ssl=1)
S3のエンドポイントを作成
yum installでapacheをインストールするためにはインターネットに接続しておくか、S3エンドポイントをyum repoisitoryとして使用する方法があります。
(s3エンドポイントを使用するには、 Amazon Linux AMIの必要があります)
Nat Gatewayは高いですし、Nat Instanceも多少費用がかかるので、S3のエンドポイントを作成してみます。
VPCのエンドポイント項目から「エンドポイント作成」ボタンを押下します。
S3はサービスカテゴリの「AWSサービス」となります。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-0.50.03.png?resize=835%2C619&ssl=1)
サービスはS3の「Gateway」タイプを選択します。(gatewayタイプは無料のため)
VPCは今回利用するVPCを選択してください。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-0.50.11.png?resize=870%2C523&ssl=1)
ルートテーブルはインタネットゲートウェイに向けられてないルートテーブルを選択します。
テストなので、ポリシーはフルアクセスにしておきます。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-0.50.20.png?resize=853%2C574&ssl=1)
これでS3エンドポイントの作成が完了しました。
EC2を作成
EC2のマネジメントコンソールから、インスタンスを起動します。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-9.50.41.png?resize=812%2C370&ssl=1)
AMIはAmazon Linux AMIを選択します。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-9.50.48.png?resize=806%2C732&ssl=1)
ネットワークの設定では、VPCとプライベートサブネットを選択します。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-9.51.05.png?resize=786%2C288&ssl=1)
今回はセキュリティグループを作成しておきます。この後に編集するので、一旦はデフォルトのままで新規作成します。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-9.52.10.png?resize=806%2C643&ssl=1)
ユーザーデータでapacheのインストールとindex.htmlを作成して、「サーバー1です」と書き込みます。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-9.52.19.png?resize=663%2C422&ssl=1)
#!/bin/bash
sudo su
yum update -y
yum -y install httpd
touch /var/www/html/index.html
echo "サーバー1です" > /var/www/html/index.html
chkconfig httpd on
service httpd start
ここまで設定したら、インスタンスを作成してください。
無事インスタンスの作成が完了したら、別のアベイラビリティゾーンのプライベートサブネットにも同じようにEC2を作成します。
(ユーザーデータのindex.htmlに書き込みでは、「サーバー2です」に文字を変更して作成してください)
無事2つのアベイラビリティゾーンにEC2を作成しました。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.02.19.png?resize=1056%2C170&ssl=1)
セキュリティグループの編集
ALB用のセキュリティグループの作成
VPCのセキュリティグループから「セキュリティグループを作成」を押下します。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.09.34.png?resize=1224%2C439&ssl=1)
インバウンドルールには、HTTPを許可しておきます。(HTTPSは今回は設定しなくても大丈夫です。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.09.01.png?resize=1240%2C402&ssl=1)
EC2のセキュリティグループを編集する
EC2を作成した際に、セキュリティグループを作成したと思うので、そのセキュリティグループを編集してALBからのHTTPのみ許可します。
(HTTPSは設定しなくても大丈夫です)
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.10.44.png?resize=1254%2C623&ssl=1)
これでセキュリティグループの設定が完了です。
ALBの作成
EC2のロードバランサからcreate load balancerを押下します。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.05.04.png?resize=1058%2C426&ssl=1)
ロードバランサーネームは任意で設定してください。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.12.16.png?resize=1215%2C764&ssl=1)
Network mappingではEC2を作成したアベイラビリティゾーンのパブリックサブネットを選択します。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.12.34.png?resize=1079%2C737&ssl=1)
セキュリティグループは、先ほど作成したALB用のセキュリティグループを選択します。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.13.04.png?resize=1137%2C292&ssl=1)
ターゲットグループを選択しますが、最初に選択する前にグループを作成する必要があります。
target typeはインスタンスを選択します。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.13.55.png?resize=888%2C707&ssl=1)
Target group nameには任意で設定します。
プロトコルにはHTTPを選択します。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.14.01.png?resize=975%2C529&ssl=1)
Health checksにはHTTPのままにしておきます。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.14.06.png?resize=967%2C403&ssl=1)
Targetsには、2つのEC2を選択します。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.15.07.png?resize=1137%2C374&ssl=1)
作成が完了したら、そのグループを選択します。
![](https://i0.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.15.52.png?resize=1088%2C562&ssl=1)
これでロードバランサを作成します。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.18.30.png?resize=1066%2C335&ssl=1)
動作確認してみる
ロードバランサのARNをコピーして、ブラウザからアクセスしてみましょう。
すると下記のように「サーバー1です」と表示されます。
![](https://i1.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.20.14.png?resize=1320%2C164&ssl=1)
次に、リロードをしてみます。
何度かリロードしてみると、「サーバー2です」と表示されました。
![](https://i2.wp.com/ramble.impl.co.jp/wp-content/uploads/2023/05/スクリーンショット-2023-05-07-10.20.06.png?resize=1320%2C193&ssl=1)
このように無事2つのサーバーにうまく繋がっていることがわかります。
まとめ
いかがでしたでしょうか。
大体30分くらいで構築することができ、とても簡単だったので、ぜひ試してみていただけたらと思います。