概要
- AWSにてベーシックなWebサービスをデプロイする際に必要な内容をリストにしてまとめてみる
ご注意
- 筆者はAWS初心者です。もっと良い構築方法は必ずあります。抜け漏れもあるはずです。
仕様
- AWS EC2 AmazonLinux2インスタンスを用いてWebサービスを提供する。データはRDSのMySQLに格納する。
- 専用のVPCを作成する。
- VPCの中にパブリックサブネット1個とプライベートサプネットを2個を定義する。
- EC2インスタンスはパブリックサブネット内に設置
- 2個のプライベートサブネットはサブネットグループとしてグルーピングする。
- プライベートサブネットのサブネットグループはパブリックサブネットからのみ接続できる。
- EC2で提供するサービスはパブリックIPアドレスを用いてブラウザからアクセスするものとする(Route53でのドメインとIPの紐付けはしない)
- デプロイするアプリケーションでアップロードされるファイルなどはS3に格納する
やること
- ネットワーク部分の設定
- VPCの作成
- 作成前に決めておく内容
- リージョン
- VPCの名前
- IPアドレスの範囲(例: 10.0.0.0/16)
- IPv6の紐付け有無
- 特別必要にならない限り無し(IPv6 CIDRブロックなしを選択)
- テナンシーの設定
- 特別必要にならない限りデフォルト(デフォルトを選択)
- 作成前に決めておく内容
- サブネットの作成
- 作成前に決めておく内容
- パブリックサブネット
- サブネットの名前(例: XXX-public-subnet-アベイラビリティゾーン名)
- このサブネットを所属させるVPCの名前
- アベイラビリティゾーン
- IPアドレスの範囲(例: 10.0.10.0/24)
- プライベートサブネット1つ目
- サブネットの名前(例: XXX-private-subnet-アベイラビリティゾーン名)
- このサブネットを所属させるVPCの名前
- アベイラビリティゾーン
- IPアドレスの範囲(例: 10.0.20.0/24)
- プライベートサブネット2つ目
- サブネットの名前(例: XXX-private-subnet-アベイラビリティゾーン名)
- このサブネットを所属させるVPCの名前
- アベイラビリティゾーン
- IPアドレスの範囲(例: 10.0.21.0/24)
- パブリックサブネット
- 作成前に決めておく内容
- インターネットゲートウェイの作成
- 作成前に決めておく内容
- インターネットゲートウェイの名前(例: XXX-igw)
- 作成したインターネットゲートウェイと既に作成されているVPCのアタッチ
- 作成前に決めておく内容
- ルートテーブルの作成
- 作成前に決めておく内容
- ルートテーブルの名前(例: XXX-route)
- 作成したルートテーブルと既に作成されているパブリックサブネットとの関連付け
- 作成したルートテーブルにデフォルトルート(0.0.0.0/0)と先に作成したインターネットゲートウェイと紐付けルートを追加
- 作成前に決めておく内容
- IAMユーザー作成(S3アクセスで使用)
- 作成前に決めておく内容
- 名前(例: XXX-admin)
- AWSアクセスの種類
- プログラムによるアクセス(S3アクセスで使うので)
- アクセス許可の設定
- 既存のポリシーを直接アタッチ
- AmazonS3FullAccessを選択
- 既存のポリシーを直接アタッチ
- 作成時に取得できるcsvファイルは大切に保管する
- 作成前に決めておく内容
- VPCの作成
- EC2部分の設定
- EC2インスタンスの作成
- 作成前に決めておく内容
- AMI(OSの種類など)
- インスタンスタイプ(スペック)
- ストレージ(EBS or インスタンスストア)
- 特別必要にならない限り汎用SSDを選ぶ
- 合わせて削除にチェックを入れる
- 当該EC2設置するVPC
- 当該EC2を設置するサブネット
- 自動割当パブリックIPの有無
- Webからアクセスしたいので「有効」
- 割り当てるプライベートIP(例: 10.0.10.10)
- インスタンスの名前
- タグの追加でキー → name、値 → インスタンス名
- セキュリティグループ
- 名前(例: XXX-web)
- 設定
- 設定を割り当てるVPC
- 作成前に決めておく内容
- EC2インスタンスの作成
- RDS部分の設定
- MySQLのRDSインスタンスの作成
- 作成前に決めておく内容
- セキュリティグループ名と設定
- 名前(例: XXX-db)
- 設定
- 設定を割り当てるVPC
- インバウンドにルールを追加(既に存在するEC2からのみ接続できるようにする。)
- タイプ
- MYSQL/Aurora
- プロトコル
- TCP
- ポート範囲
- 3306
- ソース
- EC2のセキュリティグループ
- タイプ
- サブネットグループ
- 名前(例: XXX-subnet-group)
- グループ化するサブネットが所属しているVPC
- グループ化するサブネットの詳細(名前とアベイラビリティゾーン)
- パラメータグループ
- グループファミリー
- お使いのバージョンに合わせて決定
- 名前(例: XXX-mysql80 ←MySQL8.0を使う場合)
- グループファミリー
- オプショングループ
- 名前(例: XXX-mysql80 ←MySQL8.0を使う場合)
- エンジン
- お使いのDBエンジンに合わせて決定
- メジャーエンジンのバージョン
- お使いのDBエンジンのバージョンに合わせて決定
- インスタンス
- DBエンジン
- DBエンジンのバージョン
- テンプレート(本番稼働用?開発テスト用?無料利用枠?)
- 名前「DBインスタンス識別子」(例: XXX-web ←web用のDBなので)
- マスターユーザー名
- 基本はroot
- マスターパスワード
- 忘れない かつ セキュリティが高いものに設定
- インスタンスサイズ(標準mクラス? メモリ最適化rクラス or xクラス? バースト可能tクラス?)
- ストレージタイプ
- 特別必要にならない限り汎用ssd
- ストレージの自動スケーリング有無
- マルチAZ配置有無(料金安くしたいなら「スタンバイインスタンスを作成しないでください」)
- RDSインスタンスを設置するVPC
- RDSインスタンスを設置するサブネットグループ
- パブリックアクセス可否
- セキュリティグループ
- 先に作成したセキュリティグループ(DB用)
- アベイラビリティゾーン
- ポート
- 特別理由が内限り3306
- 割り当てるパラメータグループ
- 割り当てるオプショングループ
- 自動バックアップの有無
- 有効に設定 → 30日くらいの保持期間がおすすめ
- バックアップ取得時の時間(UTCで設定)
- マイナーバージョン自動アップグレードの可否
- 有効がおすすめ
- バージョンアップの時間(UTCで設定)
- セキュリティグループ名と設定
- 作成前に決めておく内容
- MySQLのRDSインスタンスの作成
- S3部分の設定
- バケットの作成
- 作成前に決めておく内容
- 名前(例: 任意のわかりやすい名前)
- リージョン
- バージョニング
- 特別必要がなければ不要
- サーバーアクセスのログ記録
- 本番環境では必要かも?
- デフォルト暗号化
- 本番環境では必要かも?
- アクセス権限
- 画像や動画配信する場合はパブリックアクセス許可しておく
- 作成前に決めておく内容
- バケットの作成