タイトルのような構成を作ってみたら、はまったところがあったので備忘録として残しておきます
はじめに
Webサーバーを作成するとなった場合、普通は以下のような構成が思いつくと思います
ただ、ALBがパブリックサブネットにありさえすれば、WebサーバーをプライベートサブネットにおいてしまってもOKです
上記のような構成を作ってみたので、簡単な手順とはまりポイントを書きます
ちなみに先に行っておくと、上記の構成には間違いがあります
記事に最後に記載していますが、間違いはどこでしょうか?
作成手順
すべてマネジメントコンソール上で作成しています
詳細は、以下のページと同じなので概要だけ記載します
NW周りの設定
以下のコンポーネントを作成します
- VPC
- パブリックサブネット×2
- ルートテーブルは以下の2つを設定
- 宛先:10.1.0.0/24(VPCのCIDR)、ネクストポップ:local
- 宛先:0.0.0.0/0、ネクストポップ:インターネットゲートウェイ
- ルートテーブルは以下の2つを設定
- プライベートサブネット×2
- ルートテーブルは以下の1つのみを設定
- 宛先:10.1.0.0/24(VPCのCIDR)、ネクストポップ:local
- ルートテーブルは以下の1つのみを設定
- インターネットゲートウェイ
- パブリックサブネット×2
AutoScalingグループの作成とロードバランサーの設定
手順はざっくり以下の通り
-
起動テンプレートの作成
- AMI:Amazon Linux 2
- ネットワーク設定
- HTTPのインバウンドをフルオープンにしたセキュリティグループを設定
※効率化するために、ユーザーデータでApacheのセットアップを完了させるシェルスクリプトを設定しています
(参考:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/user-data.html#user-data-console )
- HTTPのインバウンドをフルオープンにしたセキュリティグループを設定
-
AutoScalingグループとALBの作成
- AutoScalingグループを作成する画面で、ALBも同時に作成する
- 起動テンプレートは上記で作成したものを指定
- ネットワークの設定では、 プライベートサブネット を指定
- ロードバランシングの設定画面で、新しいロードバランサーをアタッチする
- デフォルトで
Internal
になってしまっているので、Internet-facing
に変更する - サブネットは パブリックサブネット を指定
- ターゲットグループを新規作成する
- デフォルトで
- その他の設定はお好みでOK
- AutoScalingグループを作成する画面で、ALBも同時に作成する
引っかかりポイント
動作確認として、ALBのURLにアクセスしてみる
-
502 Bad Gateway
の表示がされる。。。 - AutoScalingグループの画面では
Healty
なのに、ALBの画面ではUnhealty
になっていた - 色々と見直してみたところ、Webサービスが起動していないように見える
お気づきの方もいるかもしれませんが、この構成ではインスタンスのユーザーデータに仕込んでいるApacheのインストールが完了しません
なぜなら、プライベートサブネットにあるインスタンスがインターネットに出ることができないからです
ということで、正解は「NATゲートウェイを追加する」でした
初歩的な凡ミスでした。。。
もしくは、「S3向けのVPCエンドポイントを作成する」 も正解です
最後に
インスタンスをプライベートサブネットに置く場合、セキュリティを気にしている場合が多いと思います
ただ、あまりにも怖がっていると今回のように凡ミスをやらかすかもしれません
プライベートサブネットを使う場合であっても、「インターネットアウトバウンドが必要かどうか、必要なら確保されているかどうか」をちゃんと確認すべきですね
この記事が誰かの役に立てばうれしいです