AWS入門 - ECS・Fargate 使ってみる
AWSを使う必要が出てきたので、色々と試してみる。
ここでは、ECS・Fargate を試す。
Amazon Elastic Container Service
ECSとはコンテナクラスターを管理してくれるやつ。
KubernetesのAWS版にあたる。
ECSクラスター
ECSを使う際のサービス単位。
クラスターの中にコンテナを立ち上げていく。
AWS Fargate
ECS自体はコンテナクラスターを管理するための、コンテナ管理サービスである。
なので、ECSをどこで動かすかは選択できる。
ECSを動かす環境として、EC2とFargateを選択することができる。
EC2を選択した場合は各インスタンスのOSアップデートなど、EC2自体の運用が必要となる。
一方で、Fargateを選択した場合は、そういった面倒くさい部分が抽象化され、運用に関する手間が削減できる。
もちろん、抽象化されている分、カスタマイズ性は下がるので、クラスター実行環境に手を入れたい場合はEC2を選択する必要がある。
タスク
ECSにおけるタスクとは、起動するコンテナの情報を定義したもの。
1つのタスクに対し、複数のコンテナを記述できる。
e.g.
{
"family": "webserver",
"containerDefinitions": [
{
"name": "web",
"image": "nginx",
"memory": "100",
"cpu": "99"
},
],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"memory": "512",
"cpu": "256",
}
タスク定義自体は独立してECS上に登録されるため、
1つのタスク定義を元に、複数のECSクラスター上にデプロイすることも出来る。
VPCはタスクをECSクラスター上にデプロイする時点で決められる。
ALBを紐付けるかどうかも、この時点で決められる。
つまり、
タスク定義で、コンテナ(アプリケーション)に関する情報を定め、
デプロイで、対象タスク・ネットワークに関する情報を定め、
それらを元に、ECSクラスター上にリソースを配置する。
ECS・Fargateを使ってアプリを立ち上げてみる
ECRと連携したり、CI/CD設定したり、ログ整えたりと、色々と出来ることは沢山ありそう.
しかし、ここまでの知識で最低限はOKそうなので、アプリを立ち上げてみる。
ECSクラスターを作成する
ECSクラスターを作成する。
クラスター用のVPCも同時に作成しておく。
とりあえずアプリを1つ立ち上げるだけなので、サブネットは1つだけ作っておく。
ECSクラスターと同時にCloudformationも作られている。
作成されたVPCはIGWがアタッチされ、
サブネットにもIGWへのルートが設定されている。
つまり、パブリックサブネットとして作成されている。
タスク定義を作成する
実行環境はFargateを選択する。
OS・CPU・メモリあたりは、適当に設定する。
コンテナイメージはnginxのやつを指定しておく。
そのまま起動しても使えるので動作確認にちょうどよい。
タスクをデプロイする
ECSクラスターとタスク定義が準備できたので、最後にデプロイしてみる。
アプリ(Webサーバー)なので、サービスとしてデプロイする。
まだ、理解しきれていないが、タスクの方は単発で実行するやつだと思う。
まず、先程作成したタスク定義を選択する。
ALBは今回は設定しないので、スキップ。
VPC・サブネットは先程作成したものを選択。
また、80番ポートでnginxが起動するので、セキュリティグループを新規作成し80番ポートからのアクセスを許可しておく。
インターネットからアクセス出来るよう、パブリックIPも有効にする。(今回はALBを作っていないので)
何故かここでSGを新規作成しようとすると、エラーになるので事前にSGを作っておいた。
デプロイが完了したら、タスク詳細のネットワーク情報からパブリックIPが確認できる。
このIPをWebブラウザで開くと、Nginxが立ち上がってることがわかる。
まとめ
コンテナを指定するだけでアプリを立ち上げられるのは良い。
ただし、EC2と同じくVPCが必要になるので、ネットワーク周りを気にする必要があるのは若干面倒くさい。
たぶん、そこらへんを簡単にしたのが AppRunner なんだろうか。
この他にも、ALBを設定したり、CI/CD設定してみたり、ログ転送してみたりと、色々と使ってみようと思う。
Discussion