ECS 再入門 vol.5 ECS でアプリケーションを実際に組んでみる

Sun, 15 Dec 2019


この記事は Fusic その 2 Advent Calendar 2019 15 日目の記事です。

はじめに

前回は、ECS を利用したアプリケーションのログの取り扱いについて書きました。そして、前回まででECSの一通りの機能に関する説明が終わりました。

そこで、今回はこれまでの総集編として、ECSを使用したWebアプリケーションを実際に構築してみたいと思います。

ECS で WordPress を動かしてみる

というわけで、ECS を使用してお馴染みのWordPressを構築してみたいと思います。

EFSとバインドマウントを使用した共有ストレージの設定も盛り込みたいので、 EC2起動タイプで構築したいと思います。

ログに関する設定については、今回は割愛したいと思います。

構成図

今回は下記の構成でECS環境を構築していきます。

img

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 を作成します。

すべてのプライベートサブネットを含むように設定します。

img

こちらもECS特有の操作ではないので。細かい設定は割愛します。

4. ALB の作成

ECSの前段に配置するALBを作成します。

img

こちらもECS特有の操作ではないので。細かい設定は割愛します。

一点注意すべき点としては、WorPressの /301 を返してくるので、デフォルトのままにしていると、いつまで経ってもコンテナがヘルスチェックに合格しなくなります。

5. ECS クラスターの作成

ここからが本題です。まずはECSクラスターを作成します。

EC2 Linux + ネットワーキング を選択して、ASGも一緒に作成します。

img

インスタンスの設定

起動するインスタンスの設定を行います。

インスタンスタイプや、起動数を設定します。後で起動設定を変更するので、インスタンス数は(許されるなら)0 でもいいと思います。

img

img

ネットワーク設定

img

インスタンスはパブリックサブネットにいる必要があります。

また、セキュリティグループはEC2用に作成したものを割り当ててください。

クラスターの設定は以上です。後は勝手に諸々のリソースを作成してくれます。

6. クラスタインスタンスがEFSを自動マウントするようにASGを更新

起動設定の更新

自動で作成されたAutoScalingGroupの起動設定では、EFSをEC2にマウントすることができないので、起動設定をコピーして、ユーザーデータに下記のEFSを自動マウントするためのスクリプトを追加しておきましょう。

echo "<efsのID>:/ /mnt/efs efs defaults,_netdev 0 0" >> /etc/fstab

img

ASGの更新

上で作成した起動設定を使用するようにASGを更新します。

ASGを更新するだけではすでに動いているインスタンスの状態は変わらないので、希望数を 1 -> 0 -> 1 と変更してインスタンスを更新しておきましょう。

7. タスク定義を作成

タスク定義を作成していきます。EC2起動タイプを選択して始めます。

重要な箇所のみ説明を記載しているので、タスク定義名やCPU割り当て等の一般的な項目は適宜設定してください。

img

バインドマウント用のボリュームの作成

コンテナの設定を行う前に、コンテナにマウントするボリュームを作成しておきます。

EFSを自動マウントしたディレクトリを設定してください。

img

コンテナの基本情報を入力

dockerhub の WordPress のページから、最新のイメージを持ってきます。

メモ割り当てはリは適当です。

ポートマッピングの ホストポートは必ず 0 にしてください。でないと ALB の 動的ポートマッピングが有効になりません。 img

データベース 接続情報を追加

img

WordPressコンテナに渡す環境変数を設定します。作成したRDSの情報を記載します。

8. サービス作成

タスクの作成もできたので、サービスを作成していきます。

といっても、サービスの作成はそこまで難しくありません。

基本設定

名前や動作させるタスクの設定を行います。 img

サービスとロードバランサー の紐付け

作成中のサービスに、先ほど作成したロードバランサー を紐付けます。

img

ロードバランサとコンテナの紐付け

サービスに紐づいたロードバランサー がターゲットグループとするコンテナの割り当てを行います。

今回はタスクにコンテナが1つなので、迷うことはありませんね。

img

残りの情報も、必要に応じて設定して、サービスを作成すると、数分でタスクが立ち上がってきます。

9. 動作チェック

ALBのDNS名にブラウザからアクセスしてみます。

img

無事に見慣れた画面ができてきました!

ログインしてテスト記事も書けます(画像も投稿できます)。 img

タスクをkillすると、502が帰ってきます。 img

再度タスクが立ち上がっても、EFSをマウントしているので、画像もきちんと保持されています。

完璧にECSでWordPressが動きましたね! img

まとめ

今回は、ECS再入門シリーズの総集編として、実際にECSを使用してWordPressを構築してみました。

ただのEC2を用いたアプリケーションに比べると手順が複雑ですが、コンテナ技術の恩恵を多分に受けられるようになるので、そのための必要なコストかと思います。

このECS再入門シリーズが皆様のECSの理解を深める事に寄与できることを祈っています。


← back