[AWS] Amazon ECS(EC2タイプ)のちょっと長めのチュートリアル(第7回)

※本記事は Amazon ECS(EC2タイプ)のちょっと長めのチュートリアル( [第1回](https://qiita.com/VA_nakatsu/items/c8a4b24b8cffd0e9047b) , [第2回](https://qiita.com/VA_nakatsu/items/555d75cd8a7ff8584eaf) , [第3回](https://qiita.com/VA_nakatsu/items/62a064c32f147efffe69) , [第4回](https://qiita.com/VA_nakatsu/items/7623653b695d203dcecc) , [第5回](https://qiita.com/VA_nakatsu/items/c550e851d35b92b46ef8) , [第6回](https://qiita.com/VA_nakatsu/items/8e588c693a2f650c2af3) ) の続き(最終回)です。

前回までで、基本的な構築・運用手順は終わりました。

手順はかなり長くなってしまいましたが、これでも端折った機能が多いため、実際にチュートリアルを進めると「ここはデフォルト設定のままだけどどういう意味かな？」と気になる点も出てくるかと思います。最後はそういったポイントについて（ほぼリンク集ですが）まとめておきます。

# サービス・タスクのAuto Scale

チュートリアルではタスクは2つで固定していましたが、Scaling Policyを設定することで自動スケールが可能です。 手順は [Amazon ECSでAuto Scaling](https://aws.amazon.com/jp/blogs/news/automatic-scaling-with-amazon-ecs/) にあります。

また、自動スケールと合わせて行うべき設定としてタスクごとのCPU、メモリ割り当て設定があります。タスク定義内に、タスク全体とコンテナごとの割り当て設定があります。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/11560d91-4fef-870d-b08a-90c2cd4ad4d3.png)|
|:-:|

# クラスター(インスタンス)のAuto Scale

第2回の最後で少し見たように、クラスターのスケールは通常のインスタンスのAuto Scaling Groupと変わりません。
ECS(EC2タイプ)ではここがサービス・タスクのAuto Scaleと連動しないのが辛いところですが、通常のインスタンスと変わらないので [SPOTインスタンスの利用もできる](https://aws.amazon.com/jp/blogs/news/powering-your-amazon-ecs-cluster-with-amazon-ec2-spot-instances/) のはメリットと言えます。

# サービスディスカバリについて

チュートリアルではnginxのコンテナを使ったので、コンテナへのアクセスはELB経由で行いましたが、アプリケーションによってはコンテナに外部から直接アクセスしたい場合もあるかと思います。その場合、コンテナがどこで起動したかを知る仕組みがサービスディスカバリになります。
[具体的な手順はこちら](https://aws.amazon.com/jp/blogs/news/amazon-ecs-service-discovery/) にありますが、仕組みとしては、コンテナが正常起動したらRoute53(プライベートホストゾーン)にAレコードを登録してくれるもので、外部からは同じDNS名でのアクセスが可能となります。

設定個所はサービスの新規作成中「サービスの検出」で、サービスの検出名がDNS名です。この設定は今のところサービス作成後に変更できないため、変更する場合はサービスの再作成になります。

|![13534393235362e706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/f4332af7-4ceb-1373-69fe-30acaffe60da.png)|
|:-:|

# ECSエージェントの更新について

しばらく運用していると、ECSエージェントが最新版でないという警告が出るようになります。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/3fdcc872-2573-54ac-b599-a63ef8e8902d.png)|
|:-:|

[更新手順はこちら](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/agent-update-ecs-ami.html)にあります。ECS-optimized AMI であれば ecs-init パッケージを更新するだけです。

# AMI更新について

ECSエージェントの更新だけでは、インスタンスの再起動やスケール時にまた古いバージョンで起動してしまうため、ECS-optimized AMIが更新された場合などは起動するAMI自体の更新も必要となります。Auto Scaling Groupの起動設定で変更します。

# ECSエージェントの動作設定

[Amazon ECS コンテナエージェントの設定](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs-agent-config.html) にあるように、環境変数を /etc/ecs/ecs.config ファイルに設定することでエージェントの動作設定が可能です。
ECRイメージまわりの設定（イメージをPullするタイミング、自動イメージクリーンアップの頻度）などもここで設定可能です。

# ログ収集について

ログはデフォルトではコンテナ/インスタンスの再起動で消えてしまうため、本番環境では外部に収集する設定が必要となります。ECSのログ収集については検索すると様々な事例が出てきて悩ましいところですが、大きく分けると

- CloudWatchに送る
- ログドライバーが対応しているfluentdやsplunkに直接送る
- 標準出力やファイルに出力して別のログ収集ツールで収集

の3パターンです。検索すれば使い慣れたツールの事例がいくつか出てくると思いますので、調べてみて下さい。

ログドライバーの設定自体はタスク定義のコンテナ設定の中にあります。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/a884f3e1-609b-c784-9f5e-14ee4b83b06c.png)|
|:-:|

主な注意すべき設定は以上となります。

# 最後に

チュートリアルで作成した環境を削除します。
サービスとインスタンスは毎回スケールするようにしていましたが、それだけではELBの料金が継続してかかり続けるため、削除しておくようにします。

- サービスとインスタンス数を0にする

毎回実行していた手順と同じです。[第4回の後半](https://qiita.com/VA_nakatsu/items/7623653b695d203dcecc#ecs-cliコマンドのインストール) などを参照して下さい。

- クラスター削除

クラスターの右にある削除ボタンで削除します（サービスとインスタンスが起動しているとここでエラーになる場合があるので事前に0にしておきます）。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/47c3415c-954a-82a8-14ae-17b024dfa08f.png)|
|:-:|

多少時間がかかる場合がありますが待つと削除が完了します。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/97101fb6-335e-2867-1085-5440adf30b0d.png)|
|:-:|

- ELB削除

クラスターの削除では一緒に削除されないため、別に削除します。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/09319ba3-3c27-f086-df9c-ed3fdbb32057.png)|
|:-:|

ターゲットグループも個別に削除します。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/a4e7efc1-36f9-33d0-77f4-dde811b90421.png)|
|:-:|

- その他のリソース

ここまでで残るものは VPC、サブネット、ロール、ポリシ です。これらは課金されないので残しても構いませんし、他のリソースと共有している場合は消さないように注意して下さい。
このチュートリアルでしか使っていないことが明らかな場合は削除しておきます。

# Link

- [Amazon ECSでAuto Scaling](https://aws.amazon.com/jp/blogs/news/automatic-scaling-with-amazon-ecs/)
- [Amazon EC2 スポットインスタンスを利用した Amazon ECSクラスターの起動](https://aws.amazon.com/jp/blogs/news/powering-your-amazon-ecs-cluster-with-amazon-ec2-spot-instances/)
- [Amazon ECS サービスディスカバリ](https://aws.amazon.com/jp/blogs/news/amazon-ecs-service-discovery/)
- [Amazon ECS コンテナエージェントの Amazon ECS-optimized AMI での更新](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/agent-update-ecs-ami.html)
- [Amazon ECS コンテナエージェントの設定](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs-agent-config.html)
- [Amazon ECS(EC2タイプ)のちょっと長めのチュートリアル(第1回)](https://qiita.com/VA_nakatsu/items/c8a4b24b8cffd0e9047b)
- [Amazon ECS(EC2タイプ)のちょっと長めのチュートリアル(第2回)](https://qiita.com/VA_nakatsu/items/555d75cd8a7ff8584eaf)
- [Amazon ECS(EC2タイプ)のちょっと長めのチュートリアル(第3回)](https://qiita.com/VA_nakatsu/items/62a064c32f147efffe69)
- [Amazon ECS(EC2タイプ)のちょっと長めのチュートリアル(第4回)](https://qiita.com/VA_nakatsu/items/7623653b695d203dcecc)
- [Amazon ECS(EC2タイプ)のちょっと長めのチュートリアル(第5回)](https://qiita.com/VA_nakatsu/items/c550e851d35b92b46ef8)
- [Amazon ECS(EC2タイプ)のちょっと長めのチュートリアル(第6回)](https://qiita.com/VA_nakatsu/items/8e588c693a2f650c2af3)