4
2

AWSでWeb3層アーキテクチャを立てるときのハマリポイント(インフラ部分)

Posted at

はじめに

Web3層アーキテクチャを構築したときにハマってガチャガチャやったり調べたりしたポイントをメモりました。本記事ではインフラ構築部分を対象にします。(Webサーバ自体の設定だったり監視周りは割愛します)

ベーシックなALB+EC2+RDS(MySQL+Memcached)構成です。
image.png

ネットワークまわり

VPC作成

2AZでそれぞれパブリックサブネットとプライベートサブネットを1つずつ作成する、といったベーシックな構成であれば「VPCなど」を選択してサブネット、ルートテーブル、NAT Gatewayも含めて一気に作ることができます。
VPC作ってサブネット作って…とそれぞれやると何だかんだいって時間かかるのでできるだけVPC作成時にまとめて設定してしまう方が楽ですね。

VPCなど
image.png

基本デフォルトの設定で大丈夫ですが、NAT Gatewayはデフォルトだと「なし」、VPCエンドポイントはS3ゲートウェイを作成になっているので、要件によって変更しましょう。
image.png

たまにやってしまいますが、VPCを切り替えるのを忘れてデフォルトVPCにセキュリティグループを作っちゃったりします。使わないのであればデフォルトVPCは削除してしまったほうが、GUIでの設定ミスを減らせるかなと思います。

デフォルトVPCについて

サブネット作成

VPC作成時に同時作成します。各AZにパブリックサブネット、プライベートサブネットを1つずつ作成します。

NAT GatewayまたはVPCエンドポイントの作成

VPC作成時に同時作成します。VPCエンドポイントで接続できるリソースへの通信であれば、VPCエンドポイントを通したほうが通信料を抑えられます。

ルートテーブルの作成

VPC作成時に同時作成します。

セキュリティグループ作成

ALB, EC2, RDS用にセキュリティグループを作ります。ALBはAnywhere IPv4からの通信を許可しますが、EC2はALBのセキュリティグループから、RDSはEC2のセキュリティグループからの通信のみ許可します。

デフォルトセキュリティグループは消せません。
image.png

サーバセットアップ

EC2用のロール作成

SystemsManagerでEC2に接続できるように、AmazonSSMManagedInstanceCoreポリシーを含んだロールを作成します。
EC2にAmazonSSMManagedInstanceCoreポリシーをつけるのはよくあるユースケースらしく、ユースケースのラジオボタンでEC2 Role for AWS Systems Managerを選べば設定できるようになっています。
image.png
image.png

AutoScaling Groupの作成

起動したインスタンスからイメージの作成を選択し、AMIを作成します。
image.png
作成したAMIを指定して起動テンプレートを作ります。
image.png
image.png
作成した起動テンプレートを指定してAutoScaling Groupを作成します。耐障害性を高めるためにマルチAZでグループを作るのが無難かなと思います。
image.png

ALBのターゲットグループの設定

EC2を選択したら「保留中として以下を含める」をクリックして、ターゲットリストに入れないとターゲットグループに登録されないので注意。登録されてないままALBにブラウザアクセスしても503が返ってきます。
ヘルスチェックのデフォルトの設定は200が返ってきたらOKという扱いになりますが、ヘルスチェックのパスを間違えてたり(デフォルトの"/"のままにしてたり)するとリダイレクトされて3xxが返ってきてNG…になったりします。(なった)

image.png

ALBの作成

ターゲットグループを指定してALBを作成します。作成時にWAFも同時に作成するか選択できます。
image.png

DB設定

Memcached作成

Memcachedにアタッチするセキュリティグループは、カスタムTCPプロトコルの11211番ポートを開けておく必要があります。

Memcachedで転送中の暗号化がオンになっている場合、WordPressのW3 Total Cacheプラグインからは接続できないようです。

ここでしばらく引っ掛かっていて以下記事の内容がドンピシャでした。

Memcached+WordPressのW3 Total Cacheプラグインの構成にしたい場合、Memcachedの作成時に転送中の暗号化をオフにしておく必要があります。(後から変えられない…

作成するときですが、サーバレスを指定すると転送中の暗号化をオフにできなさそう(セキュリティ設定をカスタマイズにしてもいじれない…)なので、
image.png
image.png

「独自のキャッシュを設計」->「標準作成」で転送中の暗号化をオフにしておきます
image.png
image.png

おわりに

初回構築時はヘルスチェック通らないぞ、閾値おかしいのかな -> 作成するリソースのVPC間違えやALBの設定ミスが原因、でめちゃくちゃ時間を食いました。

GUIで全てをポチポチ作ることはあまり無いかもしれないですが、VPC作成時になるべくまとめてリソースを作ったり、使わないデフォルトVPCは消しておくなどの工夫でミスを減らせるなあと実感しました。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2