AWSを用いた本番環境構築(構成検討)
この記事ではAWSサービスの構成決めをテーマにします。
基礎知識
- AWSでは、データセンターを世界の21のリージョン(地域)にある66のアベイラビリティーゾーン(AZ)で運用している
- 日本では東京リージョンが多く利用されている(ちなみに東京リージョンはAZが4つ)
- 最初は必要最低限で始めて、必要になったら増やせばよい
- 料金の見積もりツールがある
https://calculator.aws/#/?key=new - 手軽に始められる無料枠がある
2種類のサブネット
AWSのネットワーク設定には、『パブリックサブネット』と『プライベートサブネット』の2種類があります。
-
パブリックサブネット
インターネットからアクセス可能なエリア(ネットワーク)
ただし、特定のセキュリティコントロールあり -
プライベートサブネット
インターネットから直接アクセスできない安全なエリア(ネットワーク)
3つのサービス分類
AWSのサービスは、サービスの『提供範囲』によって3つに分類できます。
-
グローバルサービス: グローバルサービスは世界中のどこからでも使えるサービス。
-
リージョンサービス: 特定の地域内でのみ動作するサービス。(日本では基本的に東京リージョン)
-
アベイラビリティゾーンサービス: リージョン内の更に小さなエリアで動作するサービス。
構成図を書く時に意識すること
AWSの構成図を書く時の注意点として、以下を心がけます
- 本番環境で実装したい機能を挙げる
- AWSのサービスの特徴を調べる
実装したい機能
今回私が挙げた実装したい機能はこちらです。
- アクセス数が増加してもサイトが落ちない
- サーバの運用が楽
- セキュリティ考慮
- 障害時の発生に強い
AWSのサービスの特徴
まず、上に挙げた実装したい機能から、どのAWSサービスが適しているのか調べます。
私は以下のようにしました。
1. アクセス数が増加してもサイトが落ちない
- ELBによる負荷分散を採用
- 複数のリソースに対するトラフィックを均等に分散する
- ECSの機能のAutoscalingを使う
- アクセス増加時に自動でサーバーを増減してくれる
- CDNサービスであるCloudFrontを使う
- CDNを導入することによって、表示速度を速くするだけではなく、負荷分散に繋がる
2. サーバの運用が楽
- ECSとFargateを組み合わせて使う
- Fargateは、サーバレス運用が可能であり、簡単なセットアップが可能であり、管理も不必要
- EC2はカスタマイズができるが、管理が必要
- トラフィック増減に対して、Fargateのリソースを調整
- Fargateは使用した分だけ課金されるので、無駄がない
- Fargateは、サーバレス運用が可能であり、簡単なセットアップが可能であり、管理も不必要
3. セキュリティ考慮
-
ACMによるSSL/TLS証明書の発行と管理
- 通信の暗号化をすることにより、第三者からの盗聴や改竄を防ぐ
- 通信の暗号化をすることにより、第三者からの盗聴や改竄を防ぐ
-
WAFによる脅威からの保護
- 悪意のあるアクセスや攻撃してくるトラフィックを識別して、ブロックするなど、さまざまな脅威から守ってくれる
- 悪意のあるアクセスや攻撃してくるトラフィックを識別して、ブロックするなど、さまざまな脅威から守ってくれる
-
FargateとDBをプライベートサブネットに置く
- インターネットからの直接アクセスを防ぐことができる
- プライベートサブネットに置く代わりに、NATゲートウェイを設置する(NATゲートウェイはプライベートネットワーク内のデバイスがインターネットと通信できるようにする)
4. 障害時の発生に強い
-
AZを最低3つにする
- アベイラビリティゾーン(AZ)が2つ未満になるとELBが動作しなくなるので、もし1つ落ちたとしてもELBが作動するようにした
-
DBをAZごとに設置する
- 複数のDBインスタンスを用意することで、データの冗長性が保たれ(予備が用意してあること)、損失リスクを下げる。
その他
-
ECSとECRの採用
どちらもAWSのコンテナ関連のサービスです。
ECSはコンテナの運用と管理を行って、ECRはコンテナイメージの保存と管理を行います。 -
Aurora使用理由
保留 -
3つのDBについて
今回は3つのAZを用意し、それぞれにDBを設置します。
1つはPrimary(読み書き)として、2つはSecondary(読み取り専用)として使用します。
(例)
-
Webサイトから書き込みがあった場合:
Fargateと通して、PrimaryDBにデータの書き込みが行われます。
書き込みがPrimaryDBに成功した場合、SecondaryDBに複製されることによって、SecondaryDBも最新のデータ状態を維持します。 -
Webサイトを表示する場合:
Fargateを通して、SecondaryDBから読み取りをします。
読み取り操作の負荷をSecondaryDBに分散させることによって、PrimaryDBの書き込み操作負荷を減らします。
構成図
それぞれのサービスの配置場所には、決まりがあります。
保留
Discussion