🍙

ECS Fargateを立ち上げる

2022/05/05に公開

環境 / 前提

AWSアカウント
ECRにイメージがある状態

ECR イメージの準備

こちらの記事を参考にしてください。
DockerイメージをAWS ECRにプッシュする

本記事ではReactアプリの初期ファイルをイメージ化したものを起動確認に使用しました。
すでに準備している方はそちらをご利用ください。

ECSについて

AWSのDockerコンテナサービスです。
調べるとさまざまな解釈で説明がされています。初心者の方にとっては初めての概念、用語が出てきて理解に時間がかかります。一度、本記事を通して起動確認まで行ってから、じっくりと調べていただくことをお勧めします。

この3つの用語だけは外せないので紹介します。

  • タスク/タスク定義: コンテナの設定を行います。
  • サービス: タスクの割り当て、オートスケーリングの設定や、VPCなどの設定を行います。
  • クラスター: サービスの集合体です。

手順

  1. ECSクラスターの作成
  2. ECSタスク定義の作成
  3. ECSサービスの作成
  4. ECS Fargate起動確認
  5. ECS Fargateの削除

1. ECSクラスターの作成

ECSクラスターとはタスクを配置する「EC2インスタンス群」のことです。ただし、どのEC2インスタンスで起動しているかが隠蔽されているため、SSH接続して操作することができません。今回はFargateという起動タイプを使用します。

  1. ECSダッシュボードから「クラスターの作成」を選択
  2. ネットワーキングのみ(Fargateを使用)を選択
  3. クラスターに名前を付ける
  4. VPCを作成 (任意)
  5. 作成

    ※ 作成完了まで2分程度待ちます。CloudFormationテンプレートを自動生成する処理が走るようです。

2. ECSタスク定義の作成

タスクはDockerコンテナに相当します。どのようにタスクを起動するかを設定します。つまり docker-compose.yml のようなものです。JSON形式で設定されます。

  1. ECSダッシュボードから「タスク定義」を選択
  2. 「新しいタスク定義の作成」を選択
  3. 「FARGATE」を選択
  4. タスク定義名を記入
  5. タスクロールは「ecsTaskExecution」(デフォルト)
  6. オペレーティングシステムファミリー:「Linux」
  7. タスクメモリ:任意のメモリ
  8. タスクCPU:任意のCPU
  9. コンテナの追加
    • コンテナ名:任意のコンテナ名
    • イメージ:ECRのURIをコピー (タグは :latest を指定 ※1)
    • ポートマッピング:ポート3000番を指定します (※2)
    • あとは空欄のまま「追加」
  10. 作成

3. ECSサービスの作成

ECSサービスとはサービスは、ALBとAutoScaling Groupに紐付けられた「タスク群」です。サービスの作成時にタスク定義を付与する必要がありますが、サービスはタスクの上位概念というわけではありません。タスクはタスク単体でECSクラスターへ配置することができるからです。

  • サービスの設定
  1. ECSダッシュボードから「クラスター」を選択
  2. 作成したクラスターを選択しダッシュボードを表示
  3. 一番左のタブの「サービス」を選択
  4. 「作成」を選択
  5. タスク定義: 「2. ECSタスク定義の作成」で作成したタスク定義を選択
  6. リビジョン:「〇〇 (latest)」
  7. サービス名:任意のサービス名
  8. タスクの数:「1」
  9. その他の項目は初期値のまま「次へ」
  • ネットワーク構成
  1. クラスター VPC:任意のVPCを選択 (「1. ECSクラスターの作成」時にVPCを新規作成した方はそのVPCを選択)
  2. サブネット:必要な分だけ選択
  3. セキュリティグループの「編集」を選択
    • インバウンドルールを追加:カスタムTCP / Anywhere / 3000番
  4. その他の項目は初期値のまま「次へ」
  • Auto Scaling (オプション)
  1. 「サービスの必要数を直接調整しない」を選択
  2. 「次へ」

⇒ 全項目を確認後、「サービスの作成」

4. ECSの起動確認

  1. ECSダッシュボードから「クラスター」を選択
  2. 作成したクラスターを選択しダッシュボードを表示
  3. 左からの2番目のタブの「タスク」を選択
  4. RUNNING中のタスク名をクリック (一番左)
  5. 画面中央の「ネットワーク」のパブリックIPをコピー
  6. コピーしたURLに:3000をつけてアクセス

お疲れ様でした。
一通り完了です。

5. ECS Fargateの削除

あえて手順の一つに含めました。
勉強のためにだけ使用したAWSリソースは都度削除しましょう。
勝手に別のリソースを立ち上げている可能性もあります。

注釈解説

(※1)タスク作成時のイメージURI、タグ:latestについて

イメージのバージョン管理に使用します。
ECRへイメージをプッシュ時、同じく:latestを指定することでECRイメージが上書きされます。
その後、サービスを更新すると変更が反映されます。

(※2)タスク作成時のポートマッピングについて

リスナーポート、フォワードポートの番号が異なると、エラーになります。

ホストポートは未定義であるか、ポートマッピングのコンテナポートと一致する必要があります。
参考:タスク定義パラメータ

その他

# ログの確認方法

  1. 上記起動確認の 1 ~ 4「RUNNING中のタスク名をクリック (一番左)」まで同じ
  2. タブの一番右にある「ログ」で確認を行えます。

# ECRを使用せず、Docker Hubのイメージを使用する

実はECRにイメージがなくとも、ECS Fargateの起動確認はできます。
今回の記事でわざわざECRにイメージを用意したのは、実際の運用で必ず必要となるからです。
ECRを参照せずにFargateを立ち上げる方法というのはDocker Hubにある公式イメージを使用するなどの方法があります。「2. ECSタスク定義の作成」のコンテナ設定でイメージURIを指定する項目があります。その際、例えば「nginx:latest」などと指定することができます。ECSを立ち上げるとNginxの公式イメージをプルし、起動してくれます。

Discussion