【Amazon ECS】Amazon Elastic Container Service (EC2 Linux + ネットワーキング)を構築してみた

記事タイトルとURLをコピーする

こんにちは!イーゴリです。

前回の記事に続き、今回の記事では、Amazon Elastic Container Service (EC2 Linux + ネットワーキング)をご紹介したいと思います。(ちなみに、次の記事では、サーバーレース(Fargate)方法をご紹介します)

ECSクラスターの作成

[サービス]>[Elastic Container Service]>ECSの[クラスター]>[クラスターの作成]をクリックします。

[EC2 Linux + ネットワーキング]を選択し、[次のステップ]をクリックします。

[クラスター名]を入力します。

[空のクラスターの作成]はFargateのために使用されているため、チェックを入れないまま次に進みます。

[プロビジョニングモデル]で[オンデマンドインスタンス]を選択しますが、[スポット]も選択可能です。

インスタンスタイプやインスタンス数などを選択した後でVPCの構成に移ります。

SSH鍵を選択した上、Networkingの部分に行きます。

新規VPCか既存VPCの2つの選択肢がありますが、今回は既存のデフォルトVPCを選択します。

パブリック IP の自動割り当て及びセキュリティグループのまま[セキュリティグループのインバウンドルール]に進みます。

今回は検証のために使うので、一旦すべてのポートを開放します(0-65535)。

注意:本番環境では0-65535を設定しないでください!

[作成]ボタンをクリックします。

裏でCloudFormationのスタックが作成されます。

しばらく待つとEC2欄で新規2台のEC2が起動されます。

タスク定義の作成

「タスク定義とはなんだろう」と思う方は下記のメモをご参考ください。

blog.serverworks.co.jp

[タスク定義]のタブをクリックし、[新しいタスク定義の作成]をクリックします。

[EC2]を選択した上、[次のステップ]をクリックします。

[タスクロール]はEC2にどのIAMロールをアタッチするかという項目です。仮にEC2がS3とやり取りする場合、S3用のロールを作成し、こちらのパラメーターで選択します。

ネットワークモードはDefaultのまま残しますが、awsvpcモードとの違いについても説明させて頂きます。

下記の画像の通り、DefaultはBridgeモードとなります。

(default)を選択すると、ECS は Docker のデフォルトネットワークモード (Linux on Bridge と Windows の NAT) を使用してコンテナを起動します。

BridgeとはいわゆるDockerのBridgeです。前回作成された2台のEC2で、Docker用の1つの特定ポートが開放され、動的ポートマッピングが使用されます。

awsvpcモードを選択する場合、ENI(Elastic Network Interface = NIC)がコンテナごとに付いて、コンテナごとに特定のIPになります。

制約事項:今回の記事では、t3.microを選んだので、t3.microのスペック上では、ネットワークインターフェイスの最大数が2個のため、awsvpcモードを選ぶと、t3.microで2個のコンテナしか作れないということになりますので、ご注意ください。

下記の公式ページで「ネットワークインターフェイスの最大数」と記載されている箇所がENIの最大数に当たります。

docs.aws.amazon.com

詳しくは下記の公式ページにネットワークモードについての説明がありますので、ご参考ください。

docs.aws.amazon.com

タスクサイズをスキップし、下に進みます。

コンテナイメージを選択するには、[コンテナの追加]をクリックします。

コンテナ名を入力し、[イメージ]でイメージ名及びタグを入力します。

私の場合、DockerHubにあるNGINXのLatestイメージを入力します(nginx:latest)が、Amazon Elastic Container Registry (ECR) にプッシュしたしたイメージも選択が可能となります(例:AWSアカウント番号.dkr.ecr.<AWSリージョン>.amazonaws.com/<app名>:<appバージョン>)

メモリ制限を入力します(私の場合、ハード制限で良いので、そのまま残します)。

[ポートマッピング]の[ホストポート]のところを0に設定すると[ホストポート]が自動的にポートを割り当てられるため、[0]に設定します。[コンテナポート]は外側からリッスンポートとして80を選択します。

[詳細コンテナ設定]を設定せずに[追加]をクリックします。

前の画面に戻りますと、[コンテナの定義]の項目で、設定したコンテナが表示されるので、次は[作成]ボタンをクリックします。

作成されたweb-1のコンテナに基づいて、他のweb2のコンテナを作成したいので、下記の画面の通り、web-1を選択した上、[新しいタスク定義の作成]をクリックし、上記の手順を繰り返しますが、今回はmyapp:v1を使い、80ポートを開放します。

できました!

上記のタスク定義を起動しましょう!

タスク定義の起動

[クラスター ]>[test-cluster]>[タスク]>[新しいタスクの実行]をクリックします。

[EC2]を選択し、[タスク定義]を選択します。

その他の設定をそのまま残します。

補足:

  • タスクの数=コンテナ数
  • 配置テンプレートのデフォルトは[AZ バランススプレッド]=AZごとにコンテナを置くこと

[タスクの実行]をクリックします。

正常性確認

クラスターにある[タスク]タブにてステータスが「PENDING」から「RUNNING」になるまで待機します。

ステータスが「RUNNING」になったら、対象タスクをクリックします。

外部リンクをクリックしますと、NGINXの正常稼働が確認できます。

以上、御一読ありがとうございました。

次の記事↓ blog.serverworks.co.jp

本田 イーゴリ (記事一覧)

カスタマーサクセス部

・2024 Japan AWS Top Engineers (Security)
・AWS SAP, DOP, SCS, DBS, SAA, DVA, CLF
・Azure AZ-900
・EC-Council CCSE

趣味:日本国内旅行(47都道府県制覇)・ドライブ・音楽