こんばんは、ラクスでインフラを担当しているakiponxです。
今年はECS Fargateをがっつり触ったのでこの記事を書こうと思います。
最初とっかかりはじめた時に用語などがわけわからんかったのでとりあえずこれからFargate触るよ。ってい人向けに簡単に基本用語をまとめていこうと思います。
目次
- ECS Fargate って?
- 基本用語
- その他
ECS Fargate って?
AWSが提供しているマネージドコンテナオーケストレーションサービスです。
ECSにはEC2タイプとFargateタイプがあります。
EC2タイプとFargateタイプ(ファーゲート)の違い
EC2タイプを使ったことがないのでいまいちわからないですが、大きな特徴しては
インスタンスを気にする必要がない ことです。
EC2の場合、多分どこのAZに何台展開してこのEC2にコンテナを起動させて…
みたいなことを考えないといけない気がするのですが、FargateではどこのAZにコンテナを起動するのか?
を設定に書くだけで勝手に起動してくれます。
例えば
- ap-northeast-1a , ap-northeast-1c, ap-northeast-1d のどこかに2つコンテナを起動
というような設定を書けば、AZを分散させて2つコンテナを起動してくれます。
EC2を管理しなくていいのはいいですね!
基本用語
- タスク定義 (task definition)
- サービス (service)
- クラスタ (cluster)
この3つは最低限必要です。
タスク定義
タスク定義の設定内容は
- コンテナイメージの指定 (複数コンテナイメージを設定可能)
- 環境変数(envファイルの指定、引数で渡す値)
- ホスト、コンテナのLISTENポート
- CPU、メモリの割り当て
上記を設定します。
サービス
サービスはタスク定義で設定したコンテナ群をどこで起動するか?を設定します。
- ネットワーク
- サブネット
- LB
- 起動数
- オートスケール
を主に設定します。
クラスタ
サービスをまとめたものです。
主にどこのVPCに所属するかを決めるだけです。
ほとんどはタスク定義、サービスの設定が肝になります。
イメージ的には↓のような感じ
短いと怒られそうなので余談。
実際にFargateを触ってサービスを作ったときの実体験をもとにちょっと書こうかと思います。
コンテナの構成管理
コンテナを運用するにあたって思うことは、構成管理をコード化しないときつい
流行りの IaaC ってやつですね。
AWSサービスをコード化するのにあたっておすすめなのが
- Terraform
- CloudFormation (CFn)
の2つです。
僕の場合はTerraformを採用しました。
CFnだと作成済みのリソースをCFnに取り込めないものがあり、急いでいるときに手で作ってしまったものがインポートできなくなるのがつらいなーと思ったため、今回はTerraformで書きました。
コード化するとマジで楽です。ただ、コード化するのは地獄でした。
コンテナのログ
コンテナが死ぬとログもロストするため、ログを外部に転送する必要があります。
デフォルトでCloudWatchLogs(CWL)に転送されるようになっているはずですが、CWLはびっくりするくらい見ずらい。
そこで開発チームにコンテナの中にFilebeatを入れてもらい、
Filebeat → Logstash → ElasticSearch ← kibana
という感じでKibanaでログが見えるようにしてもらいました。
という感じで文字数足りたかな…
怒られたら怒られたときに考えます。