ECRからイメージをpullしてFargateにコンテナデプロイ

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

前回Cloud9で作ったDjangoアプリをコンテナイメージに変換し、それをECRにpushしました。
今回はこの続きで、ECRからイメージをpullしてコンテナアプリとしてDjangoで作ったWebアプリをデプロイしていきたいと思います。

前回の記事は以下となります。

https://qiita.com/ohtsuka-shota/items/670d457e30b25ad4dcc0

全体の流れは以下を参照ください

https://qiita.com/ohtsuka-shota/items/db74a418dabc261d9126

# 環境イメージ

![aws-django01-ページ7.drawio (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/fb1de0b7-04d5-e2e1-7c24-2e1446554b80.png)

# 構築
## Fargate(ECS)用のアクセスキー/シークレットアクセスキーを作成する
IAMユーザを作成してアクセスキーとシークレットアクセスキーを取得します。
作成手順はCloud9で環境を作ったときと同じです。今回はqiita-ecsユーザを作成しました。

![Untitled (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a3ed0ba6-9fb5-1988-377a-a58b9aa06e29.png)

具体的な手順は以下を参照ください。

https://qiita.com/ohtsuka-shota/items/32435454b9135bb3be2f#access%E3%82%AD%E3%83%BC%E3%81%A8secret-access%E3%82%AD%E3%83%BC%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B

## ECS環境を構築する
### タスク作成
ESCのタスクを以下のパラメータで作成します。
- タスク定義：qiita-ecs-task
- 起動タイプ：Fargate
- タスク実行ロール：新しいロールの作成
- コンテナ1
    - 名前：django
    - イメージURI：ECRで確認したURI
    - コンテナポート：80
    - 環境変数
        - AWS_ACCESS_KEY_ID：IAMで生成したもの
        - AWS_SECRET_ACCESS_KEY：IAMで生成したもの

![screencapture-ap-northeast-1-console-aws-amazon-ecs-v2-create-task-definition-2024-05-10-17_18_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/144a5094-6756-abcd-b7be-96c2933d9b86.png)
作成されたことを確認します。タスク実行ロールを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/76d3ed46-22aa-e3a0-b463-e1de2ea6fc72.png)
S3にファイルをアップロードするための権限を追加します。今回は雑にS3FullAccessを追加しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/7112fbb6-f0bf-16b4-3782-49520a35fe81.png)

### クラスターを作成
以下のパラメータでクラスターを作成します。
-クラスター名：qiita-ecs-cluster

![screencapture-ap-northeast-1-console-aws-amazon-ecs-v2-create-cluster-2024-05-10-17_25_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/167a5879-baa1-3767-eb71-24bbc4814db7.png)
作成したクラスタを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/6bb0d287-d580-f330-2e33-b6d7b1496568.png)
タスクをクラスタに紐づけしていきます。
タスクタブを開いて新しいタスクの実行を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a868e9bb-10aa-44d1-76a6-90a1e47ff6bb.png)
以下のパラメータで作成しました。
- デプロイ設定：サービス
- ファミリー：作成したタスク名(リビジョンは1になると思います。私は何度も作り直しているので7になってます。)
- サービス名：qiita-ecs-django-service
- セキュリティグループ：新しいセキュリティグループ
    - セキュリティグループ名：qiita-ecs-django-sg
    - インバウンドルール：カスタムTCP-8080-0.0.0.0/0


![screencapture-ap-northeast-1-console-aws-amazon-ecs-v2-clusters-qiita-ecs-cluster-run-task-2024-05-10-17_33_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ab480c05-f031-551b-b1ee-736eb492ee06.png)
タスクが作成されたら、タスク欄のリンクを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/91cdef05-7509-0064-1492-36952300eaba.png)
パブリックIPを控えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d093323a-11e0-04cb-d365-5094bf29890f.png)

## テスト
http\://先ほど控えたIPアドレス:8080を任意のWebブラウザに打ち込み、アクセスします。
アクセス出来たら適当なファイルを選択しアップロードしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d9108deb-b361-04ca-5e51-c0e5f4146791.png)
S3にアクセスしてアップロードが出来ていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3a15f491-45fb-d573-a55c-f19bf3da73e8.png)
メール通知が飛んできていることも確認しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/9abac471-a02b-a865-0175-60f7e332ac31.png)