こんにちは!イーゴリです。
前回の記事に続き、今回の記事では、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が起動されます。
タスク定義の作成
「タスク定義とはなんだろう」と思う方は下記のメモをご参考ください。
[タスク定義]のタブをクリックし、[新しいタスク定義の作成]をクリックします。
[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の最大数に当たります。
詳しくは下記の公式ページにネットワークモードについての説明がありますので、ご参考ください。
タスクサイズをスキップし、下に進みます。
コンテナイメージを選択するには、[コンテナの追加]をクリックします。
コンテナ名を入力し、[イメージ]でイメージ名及びタグを入力します。
私の場合、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都道府県制覇)・ドライブ・音楽