📑

AWSを用いた本番環境構築(構成検討)

2023/09/19に公開

この記事ではAWSサービスの構成決めをテーマにします。

基礎知識

  • AWSでは、データセンターを世界の21のリージョン(地域)にある66のアベイラビリティーゾーン(AZ)で運用している
  • 日本では東京リージョンが多く利用されている(ちなみに東京リージョンはAZが4つ)
  • 最初は必要最低限で始めて、必要になったら増やせばよい
  • 料金の見積もりツールがある
    https://calculator.aws/#/?key=new
  • 手軽に始められる無料枠がある

2種類のサブネット

AWSのネットワーク設定には、『パブリックサブネット』と『プライベートサブネット』の2種類があります。

  • パブリックサブネット
    インターネットからアクセス可能なエリア(ネットワーク)
    ただし、特定のセキュリティコントロールあり

  • プライベートサブネット
    インターネットから直接アクセスできない安全なエリア(ネットワーク)

3つのサービス分類

AWSのサービスは、サービスの『提供範囲』によって3つに分類できます。

  1. グローバルサービス: グローバルサービスは世界中のどこからでも使えるサービス。

  2. リージョンサービス: 特定の地域内でのみ動作するサービス。(日本では基本的に東京リージョン)

  3. アベイラビリティゾーンサービス: リージョン内の更に小さなエリアで動作するサービス。

構成図を書く時に意識すること

AWSの構成図を書く時の注意点として、以下を心がけます

  • 本番環境で実装したい機能を挙げる
  • AWSのサービスの特徴を調べる

実装したい機能

今回私が挙げた実装したい機能はこちらです。

  1. アクセス数が増加してもサイトが落ちない
  2. サーバの運用が楽
  3. セキュリティ考慮
  4. 障害時の発生に強い

AWSのサービスの特徴

まず、上に挙げた実装したい機能から、どのAWSサービスが適しているのか調べます。
私は以下のようにしました。

1. アクセス数が増加してもサイトが落ちない

  • ELBによる負荷分散を採用
    • 複数のリソースに対するトラフィックを均等に分散する

  • ECSの機能のAutoscalingを使う
    • アクセス増加時に自動でサーバーを増減してくれる

  • CDNサービスであるCloudFrontを使う
    • CDNを導入することによって、表示速度を速くするだけではなく、負荷分散に繋がる

2. サーバの運用が楽

  • ECSとFargateを組み合わせて使う
    • Fargateは、サーバレス運用が可能であり、簡単なセットアップが可能であり、管理も不必要
      • EC2はカスタマイズができるが、管理が必要
    • トラフィック増減に対して、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