30
15

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 1 year has passed since last update.

[AWS ECS] FargateとELBを使ってWebサイトを公開する

Posted at

この記事について

ECS FargateとELBを利用してWebサイトを公開する手順を記載します。
ECSとFargateについての説明はこちらの記事をご参照ください。

また、以下のURLより動画でこちらの手順を視聴することもできます。
https://www.youtube.com/live/0NR8SiYvNCI?feature=share

この記事ではNGINXをインストールしたコンテナをFargateで動かして、ELBで負荷分散させるという最近だとオーソドックスな構成になっているWebサイトを実装します。

image.png

やること

手順は以下の通りになります。

  • 0 NWリソース作成
  • 1 コンテナイメージの作成、ECRへPUSH
  • 2 ALBの作成
  • 3 クラスターの作成
  • 4 タスク定義の作成
  • 5 サービスの作成

0 NWリソース作成

以下のネットワークリソースを作成します。

  • VPC
  • インターネットGW
  • サブネット(ルートテーブル含む)
    • Public x 2
      • デフォルトルート : インターネットGW
    • Private x 2
      • デフォルトルート:NAT GW
  • NAT GW
  • セキュリティグループ
    • ALB用
      • Ingress : 80 : ALL
      • Egress : ALL : ALL
    • ECS用
      • Ingress : 80 : from ALB sg
      • Egress : ALL : ALL

image.png

1 コンテナイメージの作成、ECRへPUSH

AWSマネージメントコンソールにログインします。

ECSの画面からRepositoriesを選択して、「リポジトリを作成」をクリックします。
(リポジトリは公開する用途ではないため、プライベートにします)

リポジトリ名をtest-webとします。それ以外はデフォルトで「リポジトリを作成」をクリックします。

リポジトリができたことを確認してから、ローカル環境などでDockerイメージを作成します。

Dockerfile
FROM nginx:latest
COPY index.html /usr/share/nginx/html
EXPOSE 80
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>test-web</title>
</head>
<body>
  <h1>Welcome to Test Website!!</h1>
  <a>This is website on ecs fargate</a>
</body>
</html>

イメージをビルドします。

❯ docker build -t test-web .

イメージが作成されたことを確認します。
(IMAGE IDは後から必要になるので控えておいてください)

❯ docker image ls test-web
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
test-web     latest    39fc2c76a938   2 minutes ago   142MB

ECRにイメージをプッシュします。 参考

# ECRにログイン
> aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

# ECRにプッシュするためのタグを付与(控えておいたIMAGE IDに対してタグを付与)
❯ docker tag 39fc2c76a938 xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-web:1.0

# ECRにプッシュ
❯ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-web:1.0

2 ALBの作成

AWSマネジメントコンソールからEC2の画面に遷移し、ロードバランサーから「Create load balancer」をクリックします。

以下のようにALBを作成します。

項目 備考
ロードバランサー名 test-web-alb
スキーム インターネット向け
IPアドレスタイプ IPv4
VPC 作成していたVPC
マッピング 作成していたパブリックサブネット2つ
セキュリティグループ 作成していたSG

同時にターゲットグループも作成します。
(この時点ではターゲットの登録は行いません、ECSサービス作成時に行います)

項目 備考
ターゲットタイプの選択 IPアドレス 重要
ターゲットグループ名 test-web-tg
プロトコル:ポート HTTP:80
VPC 作成していたVPC

3 クラスターの作成

以下の通りクラスターを作成します。

項目 備考
クラスターテンプレート ネットワーキングのみ
VPCとサブネット 作成していたVPCとプライベートサブネット2つ
クラスター名 test-web-cluster

4 タスク定義の作成

以下の通りタスク定義を作成します。

項目 備考
起動タイプ FARGATE
タスク定義ファミリー test-web-taskdef
コンテナ 名前 test-web-container xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test-web:1.0
コンテナ イメージURI ECRにプッシュしたURI
コンテナ ポート/プロトコル 80/TCP
アプリケーション環境 Fargate
CPU .25vCPU タスクに使用されるCPU
メモリ .5 GB タスクに使用されるメモリ容量
タスクロール なし
タスクの実行IAMロール デフォルト(ecsTaskExecutionRole)
ログ収集の使用 チェックなし ログの収集はしない

5 サービスの作成

項目 備考
コンピューティングオプション 起動タイプ
起動タイプ/プラットフォームのバージョン FARGATE/LATEST
アプリケーションタイプ サービス
オペレーティングシステムファミリー Linux
タスク定義 ファミリー test-web-taskdef
サービス名 test-web-service
サービスタイプ レプリカ
必要なタスク 1
VPCとサブネット 作成していたVPCとプライベートサブネット2つ
セキュリティグループ 作成していたSG
パブリックIP 割り当てない
ロードバランシング ロードバランサーの種類 ALB
ロードバランシング ロードバランサー test-web-alb 作成していたロードバランサー
ロードバランシング ロードバランス用のコンテナ test-web-container:80:80
ロードバランシング リスナー 80:HTTP
ロードバランシング ターゲットグループ名 test-web-tg

動作確認

ALBのエンドポイントにアクセスします。

image.png

Webサイトが公開できていることを確認してください。

30
15
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
30
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?