ECS Fargateを立ち上げる
環境 / 前提
AWSアカウント
ECRにイメージがある状態
ECR イメージの準備
こちらの記事を参考にしてください。
DockerイメージをAWS ECRにプッシュする
本記事ではReactアプリの初期ファイルをイメージ化したものを起動確認に使用しました。
すでに準備している方はそちらをご利用ください。
ECSについて
AWSのDockerコンテナサービスです。
調べるとさまざまな解釈で説明がされています。初心者の方にとっては初めての概念、用語が出てきて理解に時間がかかります。一度、本記事を通して起動確認まで行ってから、じっくりと調べていただくことをお勧めします。
この3つの用語だけは外せないので紹介します。
- タスク/タスク定義: コンテナの設定を行います。
- サービス: タスクの割り当て、オートスケーリングの設定や、VPCなどの設定を行います。
- クラスター: サービスの集合体です。
手順
- ECSクラスターの作成
- ECSタスク定義の作成
- ECSサービスの作成
- ECS Fargate起動確認
- ECS Fargateの削除
1. ECSクラスターの作成
ECSクラスターとはタスクを配置する「EC2インスタンス群」のことです。ただし、どのEC2インスタンスで起動しているかが隠蔽されているため、SSH接続して操作することができません。今回はFargateという起動タイプを使用します。
- ECSダッシュボードから「クラスターの作成」を選択
- ネットワーキングのみ(Fargateを使用)を選択
- クラスターに名前を付ける
- VPCを作成 (任意)
- 作成
※ 作成完了まで2分程度待ちます。CloudFormationテンプレートを自動生成する処理が走るようです。
2. ECSタスク定義の作成
タスクはDockerコンテナに相当します。どのようにタスクを起動するかを設定します。つまり
docker-compose.yml
のようなものです。JSON形式で設定されます。
- ECSダッシュボードから「タスク定義」を選択
- 「新しいタスク定義の作成」を選択
- 「FARGATE」を選択
- タスク定義名を記入
- タスクロールは「ecsTaskExecution」(デフォルト)
- オペレーティングシステムファミリー:「Linux」
- タスクメモリ:任意のメモリ
- タスクCPU:任意のCPU
- コンテナの追加
- コンテナ名:任意のコンテナ名
- イメージ:ECRのURIをコピー (タグは
:latest
を指定 ※1) - ポートマッピング:ポート3000番を指定します (※2)
- あとは空欄のまま「追加」
- 作成
3. ECSサービスの作成
ECSサービスとはサービスは、ALBとAutoScaling Groupに紐付けられた「タスク群」です。サービスの作成時にタスク定義を付与する必要がありますが、サービスはタスクの上位概念というわけではありません。タスクはタスク単体でECSクラスターへ配置することができるからです。
- サービスの設定
- ECSダッシュボードから「クラスター」を選択
- 作成したクラスターを選択しダッシュボードを表示
- 一番左のタブの「サービス」を選択
- 「作成」を選択
- タスク定義: 「2. ECSタスク定義の作成」で作成したタスク定義を選択
- リビジョン:「〇〇 (latest)」
- サービス名:任意のサービス名
- タスクの数:「1」
- その他の項目は初期値のまま「次へ」
- ネットワーク構成
- クラスター VPC:任意のVPCを選択 (「1. ECSクラスターの作成」時にVPCを新規作成した方はそのVPCを選択)
- サブネット:必要な分だけ選択
- セキュリティグループの「編集」を選択
- インバウンドルールを追加:カスタムTCP / Anywhere / 3000番
- その他の項目は初期値のまま「次へ」
- Auto Scaling (オプション)
- 「サービスの必要数を直接調整しない」を選択
- 「次へ」
⇒ 全項目を確認後、「サービスの作成」
4. ECSの起動確認
- ECSダッシュボードから「クラスター」を選択
- 作成したクラスターを選択しダッシュボードを表示
- 左からの2番目のタブの「タスク」を選択
- RUNNING中のタスク名をクリック (一番左)
- 画面中央の「ネットワーク」のパブリックIPをコピー
- コピーしたURLに
:3000
をつけてアクセス
お疲れ様でした。
一通り完了です。
5. ECS Fargateの削除
あえて手順の一つに含めました。
勉強のためにだけ使用したAWSリソースは都度削除しましょう。
勝手に別のリソースを立ち上げている可能性もあります。
注釈解説
:latest
について
(※1)タスク作成時のイメージURI、タグイメージのバージョン管理に使用します。
ECRへイメージをプッシュ時、同じく:latest
を指定することでECRイメージが上書きされます。
その後、サービスを更新すると変更が反映されます。
(※2)タスク作成時のポートマッピングについて
リスナーポート、フォワードポートの番号が異なると、エラーになります。
ホストポートは未定義であるか、ポートマッピングのコンテナポートと一致する必要があります。
参考:タスク定義パラメータ
その他
# ログの確認方法
- 上記起動確認の 1 ~ 4「RUNNING中のタスク名をクリック (一番左)」まで同じ
- タブの一番右にある「ログ」で確認を行えます。
# ECRを使用せず、Docker Hubのイメージを使用する
実はECRにイメージがなくとも、ECS Fargateの起動確認はできます。
今回の記事でわざわざECRにイメージを用意したのは、実際の運用で必ず必要となるからです。
ECRを参照せずにFargateを立ち上げる方法というのはDocker Hubにある公式イメージを使用するなどの方法があります。「2. ECSタスク定義の作成」のコンテナ設定でイメージURIを指定する項目があります。その際、例えば「nginx:latest」などと指定することができます。ECSを立ち上げるとNginxの公式イメージをプルし、起動してくれます。
Discussion