AWSでWebサイトを構築する方法

AWS

このWebサイトはAWSで構築しています。仕事ではオンプレに触れることが多く、クラウド構築は全くの未経験でした。AWS初心者が独学で構築できたので、誰でも同じようなWebサイトが構築できるはずです。

アクセスがほぼ無いブログなので冗長構成にする必要はないですが、インフラの勉強の為にWebサーバとDBサーバを2台にしてみました。

構成はこんな感じです。 

これを構築するまでの流れは以下のとおりです。

  1. アカウント(ルートユーザー)作成
  2. IAMユーザー作成
  3. MFA設定
  4. 請求情報アクセス有効化
  5. VPC作成
  6. サブネット作成
  7. インターネットゲートウェイ作成
  8. ルートテーブル作成
  9. セキュリティグループ作成
  10. キーペア作成
  11. インスタンス起動
  12. Elastic IPアドレス関連付け
  13. DBサブネットグループ作成
  14. データベース作成
  15. ドメイン登録
  16. SSL/TLS証明書リクエスト
  17. ターゲットグループ作成
  18. ロードバランサー作成
  19. エイリアスレコード作成
  20. SSH接続
  21. Apacheインストール
  22. PHPインストール
  23. MySQLインストール
  24. WordPressインストール

詳しい人から見れば、あえて作業を分割しているように感じると思います。例えば、「11.インスタンス起動」の際に「10.キーペア作成」をまとめて作成することもできます。

実際に構築してみた感想になりますが、複数の項目をまとめて作成すると、「それがなぜ必要なのか」が分かり難いように感じました。この順番で構築すれば、きっと誰でも理解できるはずです。

01. アカウント(ルートユーザー)作成

ルートユーザーはMFAを設定して、最小限の利用にします。PCの管理者権限と同じようなものです。

① AWSのページを開いて右上の[AWSアカウントを作成]を選択する

② 「Eメールアドレス」と「AWSアカウント名」を入力する

③ 「連絡先情報」「クレジットカード番号」「サポートプラン」を設定する

02. IAMユーザー作成

ユーザー毎に最小限の権限を付与したIAMユーザーを作成します。特権のあるIAMユーザーにはMFAを設定します。

① 検索窓に『ユーザー』を入力して[ユーザー]を選択する

② 画面右上の[ユーザーの作成]を選択する

③ 任意のユーザー名を入力して[-オプション]をチェックする

④ [IAMユーザーを作成します]を選択して[次へ]を選択する

⑤ [ポリシーを直接アタッチする]を選択して「許可ポリシー」から[AdministratorAccess]をチェックして[次へ]を選択する

⑥ 入力した内容を確認して[ユーザーの作成]を選択する(パスワードは必ず控える)

⑦ IAMユーザーでログインする
  ”https://(12桁のアカウントID).signin.aws.amazon.com/console”

03. MFA設定

ルートユーザーと特権のあるIAMユーザーには他要素認証(MFA)を使用することを推奨します。

① スマートフォンに「Google Authenticator」をインストールする

② 右上のユーザー名から[セキュリティ認証情報]を選択する

③ [MFAデバイスの割り当て]を選択する

④ 任意のデバイス名を入力して、使用するMFAデバイスから[Authenticator app]を選択して[次へ]を選択する

⑤ スマートフォンの「Google Authenticator」からQRコードをスキャンする

⑥ MFAコードを入力して[MFAを追加]を選択する

04. 請求情報アクセス有効化

ルートユーザーは殆どログインしないので、IAMユーザーで請求情報を確認できると便利です。

① ルートユーザーでログインする

② 右上のユーザー名から[アカウント]を選択する

③ [IAMユーザーおよびロールによる請求情報へのアクセス」までスクロールして[編集]を選択する

④ [IAMアクセスのアクティブ化]をチェックして[更新]を選択する

05. VPC作成

クラウド上にプライベートな仮想ネットワーク環境を構築します。複数のVPCを接続することも可能ですが、まずはひとつで大丈夫です。特別な理由がない限り、リージョンは米国東部(バージニア北部)で作成します。

① 画面上部のリージョンが「バージニア北部」になっていることを確認する

② 検索窓に『VPC』を入力して[VPC]を選択する

③ 自動で作成されているデフォルトVPCを削除する

④ 画面右上の[VPCを作成]を選択する

⑤ 「作成するリソース」で[VPCのみ]を選択する

⑥ 「名前タグ」に任意の名前を付ける

⑦ 「IPv4 CIDR ブロック」で[~の手動入力]を選択して『10.0.0.0/16』を入力する

⑧ その他はデフォルトのままで[VPCの作成]を選択する

06. サブネット作成

作成したVPCの中に、さらに細かくしたネットワークを作成します。パブリックとプライベートに分ける場合やマルチAZで運用する場合は、事前に複数のIPアドレスを考えておくことをお勧めします。パブリックサブネットとプライベートサブネットは同じAZ内に作成して、マルチAZで運用する場合は別のAZでもサブネットを作成します。

① 検索窓に『サブネット』を入力して[サブネット]を選択する

② デフォルトのサブネットにチェックを入れて[アクション]から[サブネットを削除]を選択する

③ [サブネットを作成]を選択する

④ 「VPC ID」は作成済みのVPCを選択する

⑤ 「サブネット名」にパブリックとプライベートが識別しやすい任意の名前を入力する

⑥「アベイラビリティーゾーン」は任意のもの(一番上で構わない)を選択する

⑦ 「IPv4 サブネット CIDR ブロック」はVPCのCIDR内に収まるように『10.0.●.0/24』(任意のサブネット)を入力する

⑧ パブリックとプライベートに分ける場合やマルチAZで運用する場合は[新しいサブネットを追加]を選択する

⑨ 必要なサブネットの作成が終わったら[サブネットを作成]を選択する

07. インターネットゲートウェイ作成

VPCからインターネットに接続するための出入口となり、VPC内のパブリックサブネットと接続されます。つまりプライベートサブネットはインターネットゲートウェイに接続されません。

① 検索窓に『インターネットゲートウェイ』を入力して[インターネットゲートウェイ]を選択する

② 画面右上の[インターネットゲートウェイの作成]を選択する

③ 「名前タグ」に任意の名前を入力して[インターネットゲートウェイの作成]を選択する

④ 画面右上の[アクション]から[VPCにアタッチ]を選択する

⑤ 「使用可能なVPC」で作成済みのVPCを選択して[インターネットゲートウェイのアタッチ]を選択する

08. ルートテーブル作成

オンプレでも用いられるルーティングテーブルと同じ考え方で、VPC内で通信を振り分けるためのルールを作成します。デフォルトでVPC内(local)の接続は許可されているので、パブリックサブネットにはインターネットゲートウェイを関連付け、プライベートサブネットには何も関連付けせずVPC内のみ接続できる状態にします。

① 検索窓に『ルートテーブル』を入力して[ルートテーブル]を選択する

② 画面右上の[アクション]から[ルートテーブルを作成]を選択する

③ 「名前」にパブリックサブネット用の任意の名前を入力する

④ 「VPC」は作成済みのVPCを選択して[ルートテーブルを作成]を選択する

⑤ 作成したルートテーブルにチェックを入れて画面右上の[アクション]から[ルートを編集]を選択する

⑥ [ルートを追加]を選択して「送信先」と「ターゲット」に[0.0.0.0/0]と[インターネットゲートウェイ]を選択後、[変更を保存]を選択する

⑦ 作成したルートテーブルにチェックを入れて[アクション]から[サブネットの関連付けを編集]を選択する

⑧ 「利用可能なサブネット」から作成済みのパブリックサブネットにチェックを入れて[関連付けを保存]を選択する

⑩ [アクション]から[ルートテーブルを作成]を選択してプライベートサブネット用のルートテーブルを作成する

⑪ プライベートサブネット用のルートテーブルにチェックを入れて[アクション]から[サブネットの関連付けを編集]を選択してプライベートサブネットを関連付ける

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

VPC内に構築するEC2インスタンスに対してホワイトリストでファイアウォールとして機能するルールを作成します。デフォルトは通信拒否なので、許可ルールのみを設定していきます。
セキュリティグループはステートフルで、インバウンドルールで許可された通信はアウトバウンドルールでも自動的に許可されます。対してネットワークACLはステートレスで、インバウンドルールとアウトバウンドルールをそれぞれ設定する必要があります。基本的にはセキュリティグループのみ設定することをお勧めします。

① 検索窓に『セキュリティグループ』を入力して[セキュリティグループ]を選択する

② ALB用を作成するため画面右上の[セキュリティグループを作成]を選択する

③ 「セキュリティグループ名」にALB用の任意の名前を入力して「VPC」は作成済みのVPCを選択する

④ 「インバウンドルール」の[ルールを追加]を選択して以下の設定をする
 ・「タイプ」:[HTTP]
 ・「リソースタイプ」:[Anywhere-IPv4]
 ・「ソース」:[0.0.0.0/0]

⑤ [ルールを追加]を選択してHTTPSも同様に作成する

⑥ [セキュリティグループを作成]を選択する

⑦ パブリックサブネット用を作成するため画面右上の[セキュリティグループを作成]を選択する

⑧ 「インバウンドルール」で以下の設定をする
 ・「タイプ」:[HTTP]
 ・「リソースタイプ」:[カスタム]
 ・「ソース」:[(ALB用セキュリティグループ)]

⑨ [ルールを追加]を選択して以下の設定をする
 ・「タイプ」:[SSH]
 ・「リソースタイプ」:[マイIP]

⑩ [セキュリティグループを作成]を選択する

⑪ プライベートサブネット用を作成するため画面右上の[セキュリティグループを作成]を選択する

⑧ 「インバウンドルール」で以下の設定する
 ・「タイプ」:[MYSQL/Aurora]
 ・「リソースタイプ」:[カスタム]
 ・「ソース」:[(パブリック用セキュリティグループ)]

⑨ [ルールを追加]を選択して以下の設定をする
 ・「タイプ」:[SSH]
 ・「リソースタイプ」:[カスタム]
 ・「ソース」:[(パブリック用セキュリティグループ)]

⑩ [セキュリティグループを作成]を選択する

10. キーペア作成

EC2インスタンスにSSH接続するためにキーペアを作成します。プライベートキーを自分のPCに保存して、EC2インスタンスに格納されたパブリックキーと認証させます。

① 検索窓に『キーペア』を入力して[キーペア]を選択する

② 画面右上の[キーペアを作成]を選択する

③ 「名前」に任意の名前を入力して「キーペアのタイプ」で『ED25519』を選択する

④ 「プライベートキーファイル形式」で『.pem』を選択して[キーペアを作成]を選択する

⑤ PCにプライベートキーがダウンロードされるので絶対に紛失しないようにする

11. インスタンス起動

作成する仮想サーバはLinuxを想定しています。「CPUの種類に迷ったらとりあえずx86-64系を選ぶ」と書かれた記事もありますが、このブログ程度なら金額も考慮して低スペックLinux(Arm系)で問題ありません。無料枠を試したい場合は別途調べてください。

① 検索窓に『EC2』を入力して[EC2]を選択する

② [インスタンスを起動]を選択して「名前」に任意の名前を入力する

③ 「アプリケーションおよびOSイメージ」で[Amazon Linux 20xx (AMI)]を選択して「アーキテクチャ」は[64ビット(Arm)]を選択する

④ 「インスタンスタイプ」の[インスタンスタイプを比較]を選択する

⑤ [(設定アイコン)]を選択して「属性列」の[オンデマンド Linux 料金]にチェックを入れて[確認]を選択する

⑥ 「インスタンスタイプ」の検索窓で『g.』を検索して[オンデマンド Linux 料金]を安い順にソートする(複数回押すことを推奨)

⑦ 一番安いインスタンス(おそらく「t4g.nano」)を選択して[インスタンスタイプを選択]を選択する

⑧ 「キーペア(ログイン)」で作成済みのキーペアを選択して「ネットワーク設定」で[編集]を選択する

⑨ 「ネットワーク設定」で以下の設定をする
  ・「VPC」:作成済みのVPC
  ・「サブネット」:作成するインスタンスを配置したいサブネット
  ・「パブリックIPの自動割り当て」:[無効化]
  ・「ファイアウォール」:[既存のセキュリティグループを選択する]
  ・「共通のセキュリティグループ」:パブリック用またはプライベート用

⑩ 「ストレージを設定」

12. Elastic IPアドレス関連付け

13. DBサブネットグループ作成

14. データベース作成

15. ドメイン登録

16. SSL/TLS証明書リクエスト

17. ターゲットグループ作成

18. ロードバランサー作成

19. エイリアスレコード作成

20. SSH接続

21. Apacheインストール

22. PHPインストール

23. MySQLインストール

24. WordPressインストール