ECS Fargateでwebページを開く手順まとめ

## はじめに
ECRのリポジトリにあるイメージからwebページを公開する方法はいくつかありますが、ECS Fargateを使用したwebページ公開方法を試してみたいと思います。
いくつか記事を見たりしましたが、手順通りにしてもECSが起動しない、ページが開けないなどありました。
今回は、確実に誰でもECSを立てることができるように説明していきたいと思います。

## 全体の構造
ECRにあるイメージ使用して、ECSを立てます。
ECSのTaskがECRイメージのURL情報が載ったものです。
ECSのクラスターのServiceからTask情報を基に、コンテナを作成、起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/06287a56-3fd7-00a2-cec4-4f1b7fb10318.png)

## 作成方法
1.ECRのリポジトリにイメージをpushする
2.VPCを作成する
3.ECRのイメージを基に、ECSのTaskを定義する
4.ECSのクラスターを作成する
5.ECSのサービスを作成する
6.webページを開く

## 1.ECRのリポジトリにイメージをpushする
ECRのリポジトリ作成方法等はこちらを参照ください。

https://qiita.com/shinry/items/d47ea4c52dd7a5366228

ECRにpushするイメージの`Dockerfile`と`index.html`は以下です。

```dockerfile:Dockerfile
FROM httpd:2.4
COPY ./index.html /usr/local/apache2/htdocs/
```

```html:index.html
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <title>ECS</title>
</head>

<body>
    <h1>ECSのテストページです</h1>
</body>

</html>
```
イメージがECRのリポジトリにpushされていれば完了です。

## 2.VPCを作成する
### VPCを作成
VPCの作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/c10185aa-71d8-acc8-7e08-42c55c24199b.png)

VPCなどで設定は以下のように行います。
- 名前タグの自動生成→ecs-test
- IPv4 CIDR ブロック→10.0.0.0/16
- IPv6 CIDR ブロック→IPv6 CIDR ブロックなし
- アベイラビリティゾーン (AZ) の数→2
- パブリックサブネットの数→2
- プライベートサブネットの数→2
- NAT ゲートウェイ→なし
- VPC エンドポイント→なし
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/3975162d-52f5-4fa4-7192-801777e4136c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/907305d2-ae41-d5aa-d749-e6228334f73d.png)

VPCを作成をクリック

### ECS用のセキュリティグループを作成
基本的な詳細
- セキュリティグループ名→ecs-security-group
- 説明→ecs security group

インバウンドルール
インバウンドルールを設定し、自分のIPアドレスのみアクセスを許可します。
- タイプ→カスタムTCP
- ポート範囲→80
- ソース→マイIP

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/8d0aa903-d5d7-4c00-9be1-8868ad829ec9.png)
セキュリティグループを作成をクリック

これでVPCの設定は完了です。

## 3.ECRのイメージを基に、ECSのTaskを定義する
ECSで「新しいタスク定義の作成」を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/8f7a5ce7-a599-a4f4-78bf-ab4130aa22fe.png)

タスク定義の設定では任意のタスクの名前を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/59a45728-f7e0-f8af-f8c9-8a9e937ca783.png)

インフラストラクチャの要件では以下のように設定します。
- 起動タイプ→AWS Fargate
- OS、アーキテクチャ、ネットワークモード→Linux/X86_64
- タスクサイズ→CPU：.5vCPU, メモリ:1GB
- タスク実行ロール→新しいタスクロールの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/b3a03915-97fb-c3c0-a879-3ca4f49aea09.png)

コンテナ1ではECRのイメージを指定します。
- コンテナの詳細
    - 名前: ecs-container
    - イメージURI: ECRのイメージURLを指定
他の設定はデフォルトで大丈夫です。

イメージURLは「URLのコピー」をクリックしてコピーし、貼り付けてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/aabf1893-0fb1-f4cd-da50-3d52afcbd51b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/9bdec925-eab1-5b40-e17d-ba05e979412c.png)

ログ収集は必要に応じてチェックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/9b8fb30c-4c64-59aa-51d0-23e75465eb8c.png)

以上の設定を行い、作成をクリック
これでタスク定義は完了です。

## 4.ECSのクラスターを作成する
クラスターの作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/4bf4db29-5bf6-2fae-cab2-e52c43dd147d.png)

クラスター設定
- クラスター名: ecs-cluster
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/4d7c3cb9-a8bd-0be9-1c55-710d3ed51180.png)

インフラストラクチャ
- AWS Fargate(サーバーレス)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/389c0dae-9a93-3a51-4cc6-18c1efdcdcc3.png)

以上の設定を行い、作成をクリック
これでクラスターの作成は完了です。

## 5.ECSのサービスを作成する
作成したクラスターをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/c083cd77-78b9-4ddf-e166-06b911f03214.png)

サービスの作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/64835a9e-0b5d-56c5-ce69-e573c9ae6e35.png)

環境はデフォルトで特に変更しなくてOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/014ffcdc-a1df-5769-3c22-82b011735f3e.png)

デプロイ設定
- アプリケーションタイプ→サービス
- タスク定義
    - ファミリー→先ほどタスク定義で作成したものを選択、リビジョンは最新
    - サービス名→ecs-service
- サービスタイプ
    - レプリカ
- 必要なタスク→1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/93fa6f41-0070-9d80-be94-8e63c02644c1.png)

ネットワーキング
- VPC→作成したVPCを選択
- サブネット→どちらもpublicサブネットを選択します
- セキュリティグループ→既存のセキュリティグループを使用
    - 作成したecs用のセキュリティグループを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/9a23f34f-7634-a91b-70b9-f8ad6e4313ac.png)

以上の設定を行い、作成をクリック

## 6.webページを開く
先ほど作成したサービスのタスクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/50cade84-74de-3b08-3753-53aed54b99ed.png)

設定のパブリックIPのオープンアドレスをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/6061a24f-1c62-18ac-a435-21a49fc58530.png)

テストページに「ECSのテストページです」と表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/2edbbfde-1788-29fd-c05f-5968f81882b8.png)

## 作成したものを削除
webページの表示ができたら、不要な料金発生を防ぐため作成したものを必要に応じて削除してください。

## 終わりに
ECSでwebページを表示してみました。
VPCの設定関連を間違えるとECSが起動できないので、注意しながら設定を行うのが良いです。
参考になれば幸いです。