こんにちは!
エンジニアのオオイシ(@mako_0705)です!
前回に引き続き、AWSでRailsのサーバーレス環境を構築していきます。
全体の流れのうちの本記事では、
- Railsのコンテナ作成
- ECRにコンテナpush
- データベース(Amazon RDS)の作成
- ECS + Fargate の構築 ←今ここ
- CodePipeline で CI/CD 環境を作る
と言った位置付けです。
Amazon ECS(Amazon Elastic Container Service)とは、dockerコンテナを管理するためのサービスで、AWSでコンテナをうまい具合に増やしたり少なくしたりを調整してくれます。
AWS Fargateとはいわゆるサーバーレス環境のことで、煩雑な細かなサーバーの管理が不要です。
ECSはクラウドコンピューティング環境としてのFargateに対してEC2がありますが、サーバーリソースを気にしなくて良いメリットがあるので、Fargateを試してみることをおすすめします!
Black Belt で詳しいスライドがあるので、ぜひ、確認してみてください。
目次
事前準備
ECSはDockerコンテナが前提となります。
Dockerを使ったRailsの開発環境の構築はこちらを参照してください。
作成したコンテナをリポジトリに登録する記事はこちらを参照してください。
RDSの作成はこちら。
ECSの簡単な用語説明
ECSでは主にクラスタ、タスク、サービスの3つの機能を使って構築していきます。
- タスクとは、コンテナの情報とCPU、メモリ量やネットーワークなどを定義するなどして、コンテナを起動するための情報を定義します。
- サービスとは、タスクをWEBサービスのように常時起動するために定義します。
- ECSクラスタとは、タスクとサービスを論理的なグループにまとめて一元管理します。
ECSクラスタを作成していきましょう。
(STEP1)ECSクラスタを作成する
「クラスターの作成」をクリックします。

Fargateを使うので「ネットワークのみ」を選択します。

クラスター名は任意です。


空っぽのクラスタが作成できました。
(STEP2)タスク定義
タスク定義とは、主にコンテナの実行に必要なCPU、メモリ、ネットワークや環境変数などをを定義します。
「新しいタスク定義の作成」をクリックします。

「FARGATE」を選択。

タスク定義名は任意です。
その他はデフォルトでいいでしょう。


イメージはECRに登録したコンテナのイメージのURIを登録します。
ポートマッピングはコンテナの解放ポートを登録します。
Railsでwebricを実行するための3000ポートとします。

production用の環境変数を登録します。
データベースは作成したRDSの値を入れてください。
RAILS_SERVE_STATIC_FILES
はproduction環境で/public配下にアクセス可能にするためtrue
を登録します。
/public/health.html
を設置してALBからのヘルスチェックで利用します。
productionではSECRET_KEY_BASE
も入れてください。

「作成」をクリックすると完了です。
(STEP3)サービスの作成
前項で作成したタスク定義をサービスに登録していきます。
外部インターネットからのHTTP(80)へのアクセスをコンテナに接続する為に、事前にALBの設定が必要です。
加えてセキュリティグループも作成も必要になってきます。(※割愛)
ALBの作成
ALBのターゲットグループはIPベースで作成してください。
なぜなら、ECSでコンテナを作成したり自動でスケールさせた場合に、AWSが自動的にターゲットグループにIPアドレスを登録しにいくからです。

サービスの登録
タスク定義したRailsをサービスに登録します。
起動タイプをFargateにしたらあとは任意で大丈夫です。
タスク数はコンテナを起動する数です。
今回はお試しなので1
としています。

ヘルスチェック猶予期間とはALBがヘルスチェックするまでの待ち時間です。
Railsだとasset:precompile
するのに時間がかかったりするので、
Task failed ELB health checks in XXXXX
などとエラーが出てコンテナが起動しないことがあるため360秒などで余裕を持たせましょう。

事前に作成したALBを選択します。

サービスの作成をクリックします。

しばらくするとしたサービス内のタスクの行が追加され
PROVISIONIN → PENDING → RUNNNING
に遷移するのを待ちます。

ちょっとまつ….

RUNNNING となればコンテナの起動完了です。
実行確認
実行していることを確認してみましょう。

スケールさせてみる
タスク数が1→3に増やしてみます。

変更します。


このようにコンテナを簡単に増やすことができました。

次回は、CodePipeLineを使ったCI/CD環境について紹介して行こうと思います!