ECS+EC2で動いているサービスをFargateにのせ替える

AWS Fargate Advent Calendar 2017の15日目です

この記事ではECS+EC2で動いているサービスをECS+Fargateにのせ替えるときにやったことを紹介します

なお、作業にはAWSマネジメントコンソールを使用します

## 現在の構成について


構成としては下記の通り

![basket.png](https://qiita-image-store.s3.amazonaws.com/0/2282/c70e0d77-04e8-2cea-6a4b-5c8da67acf28.png)


現在ECS+EC2で動かしているため、すでにイメージとタスクの登録は完了しています

アプリケーション内で使用するためにRDSとElasticacheと連携しています

## タスク編集

まずタスクを編集します

### 1. `Requires compatibilities` を変更

FARGATEにチェックを入れます

![Screenshot-2017-12-4 Amazon ECS(1).png](https://qiita-image-store.s3.amazonaws.com/0/2282/930f0d85-8714-662d-436f-0f0ef1b5f471.png)

チェックを入れたら警告が出てきます

![Screenshot-2017-12-4 Amazon ECS(2).png](https://qiita-image-store.s3.amazonaws.com/0/2282/2700bef6-d049-d5f6-a50b-7456b8d49554.png)

#### 警告の内容

> The selected network mode is not compatible with Fargate.
> Fargate requires the awsvpc network mode.

`awsvps` にネットワークモードを変えろとのこと

> No Task execution role specified
> Task execution role is required for logging and private image pulls for Fargate tasks. Failure to specify the role may lead to task failure or missing logs.

タスクで `logging` と `private image` を使うんだったらroleを設定しろとのこと

今回のプロジェクトでは private imageを使うので設定します

### 2. ネットワークモードを変更

`awsvpc` を選択します

![Screenshot-2017-12-4 Amazon ECS(2) 2.png](https://qiita-image-store.s3.amazonaws.com/0/2282/6f3c8bce-b4f5-1f00-2794-d5168a256408.png)

### 3. `Task execution role`　を変更

`ecsTaskExecutionRole` を設定しました

### 4. `Task size` を設定

<img width="1030" alt="Screen Shot 2017-12-07 at 20.30.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/2282/d05c1a47-538a-e902-fdcb-4b8c2cce06e9.png">

### 5. 保存

保存します
コンテナの内容については今回特に変更がないのでそのままです

## Fargate用のサービスを追加

サービスを追加します

### 1. 作成ボタンを押す

![Screenshot-2017-12-4 Amazon ECS(6).png](https://qiita-image-store.s3.amazonaws.com/0/2282/0946302d-a9af-9c04-0838-0b85a8172b54.png)

### 2. サービスの設定をする

項目を入力していきます

* `Launch Type` に `FARGATE` を選択します

* タスク定義は先程作成したものを選択します

![Screenshot-2017-12-4 Amazon ECS(8).png](https://qiita-image-store.s3.amazonaws.com/0/2282/de12945c-7c85-de98-c6a4-4c50e4fd1ac2.png)

### 3. ネットワーク構成

VPCとサブネットは適宜設定します

![Screenshot-2017-12-7 Amazon ECS(1).png](https://qiita-image-store.s3.amazonaws.com/0/2282/f1facfa8-b3f7-e030-6395-644e79bc3058.png)

#### セキュリティーグループ設定

セキュリティーグループも適宜設定します
デフォルトでは新規作成になっています
編集を押したら下記画面になります

![Screenshot-2017-12-7 Amazon ECS(2).png](https://qiita-image-store.s3.amazonaws.com/0/2282/a4c351d2-2491-31d4-5fd6-39506a20d3b4.png)

### Elastic Load Balancingを設定

EC2構成のときもElastic Load Balancingを利用していたので、今回も設定します

#### ELBタイプを選択

`Application Load Balancer` を選択します

![Screenshot-2017-12-7 Amazon ECS(5).png](https://qiita-image-store.s3.amazonaws.com/0/2282/ac4ee8aa-7a01-fa73-7b12-e9d315f526ae.png)

### 負荷分散用コンテナの設定

#### ELBへの追加

`ELBへの追加` を選択します

![Screenshot-2017-12-7 Amazon ECS(5) copy.png](https://qiita-image-store.s3.amazonaws.com/0/2282/3c5d85a0-c1e1-07a4-d4f9-782a8d9534be.png)

#### リスナーポートを選択

`80:HTTP` を選択します

<img width="443" alt="Screen Shot 2017-12-07 at 21.48.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/2282/59b96b7a-bf4d-5e57-2b49-68358d4ad0d6.png">

#### ターゲットグループの項目を設定

Fargate用のターゲットグループを設定します

パスパターンは負荷分散の戦略によると思いますが、今回はFargateを使うため `/*` にしました

![Screenshot-2017-12-7 Amazon ECS(6) copy.png](https://qiita-image-store.s3.amazonaws.com/0/2282/47f84624-7066-0149-6741-efa1bc8bf668.png)


`次のステップへ` を選択して次へ進みます

### Auto Scalingの設定

Auto Scalingの設定もできるようですが、私には今のところ必要ないので飛ばしました

![Screenshot-2017-12-7 Amazon ECS(7).png](https://qiita-image-store.s3.amazonaws.com/0/2282/fd76f73e-1171-06cc-3e3d-8893427b488c.png)

### 確認して作成

`サービスの作成` を選択して作成します

![Screenshot-2017-12-7 Amazon ECS(8).png](https://qiita-image-store.s3.amazonaws.com/0/2282/329935ee-78d8-901a-d39d-f8b39cf04f85.png)

## 立ち上がるのを待つ

下記のように状況が `ACTIVE` になるまで待ちます

下のほうのサービスがEC2で動かしていたサービスになります

![Screenshot-2017-12-7 Amazon ECS(7) 2.png](https://qiita-image-store.s3.amazonaws.com/0/2282/e7713412-cc34-4363-4df1-b19b76e84a7a.png)

以上で作業完了です

## 感想

終わってみれば案外簡単でした

これからFargateへのせ替えしようと思っている方の参考になれば幸いです