AWS ECSを使ってとりあえずnginxをデプロイしてWebブラウジングする

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

今回はAWSのコンテナサービスであるECSを見よう見まねで使用してみたいと思います。
具体的にはECSでnginxコンテナをデプロイして、Webブラウザでアクセスしてみたいと思います。

# 用語
## AWS ECS 
Elastic Container Serviceの略。
説明は公式に委ねますが、AWS側でデプロイとかスケーリングとか色々マネージングしてくれる便利なやつ位のイメージしかありません。今後頭の中のイメージを具体化していけば良いと思っています。

>コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを容易にするフルマネージドコンテナオーケストレーションサービスです。アプリケーションと必要なリソースを記述するだけで、Amazon ECS が柔軟なコンピューティングオプションで、アプリケーションを起動、モニタリング、スケーリングし、アプリケーションが必要とする他の AWS サポートサービスと自動的に統合します。カスタムのスケーリングルールやキャパシティルールの作成などのシステムオペレーションを実行し、アプリケーションログやテレメトリからデータを確認し、クエリします。

https://aws.amazon.com/jp/ecs/

## AWS Fargate
今回のnginxコンテナデプロイにはFargateと呼ばれるサーバレスコンピューティング技術を使っています。
これも詳細は公式サイトに委ねます。コンテナ向けのLambdaくらいのイメージしか今はありません。

>AWS Fargate は、サーバーレスで従量制料金のコンピューティングエンジンであり、サーバーを管理することなくアプリケーションの構築に集中することができます。AWS Fargate は、Amazon Elastic Container Service (Amazon ECS) と Amazon Elastic Kubernetes Service (Amazon EKS) の両方との互換性を備えています。 OCI 準拠のコンテナイメージを選択し、メモリとコンピューティングリソースを定義して、サーバーレスコンピューティングでコンテナーを実行します。複数の CPU アーキテクチャとオペレーティングシステムがサポートされているため、さまざまなアプリケーションでメリットを享受できます。

https://aws.amazon.com/jp/fargate/

## Amazon ECR Public Gallery
コンテナと言えばDockerですが、Dockerでコンテナをデプロイする時、コンテナイメージはDocker Hubからpullされます。
![AWS ECS-ページ1.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ea306b6c-f903-e272-ac22-534747bdaa5f.png)


https://hub.docker.com/

AWS ECSの場合、Docker Hubの代わりにこのECR Public Galleryを使うッぽいです。
恐らくDocker Hubと連携も普通に出来るんだと思いますが、今回はこっちから引っ張ってきました。
![AWS ECS-ページ2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c23ab3ff-de74-2f69-8c0a-a602ad2cb330.png)

https://gallery.ecr.aws/

# 構築時参考にしているサイト
UIが今のものと違うッぽいですが参考になりました。
ありがとうございます。

https://dev.classmethod.jp/articles/amazon-ecs-entrance-1/

# 構築
## task作成
ECSのサイトを開く。左のタスク定義を押下する。
![image (47).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/b95b4bf0-1b34-72b0-79e4-a20fe75ecacb.png)
新しいタスク定義の作成を押下する。
![image (48).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/0f1a740f-9d57-eb3f-7b97-f923e10494de.png)
今回は以下のタスクを作成しました。
- タスク名をtest-task。
- コンテナをFargateで作成。
- イメージURIは[ECR Public Gallery](https://gallery.ecr.aws/nginx/nginx)から取得。
![screencapture-ap-northeast-1-console-aws-amazon-ecs-v2-create-task-definition-2023-10-04-23_58_07 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/21b75e9d-c693-a3f8-0354-fb82960726ee.png)
正常に作成されると以下の様に表示されます。
![image (49).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ddd223b2-de62-b1d3-bbac-0afaf937bf71.png)

## クラスタ作成
クラスターを押下後、クラスターの作成を押下する
![image (50).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3536a572-d34e-25b6-32e7-a1c5cf44df96.png)
今回はtest-clusterというクラスタ名で作成しています。
![screencapture-ap-northeast-1-console-aws-amazon-ecs-v2-create-cluster-2023-10-05-00_00_52 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3e236a45-d5fb-c21b-dc3c-e6504d59bdc2.png)
正常に作成されると以下の様に表示されます。
![image (51).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/39d68123-3eab-07b7-9cec-1232af303acd.png)

## クラスタにタスクを実行させコンテナをデプロイし、Webブラウジングする
上記の画面のクラスタ名がリンクになっている為、押下する。
タスクタブをアクティブにして、新しいタスクの実行を押下する。
![image (52).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/94160b85-327f-b1e4-60bf-219242f6c00a.png)
以下の様に設定を入れました。
- デプロイ設定でタスクを選択。ファミリー欄で作成したタスクを選択。
- セキュリティグループで設定を変更。デフォルトのままだとhttp接続するために修正する必要が出てきたので、初めから接続出来るように変更してます。
![screencapture-ap-northeast-1-console-aws-amazon-ecs-v2-clusters-test-cluster-run-task-2023-10-05-00_11_50 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/be62c48e-b1c7-981f-2a8a-2699fc8d7615.png)
プロビジョニングが走ります。
![image (53).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/cb84040e-30c3-0792-1c12-49c15af544de.png)
暫くすると実行中になるはずです。タスク名がリンクになっていると思うので、押下します。
![image (54).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/e846f030-9783-915f-d8d7-b6bcbac044bd.png)
パブリックIPが表示されていると思います。これがコンテナに外部から接続する為のIPアドレスになります。
今回はhttp://18.183.22.85になります。
![screencapture-ap-northeast-1-console-aws-amazon-ecs-v2-clusters-test-cluster-tasks-3db727baf84044418e2eef0cb235f024-configuration-2023-10-05-00_13_16 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/150b298a-8a60-4c2f-9f12-ac09352c93e3.png)
接続出来ました。とりあえず動かせたので一安心。コンテナは割と好きで得意な技術なのですが少々癖があるなと思いました。
![image (55).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/8a433afa-c6ba-25ce-027a-3b1d96726946.png)