#はじめに
自分用のメモ書きの側面もありますがせっかくなので記事にしました。
AWSの無料枠を用いてWordPressでサイトを作るための土台を作っていこうと思います。
せっかくなのでいつの日か冗長化しやすい構成を目指してみます。(Route53は無料じゃないので未使用)
色んなサイトをかいつまんで参考にしていますのでおかしなところがあるかもしれません。
#筆者の経歴
年 | 経歴 |
---|---|
2019年4月 | 未経験の新卒としてWEB企業に入社 会社のサービス全般の基盤を扱う開発部に配属 |
2019年4月~2020年6月 | サービス基盤を扱う部署にてポイント系事業の運用保守を担当 |
2020年6月 | インフラエンジニアとしてDWHを扱う部署へ異動 |
2020年7月~ | DWHチームとして日時月次のデータ連携業務などを主に担当 |
2021年12月 | AWS ソリューションアーキテクトアソシエイトを取得 |
2022年2月 | 現在に至る |
#筆者のスキル
- DWHチームではデータ抽出業務が主なためSQLをよく使用
- AWSアソシエイト資格は取得したが業務で触っているリソース以外の使用経験は無し
- 業務で使用しているリソースに関しても一から環境構築したわけではなく既存環境の運用
- 結論:一度も最初から環境構築したことがない!!
#今回やりたいこと
- AWSにて環境を構築する
- 冗長化に対応している構成にする
- 後の工程でWordPress環境を構築しやすいようにする
- とにかく環境構築を頑張る(最重要)
##AWSアカウントを作る
この手順に関しては語ることもないですね。
お金の都合上できるだけ無料枠のみを使用します。
##VPCの作成
マネージメントコンソールには入れたらAWS上にVPCを作成します。
(これから作成するEC2やRDSなどが含まれるAWS上のプライベートな領域)
1. 左上の検索ボックスからVPCと検索し、VPC設定画面へ移動。
2. サイドバーのVPC選択した後に、『VPCの作成』を押下。
3. 画像のような画面が出てくるので必要な情報を記載した後、ページ下部にある『VPCを作成』を押下。
名前タグ(Name Tag): 任意の文字列(今回はmff_vpcとします)
IPv4 CIDR: 10.0.0.0/16
##IGWの作成とアタッチ
VPCの作成が終わったらこの後に作成するEC2などがインターネットと通信するための入り口となるインターネットゲートウェイを作成します。
(これを作成しないとAWS内にただリソースがあるだけでWEBサイトなどをインターネットで公開できない)
1. VPCのコンソール画面のサイドバーのインターネットゲートウェイを選択した後に、『インターネットゲートウェイの作成』を押下。
2. 名前タグ(Name Tag)を設定し『インターネットゲートウェイの作成』を押下。
名前タグ(Name Tag): 任意の文字列(今回はmff_igwとします)
4. 作成したVPCを選択した状態で右上のアクションボタンを押下し『VPCにアタッチ』を押下。
5. 使用可能なVPCに先ほど作成したVPCが出てくるので選択し『インターネットゲートウェイのアタッチ』を押下。
6. 状態が『Attached』になっていればIGWがVPCにアタッチできています。
##サブネットの作成
次にVPCの中にサブネットを作成します。
サブネットには2つ種類がありパブリックサブネットとプライベートサブネットがあります。
かなり簡潔な解説をすると下記になります。
パブリックサブネット:WEBサイト用EC2などのユーザーが接続してくるリソースを置く領域
プライベートサブネット:データベースなどのユーザーには接続してほしくないリソースを置く領域
今回はいざというときに冗長化できるようにパブリックサブネットとプライベートサブネットを
それぞれ異なるアベイラビリティゾーンに1つずつ作成します。
###パブリックサブネットの作成
1. VPCのコンソール画面のサイドバーのサブネットを選択した後に、『サブネットの作成』を押下。
2. 画像のような画面が出てくるので必要な情報を記載した後、ページ下部にある『サブネットの作成』を押下。
VPC ID: 先ほど作成したVPCを選択
名前タグ(Name Tag): 作成したAZがわかりやすい任意の文字列(今回はmff_pub_sub_aとします)
アベイラビリティゾーン:ap-northeast-1a
IPv4 CIDR ブロック: 10.0.10.0/24
3. 同様の手順で二つ目のサブネットを作成します。
VPC ID: 先ほど作成したVPCを選択
名前タグ(Name Tag): mff_pub_sub_c
アベイラビリティゾーン:ap-northeast-1c
IPv4 CIDR ブロック: 10.0.20.0/24
4. 作成したサブネットを選択し右上のアクションボタンの『サブネットの設定を編集』を押下。
『パブリック IPv4 アドレスの自動割り当てを有効化』にチェックを入れた後、ページ下部の保存を押下。
5. 作成したサブネットのルーティングを変更するためにルートテーブルを更新します。
VPCのコンソール画面のサイドバーのルートテーブルを選択した後に、VPCと紐づいているルートテーブルを作成。
右上のアクションボタンの『ルートを編集』を押下。
6.下記のような画面が出てくるので必要な情報を記載した後、ページ下部にある『変更を保存』を押下。
送信先:0.0.0.0/0 (すべてのアクセスを許可する的な意味合いです)
ターゲット: インターネットゲートウェイからmff_igwを選択
7. 更新したルートテーブルを選択しサブネットの関連付けを押下した後『サブネットの関連付けを編集』を押下。
8. パブリックサブネット二つを選択した後『関連付けを保存』を押下。
9. 正常にサブネットが紐づけられていれば成功です。
###プライベートサブネットの作成
1. サブネットの作成手順はパブリックサブネットの作成の手順1~3と同様です。内容は下記でよいかと思います。
VPC ID: 先ほど作成したVPCを選択
名前タグ(Name Tag): mff_pte_sub_a
アベイラビリティゾーン:ap-northeast-1a
IPv4 CIDR ブロック: 10.0.30.0/24
VPC ID: 先ほど作成したVPCを選択
名前タグ(Name Tag): mff_pte_sub_c
アベイラビリティゾーン:ap-northeast-1c
IPv4 CIDR ブロック: 10.0.40.0/24
2. プライベートサブネットはデフォルトのルートテーブルを用います。
##現在の状態②
##セキュリティグループの作成
EC2とELB用にセキュリティグループの作成をします。
セキュリティグループを設定しないとアクセスされ放題になってしまったりするので出来る限り必須の作業です。前提として今回はオートスケールに対応したEC2はパブリックサブネットに配置します。
###EC2用のセキュリティグループの作成
1. EC2のコンソール画面のサイドバーのセキュリティグループを選択した後に、『セキュリティグループの作成』を押下。
2. 画像のような画面が出てくるので必要な情報を記載した後、ページ下部にある『セキュリティグループを作成』を押下。
・基本的な詳細
セキュリティグループ名: 任意の文字列(今回はmff_ec2_SGとします)
説明: 任意の説明文
VPC:先ほど作成したVPC
IPv4 CIDR ブロック: 10.0.40.0/24
・インバウンドルール
1、タイプ: SSH プロトコル: TCP ポート範囲: 22 ソース: カスタム 0.0.0.0/0
2、タイプ: HTTP プロトコル: TCP ポート範囲: 80 ソース: カスタム ::/0
3、タイプ: HTTP プロトコル: TCP ポート範囲: 80 ソース: カスタム 0.0.0.0/0
###ELB用のセキュリティグループの作成
1. EC2のコンソール画面のサイドバーのセキュリティグループを選択した後に、『セキュリティグループの作成』を押下。
2. ELBはHTTPアクセスのみを受け付ければいいので下記の内容で作成します。
・基本的な詳細
セキュリティグループ名: 任意の文字列(今回はmff_elb_SGとします)
説明: 任意の説明文
VPC:先ほど作成したVPC
IPv4 CIDR ブロック: 10.0.40.0/24
・インバウンドルール
1、タイプ: HTTP プロトコル: TCP ポート範囲: 80 ソース: カスタム ::/0
2、タイプ: HTTP プロトコル: TCP ポート範囲: 80 ソース: カスタム 0.0.0.0/0
##ターゲットグループの作成
ターゲットグループとは、ELBが受け付けたリクエストの振り分け先の事です。
1. EC2のコンソール画面のサイドバーのターゲットグループを選択した後に、『Create target group』を押下。
2. 画像のような画面が出てくるので必要な情報を記載した後、ページ下部にある『Next』を押下。
3.遷移したページ下部の『Create target group』を押下するとターゲットグループが作成される。
##ELBの作成
作成したターゲットグループをELBを作成し紐づけます。
1. EC2のコンソール画面のサイドバーのロードバランサ―を選択した後に、『ロードバランサ―』を押下。
3.画像のような画面が出てくるので必要な情報を記載していきます。
- 基本的な設定
Load balancer name: 任意の文字列(今回はmff-albとしています)
- ネットワークマッピング
VPC: 先ほど作成したVPCを選択
Mappings: 先ほど作成したパブリックサブネットをそれぞれのAZで選択
- セキュリティグループ
Security groups: 先ほど作成したelb用のセキュリティグループを選択
- ルーティング
Select a target group: 先ほど作成したターゲットグループを選択
4.Summaryに手順3で選択したものが表示されるので確認し問題がなければ『Create load balancer』を押下。
##Auto Scalingに対応したEC2の作成
ようやく箱組が作り終わったのでここからはAuto Scalingグループを作成していきます。
Auto ScalingではEC2の負荷が高まった際などに自動的にインスタンスを増やしたりすることができます。
###Auto Scalingの起動テンプレートの作成
この手順ではEC2がどのような状況になったらAuto Scalingするかどうかの設定を行います。
1. EC2のコンソール画面のサイドバーのテンプレートの起動を選択した後に、『起動テンプレートを作成』を押下。
2. 画像のような画面が出てくるので必要な情報を設定していきます。
- AMIの選択
-
高度な詳細
ユーザーデータに下記を記載しインスタンスが立ち上がった際に自動で実行するように設定
#!/bin/bash
sudo yum update -y
# apacheをインストール
sudo yum install httpd -y
# apacheの起動
sudo service httpd start
# PHPのインストール
sudo amazon-linux-extras install php7.3 -y
sudo yum install php php-mbstring -y
#MariaDBを削除
sudo yum remove mariadb-libs -y
#MYSQLをインストール
sudo yum install mysql -y
# /var/www/html/ ディレクトリ以下にI'm healthyと記入されたindex.htmlを作成
sudo echo "I'm healthy" > /var/www/html/index.html
3. ページ右部の『起動テンプレートを作成』を押下。
###Auto Scalingグループの作成
1. 作成した起動テンプレートを選択した状態で右上のアクションボタンを押下し『Auto Scaling グループを作成』を押下
2. 起動テンプレートが選択されていることを確認し次へを押下
3. 画像のような画面が出てくるので必要な情報を設定し次へを押下。
VPC: 先ほど作成したVPCを選択
アベイラビリティゾーンとサブネット: 作成した二つのパブリックサブネットを選択
4. 画像のような画面が出てくるので必要な情報を設定し次へを押下。
ロードバランシング: 既存のロードバランサ―にアタッチ
ロードバランサ―のターゲットグループから選択: 先ほど作成したターゲットグループを選択
ヘルスチェック: ELBを選択
5. 画像のような画面が出てくるので必要な情報を設定し次へを押下。
今回は無料枠でのお試しなので下記の設定にします。
6. 通知の設定は今回は省略します。
8. 内容を確認し問題がなければページ下部の『Auto Scalingグループを作成』を押下。
9. Auto Scalingグループが作成されたのを確認。
10. EC2のコンソール画面のサイドバーのインスタンスを押下しインスタンスが作成されているか確認。
11. ロードバランサ―のDNS名をブラウザに打ち込み正常に接続できるか確認。
##データベースの作成
プライベートサブネットにRDSを利用しデータベースを作成します。
###DBサブネットグループの作成
1. RDSのコンソール画面のサイドバーのサブネットグループを選択した後に、『DB サブネットグループを作成』を押下。
2. 画像のような画面が出てくるので必要な情報を下記のように設定し『作成』を押下。
名前: 任意の文字列(今回はmff-db-subnet-groupとします)
VPC: 先ほど作成したVPCを選択
アベイラビリティゾーン: ap-northeast-1aとap-northeast-1c
サブネット: 先ほど作成した二つのプライベートサブネット
###DBの構築
1. RDSのコンソール画面のサイドバーのデータベースを選択した後に、『データベースを作成』を押下。
2. 画像のような画面が出てくるので必要な情報を下記のように設定し設定し次へを押下。
DB インスタンス識別子: 任意の文字列(今回はmff-sitedbとしています)
マスターユーザー名: root
- 接続
VPC: 先ほど作成したVPCを選択
サブネットグループ: 先ほど作成したサブネットグループを選択
パブリックアクセス: なし
VPCセキュリティグループ: 新規作成
新しい VPC セキュリティグループ名: 任意の文字列(今回はmff-db-SGとしています)
3. データベース認証はパスワード認証を選択しページ下部のデータベースを作成を押下。
4. 右上の認証情報の詳細を表示を押下しマスターパスワードを確認。
##EC2とDBの接続
データベースを作成したのでEC2と紐づけてEC2からDBへ接続できるようにします。
1. EC2のコンソール画面のサイドバーのセキュリティグループを選択した後に、DB作成時に作成したセキュリティグループがあることを確認。
2. インバウンドルールを編集、この際デフォルトで設定されていたルールは削除。
・インバウンドルール
タイプ: すべてのトラフィック プロトコル: すべて ポート範囲: すべて ソース: カスタム 先程ec2用に作成したセキュリティグループ
##EC2およびDBの接続確認
1. 稼働しているEC2のパブリック IPv4 アドレスを用いてSSH接続できるか確認。
・EC2接続時
ユーザー名: ec2-user
使用するキー: 先ほど作成したpemキー
2. 接続できることが確認出来たら今度はEC2上からDBへ接続できるか確認。
・DB接続時
mysql -h DBのエンドポイント -u root -p
pass: DBを作成した時のマスターパスワード
##最終的な構成図
少々おかしな点はあるかもしれませんが最終的な構成は下記となります。
ap-northeast-1cのAZには今回は無料枠で作成という趣旨なので何も配置できていませんがいざというときはEC2をAuto ScalingしたりDBのリードレプリカを作成したりします。
##まとめ
これまで実務で経験してきた環境はあくまで既存で構築済みの環境でした。
既存の環境ではどうしても『何故この部分はこのように構築しているのか?』といったような疑問が出てくることが多かったです。
今回、完全に1から環境を作成する為に色々な方の技術記事を拝見して、結果として多くの知見を得ることが出来ました。
ほかの方から知見を得るだけでなくその情報を元に、実際に手を動かし構成図なども作成しながら作業を行えたので私がAWS SAAを取得した際に得た知識も活かせた気がしています。
しかし今回作成した環境には私が思いつくだけでもまだまだ改善点があります。
ドメイン名、SEO対策、セキュリティ対策、EC2やDBのバックアップ、監視、AMI更新、etc…
少なくとも上記の点は今後改良していきたいところです。
まだまだ未熟な私が自分の為の備忘録も兼ねて作成した記事ですが
よろしければ LGTM などで応援のほどよろしくお願いします!
####(続)Wordpressのインストール及び設定