2019. 12. 15
ECS 再入門 vol.5 ECS でアプリケーションを実際に組んでみる
この記事は Fusic その 2 Advent Calendar 2019 15 日目の記事です。
はじめに
-
ECS 再入門 vol.5 ECS でアプリケーションを実際に組んでみる 👈 いまここ
前回は、ECS を利用したアプリケーションのログの取り扱いについて書きました。そして、前回まででECSの一通りの機能に関する説明が終わりました。
そこで、今回はこれまでの総集編として、ECSを使用したWebアプリケーションを実際に構築してみたいと思います。
ECS で WordPress を動かしてみる
というわけで、ECS を使用してお馴染みのWordPressを構築してみたいと思います。
EFSとバインドマウントを使用した共有ストレージの設定も盛り込みたいので、 EC2起動タイプで構築したいと思います。
ログに関する設定については、今回は割愛したいと思います。
構成図
今回は下記の構成でECS環境を構築していきます。
1. ネットワークの作成
VPC, サブネット, セキュリティグループなどを作成します。
- VPC
- IGW
- パブリックサブネット(a, c, d)
- プリベートサブネット(a, c, d)
- ルートテーブル(パブリックサブネットのデフォルトゲートウェイ をIGWにする)
- セキュリティグループ
- ALB用(HTTPをすべてのホストからアクセプト)
- EC2用(ALBからのすべてのTCPをアクセプト)
- RDS用(EC2からのTCP:3306をアクセプト)
これらはECS特有の操作ではないので。細かい説明は割愛します。
2. RDS の作成
WordPress を構築するので、MySQL を RDS で作成します。
サブネットは、先ほど作成したプライベートサブネットを設定し、セキュリティグループはRDS用のものを使用します。
こちらもECS特有の操作ではないので。細かい設定は割愛します。
3. EFS の作成
共有ストレージとして使用する EFS を作成します。
すべてのプライベートサブネットを含むように設定します。
こちらもECS特有の操作ではないので。細かい設定は割愛します。
4. ALB の作成
ECSの前段に配置するALBを作成します。
こちらもECS特有の操作ではないので。細かい設定は割愛します。
一点注意すべき点としては、WorPressの /
は 301
を返してくるので、デフォルトのままにしていると、いつまで経ってもコンテナがヘルスチェックに合格しなくなります。
5. ECS クラスターの作成
ここからが本題です。まずはECSクラスターを作成します。
EC2 Linux + ネットワーキング
を選択して、ASGも一緒に作成します。
インスタンスの設定
起動するインスタンスの設定を行います。
インスタンスタイプや、起動数を設定します。後で起動設定を変更するので、インスタンス数は(許されるなら)0
でもいいと思います。
ネットワーク設定
インスタンスはパブリックサブネットにいる必要があります。
また、セキュリティグループはEC2用に作成したものを割り当ててください。
クラスターの設定は以上です。後は勝手に諸々のリソースを作成してくれます。
6. クラスタインスタンスがEFSを自動マウントするようにASGを更新
起動設定の更新
自動で作成されたAutoScalingGroupの起動設定では、EFSをEC2にマウントすることができないので、起動設定をコピーして、ユーザーデータに下記のEFSを自動マウントするためのスクリプトを追加しておきましょう。
echo \"<efsのID>:/ /mnt/efs efs defaults,_netdev 0 0\" >> /etc/fstab
ASGの更新
上で作成した起動設定を使用するようにASGを更新します。
ASGを更新するだけではすでに動いているインスタンスの状態は変わらないので、希望数を 1 -> 0 -> 1 と変更してインスタンスを更新しておきましょう。
7. タスク定義を作成
タスク定義を作成していきます。EC2起動タイプを選択して始めます。
重要な箇所のみ説明を記載しているので、タスク定義名やCPU割り当て等の一般的な項目は適宜設定してください。
バインドマウント用のボリュームの作成
コンテナの設定を行う前に、コンテナにマウントするボリュームを作成しておきます。
EFSを自動マウントしたディレクトリを設定してください。
コンテナの基本情報を入力
dockerhub の WordPress のページから、最新のイメージを持ってきます。
メモ割り当てはリは適当です。
ポートマッピングの ホストポートは必ず 0
にしてください。でないと ALB の 動的ポートマッピング
が有効になりません。
データベース 接続情報を追加
WordPressコンテナに渡す環境変数を設定します。作成したRDSの情報を記載します。
8. サービス作成
タスクの作成もできたので、サービスを作成していきます。
といっても、サービスの作成はそこまで難しくありません。
基本設定
名前や動作させるタスクの設定を行います。
サービスとロードバランサー の紐付け
作成中のサービスに、先ほど作成したロードバランサー を紐付けます。
ロードバランサとコンテナの紐付け
サービスに紐づいたロードバランサー がターゲットグループとするコンテナの割り当てを行います。
今回はタスクにコンテナが1つなので、迷うことはありませんね。
残りの情報も、必要に応じて設定して、サービスを作成すると、数分でタスクが立ち上がってきます。
9. 動作チェック
ALBのDNS名にブラウザからアクセスしてみます。
無事に見慣れた画面ができてきました!
ログインしてテスト記事も書けます(画像も投稿できます)。
タスクをkillすると、502が帰ってきます。
再度タスクが立ち上がっても、EFSをマウントしているので、画像もきちんと保持されています。
完璧にECSでWordPressが動きましたね!
まとめ
今回は、ECS再入門シリーズの総集編として、実際にECSを使用してWordPressを構築してみました。
ただのEC2を用いたアプリケーションに比べると手順が複雑ですが、コンテナ技術の恩恵を多分に受けられるようになるので、そのための必要なコストかと思います。
このECS再入門シリーズが皆様のECSの理解を深める事に寄与できることを祈っています。