AWS ECSのタスク定義、クラスタ作成、サービス作成

## はじめに
Windows11Pro+WSL2+Ubuntu+Docker環境を構築し、
VS CodeからUbuntuに接続しプログラム作成、コンテナイメージ作成、
AWSのECRへプッシュ、ECSへのデプロイ・接続確認までを行います。

1. [WSL2のインストール](https://qiita.com/hiropon1839/items/126de61987a0daa8267d)
2. [Visual Studio CodeのインストールとUbuntu on WSL2への接続](https://qiita.com/hiropon1839/items/0f48d85733ad0c85b3b1)
3. [Docker Desktopのインストール、Dockerfile作成、コンテナビルドと修正](https://qiita.com/hiropon1839/items/2af467975fb31bbb2819)
4. [AWS CLIインストール、IAMユーザー作成、アクセスキー作成、AWSリソースへのアクセス](https://qiita.com/hiropon1839/items/cd9d1e049ac5d0c07a64)
5. [AWS ECRリポジトリ作成、Ubuntu on WSL2からECRへのプッシュ](https://qiita.com/hiropon1839/items/52442eb55a58c0b409a0)
6. **[AWS ECSのタスク定義、クラスタ作成、サービス作成](https://qiita.com/hiropon1839/items/d443d0073f12819f1a88) (今回の記事)**

## 要約
最小限の設定でECRのコンテナイメージをECS Fargateにデプロイし、
ブラウザから疎通確認できるところまでを目指します。


## タスク定義の作成
AWS -> Elastic Container Service -> タスク定義 へ遷移します。
「新しいタスク定義の作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/80f11ba6-4a0a-d73c-74a0-c47712dd0d4b.png)

タスク定義ファミリー：`test-task-def`とします。
コンテナ詳細 -> 名前：`mayapp`とします。
コンテナ詳細 -> イメージURI：`111111111111.dkr.ecr.ap-northeast-1.amazonaws.com/myapp:v2`とします。
「111111111111」部分は、ご自身のAWSアカウントIDに読み替えてください。
`myapp:v2`は
[AWS ECRリポジトリ作成、Ubuntu on WSL2からECRへのプッシュ](https://qiita.com/hiropon1839/items/52442eb55a58c0b409a0)
でECRにプッシュしたコンテナイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/d8711170-e02c-126c-d311-892b0f983205.png)
ポートマッピング等、その他の設定は不要です。
「次へ」をクリックします。


アプリケーション環境：`AWS Fargate(サーバーレス)`
オペレーティングシステム/アーキテクチャ：`Linux/X86_64`
タスクサイズ -> CPU：`.25 vCPU`
タスクサイズ -> メモリ：`.5 GB`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/59754993-41a4-4879-7739-e1eb8348b246.png)

タスク実行ロール：`ecsTskExecutionRole`(デフォルト)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/f3444f35-7bf4-aab5-2507-04d2761bfed1.png)

ログ収集は今回不要なのでチェックを外します。「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/1d75442e-608e-a4b1-b80b-e6375d8f4ddb.png)

「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/07136653-b3b3-2f71-c134-c9f216a20d3c.png)


## クラスターの作成
「クラスターの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/87462d18-e162-8c2e-23b7-f5bc3392f80b.png)

クラスター名：`test-cluster`とします。
VPC、サブネットを選択します。ここではVCP、サブネットの作成方法は省略します。
今回は簡単にブラウザからコンテナへ直接接続ができるように、パブリックサブネットを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/855e4b0b-ec27-0dac-206a-f90acc419be7.png)

「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/39478808-204c-eef7-c516-7ef628c5daae.png)


## サービスの作成

上記で作成した`test-cluster`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/9037e97f-81eb-9122-f819-121cf7a1df38.png)

サービスの「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/244ddf8e-164b-b45c-8bdb-23e147aa3f9d.png)

コンピューティングオプション：`起動タイプ`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/884cbf87-5c2d-fa49-0fc4-1b4360469b93.png)

アプリケーションタイプ：`サービス`
ファミリー：`test-task-def`
サービス名：`test-service`
必要なタスク：`1` と設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/52ba22b4-63f0-c8e8-260b-7fc92a2a7887.png)

パブリックIPがオンになっている状態で、「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/01773971-a29b-b848-136c-e01b71ae9348.png)


## 疎通確認
サービスの作成が完了しました。
「test-service」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/019d5aa8-8e73-6643-2f32-ea61784cd33a.png)

タスクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/38a8329b-182b-a861-1982-31809bea1c83.png)

「オープンアドレス」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/a75c65fe-dac1-3d1a-5313-d9daa71a351b.png)

`http://xx.xx.xx.xx/`という形でブラウザが開きますが、
今回のコンテナは`5000番ポート`でリッスンしているため、
`http://xx.xx.xx.xx:5000/`
という形にURLを変更します。



[Docker Desktopのインストール、Dockerfile作成、コンテナビルドと修正](https://qiita.com/hiropon1839/items/2af467975fb31bbb2819)
でローカル環境で表示された画面と同じ画面が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/6a3a0fb0-6190-04b5-5a95-c68a00fbace2.png)

:::note info
接続できない場合は、セキュリティグループの設定を確認してください。
サービスに紐づいているセキュリティグループは下記画面で確認できます。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/f61fcb03-89a6-4dd3-c7e6-3cdec3d4656f.png)



## サービス、クラスターの削除
検証で作ったAWSのリソースはこのままにしておくと料金が発生し続けるため、削除しましょう。

サービスの画面で「サービスを削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/ac9e983e-768b-1e43-835b-edf85fa39e3c.png)

「serviceを強制削除」にチェックを入れ、テキスト入力フィールドに「削除」と入力し、「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/83d7c964-dd14-fe53-e32f-78c9c683a181.png)

「クラスターの削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/14970331-7616-3e2a-7dfd-d7b15c758d35.png)

「delete test-cluster」を入力し、「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/fce95bf0-cb36-97b3-d66e-1288e51d4822.png)

## ECRに保管されたコンテナイメージの削除
ECR -> リポジトリ画面で、
「myapp」にチェックをいれ、「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/cc06e8cc-96ca-816c-071a-ef7b093f6be6.png)

「delete」を入力し、「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488334/14404256-49ab-df0d-1d7a-ebfe55123155.png)

リポジトリが削除されることで、リポジトリ内のコンテナイメージも削除されます。

## さいごに
ECSを設定し、ブラウザからコンテナのコンテンツにアクセスできました。

AWSリソースの削除漏れが原因で想定外の金額を請求される場合があります。
AWS Budgetsでアラームを作成し、設定した金額を超過したら気づけるようにしておきましょう。