27
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS ECS Fargate ALBを設定する

Last updated at Posted at 2021-07-31

初めに

以下を参考に Fargate で ALB を設定する手順を確認しました。

Docker イメージを作成する

この章は以下のドキュメントを参考にしています。

Node.js をインストールします。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
nvm install node

package.json ファイルを作成します。

package.json
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <first.last@example.com>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}

パッケージをインストールします。

npm install

service.js を作成します。

service.js
'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

動作確認をします。

node server.js

Dockerfile を作成します。

Dockerfile
FROM node:12

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

.dockerignore ファイルを作成します。

.dockerignore
node_modules
npm-debug.log

ビルドしてこのイメージを ECR にプッシュします。

docker build . -t test-user/node-web

Fargate の設定

クラスターを作成する

サービスで ECS を選択し、「クラスターの作成」をクリックします。

1.png

「ネットワーキングのみ」を選択します。

2.png

「クラスター名」を入力し、「作成」をクリックします。

3.png

タスク定義を作成する

左のナビゲーションペインから「タスク定義」を選択します。

4.png

「新しいタスク定義の作成」をクリックします。

5.png

「Fargate」を選択します。

6.png

タスク定義名を入力します。タスクロールは「なし」を選択します。

7.png

初めてタスク定義を作成する場合はタスクの実行ロールは「新しいロールの作成」、2 回目以降であれば「ecsTaskExecutionRole」などのタスク実行ロールを選択します。

8.png

9.png

タスクサイズを選択します。メモリは「0.5 GB」、vCPU は「0.25 vCPU」を選択します。

10.png

「コンテナの追加」をクリックします。

11.png

コンテナ名を入力し、イメージの入力部分に使用する ECR リポジトリの URI を貼り付けます。ポートはアプリケーションがリッスンするポート番号を入力します。その後、右下の「追加」をクリックします。

12.png

コンテナの追加完了後、下までスクロールし「作成」をクリックします。

ALB を作成する

サービスで EC2 を選択し、左のナビゲーションペインから「ロードバランサー」をクリックします。その後「ロードバランサーの作成」をクリックします。

17.png

Application Load Balancer の「作成」をクリックします。

18.png

名前を入力し、スキームは「インターネット向け」を選択します。ロードバランサーのプロトコルは、今回は Fargate に ALB の設定をすることが目的なので HTTP を選択します。

19.png

アベイラビリティゾーンを選択します。

20.png

セキュリティ設定の構成では、先ほどの設定で HTTPS が選択されていないので、以下のメッセージが表示されます。「次の手順」をクリックします。

20.1.png

なお、HTTPS を選択している場合、ここで以下のようにサーバー証明書を選択します。

21.png

セキュリティポリシーは「ELBSecurityPolicy-2016-08」が推奨されています。

互換性のために ELBSecurityPolicy-2016-08 ポリシーをお勧めします。

セキュリティグループを選択します。

22.png

ターゲットグループを作成します。以下のドキュメントの注意に従ってターゲットの種類は IP を選択します。

重要

サービスのタスク定義で、awsvpc ネットワークモード (起動タイプが Fargate の場合に必要) が使用されている場合は、instance ではなく、ip をターゲットタイプとして選択する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 インスタンスではなく、Elastic Network Interface に関連付けられているためです。

23.png

「次の手順」をクリックします。

24.png

何も設定せずに「次の手順」をクリックします。

25.png

確認画面で設定を確認し、「作成」をクリックします。

サービスを作成する

作成したクラスターを選択し、以下の「作成」をクリックします。

13.png

サービスの設定は以下のように行います。

14.png

デプロイメントは「ローリングアップデート」を選択し、「次のステップ」をクリックします。

15.png

VPC 、サブネット、セキュリティグループを選択します。パブリック IP の自動割り当ては「ENABLED」を選択します。パブリック IP の自動割り当てを「DISABLED」にすると、以下のエラーでイメージをプルできませんでした。

ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed

今回はパブリックサブネットでタスクを実行するので、以下に記述があるようにアウトバウンドネットワークのためにパブリック IP が必要です。

パブリックサブネットで Fargate 起動タイプを使用してタスクを実行している場合は、タスクを起動する際、自動割り当てパブリック IP に [ENABLED] を選択します。これにより、イメージを取得するためのアウトバウンドネットワークアクセスをタスクに付与できます。

なお、パブリック IP を使用しない場合は、エンドポイントを使用することでプルが可能になります。詳細は以下のドキュメントに記載されています。

16.png

「Application Load Balancer」を選択し、先ほど作成した ALB を選択します。

26.png

「ロードバランサーに追加」をクリックします。

27.png

作成したターゲットグループ名を選択します。その後、下までスクロールし「次のステップ」をクリックします。

29.png

「次のステップ」をクリックします。次の確認画面では「サービスの作成」をクリックします。

30.png

タスクのステータスが RUNNING に変わったら、以下の ALB の DNS 名をブラウザの URL 部分に張り付けます。

32.png

以下のように表示されていることを確認します。

33.png

以下のようにロードバランサーのターゲットグループに実行タスクが追加されていることが確認できます。

36.png

参考記事

27
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?