fargatecli でコンテナを立てる
fargatecli は 第1回 AWS Fargate かんたんデプロイ選手権 にて紹介されてる、Fargateにアホほど簡単にデプロイできるCLIツール。ほーん(はなほじ)で放置してましたが、ふと動かしてみました。
準備
fargatecli は何でもは作れない。いくらか面倒みてあげる必要があります。
VPCを準備する
fargatecliはVPC一式は作ってくれません。クラメソさんが、最強の勉強用VPCを作るCloudFormationを用意してくれてますので、これでVPCを用意します。リージョンは好きなの使ってください。
FrontendSubnet1, 2のIDと、ApplicationSubnet1,2のIDをメモっておきます。
ALBにつけるセキュリティグループを用意する
fargatecliはセキュリティグループは作ってくれません。作ります。いんたーねっとからALBの80にアクセスできるように開けておきます。これは無理にインターネットから接続を許可する必要はなく、ご自宅のIPアドレスからだけとかで開けておけば十分です。
コンテナにつけるセキュリティグループを用意する
fargatecliはセキュリティグループは作ってくれません。作ります。ALBのセキュリティグループIDから、コンテナの80にアクセスできるよう、開けておきます。
ECSにクラスタを作る
fargatecli はECSクラスタは作ってくれません。作ります。
$ aws ecs create-cluster --cluster-name nginx-cluster
fargatecliをインストールする
go get すると fargatecli というコマンド名でバイナリが生成されます。
$ go get github.com/awslabs/fargatecli
$ which fargatecli
fargatecli で立てる
fargatecli では、oneshotな Task, 立てっぱにする Service, 外部に公開するLB, LBにつけるCertificateを管理することができます。ここではNGINXをパッと立てることで、クソ簡単な雰囲気を見てください。
fargatecli でALBを作る
lbコマンドで、ALBを構成できます。
$ fargatecli lb create nginx-lb \
--port 80 --scheme internet-facing \
--subnet-id subnet-0807a5c3c2e826742,subnet-0d6b6251136c18fa0 \
--security-group-id sg-0b21077fb303c2e2a
[i] Created load balancer nginx-lb
成功していれば、ALBの作成が始まります。STATUS が Active になるのを待ちます。
$ fargatecli lb list
NAME TYPE STATUS DNS NAME PORTS
nginx-lb Application Provisioning nginx-lb-845291675.us-east-1.elb.amazonaws.com HTTP:80
変なところの何もないALBです。AWS CLIやAWSマネコンからも、ふつうにALBとして存在してます。
$ aws elbv2 describe-load-balancers --names nginx-lb
fargatecli でコンテナを立てる
ようやくコンテナ立ちます。
CLIパラメータ多いです。ECSクラスタ名、コンテナを立てるVPCサブネットID、コンテナに付けるセキュリティグループID、マシンリソース、起動するコンテナ数、コンテナイメージ、開けるポート、関連付けるALB名を指定します。
$ fargatecli service create nginx-service \
--cluster nginx-cluster \
--subnet-id subnet-0f53ebfa6d0c7a323,subnet-0b37fdb04471d9495 \
--cpu 256 --memory 512 --num 2 \
--image nginx:stable --port 80 \
--security-group-id sg-04834761e4cb48b21 \
--lb nginx-lb
[i] Created service nginx-service
cluster指定で以下のように起動状況を眺めることができます。
$ fargatecli service list --cluster nginx-cluster
NAME IMAGE CPU MEMORY LOAD BALANCER DESIRED RUNNING PENDING
nginx-service nginx:stable 256 512 nginx-lb 2 0 2
RUNNINGになったら、ALBのURLにアクセスすることで、NGINXの初期ページが見えます。今回はHTTPSを組んでないので、HTTPでアクセスしてください。
fargatecli でコンテナイメージを差し替える
お仕事で使ってれば、新たなバージョンのコンテナイメージをデプロイすることもありましょう。 nginx:stable を、いかにもワザとらしいですが nginx:latest に差し替えます。
$ fargatecli service deploy nginx-service \
--cluster nginx-cluster \
--image nginx:latest
[i] Deployed nginx:latest to service nginx-service
$ fargatecli service list --cluster nginx-cluster
NAME IMAGE CPU MEMORY LOAD BALANCER DESIRED RUNNING PENDING
nginx-service nginx:latest 256 512 nginx-lb 2 2 0
こんなふうに簡単にデプロイできます。
fargatecli で後片付け
Serviceは、まずゼロ台に落として、ゼロ台になったら削除できます。
$ fargatecli service scale nginx-service "0" \
--cluster nginx-cluster
[i] Scaled service nginx-service to 0
$ fargatecli service destroy nginx-service \
--cluster nginx-cluster
[i] Destroyed service nginx-service
ALBも削除できます。
$ fargatecli lb destroy nginx-lb
[i] Destroyed load balancer nginx-lb
どの程度使っていいのか?
以上のように、ECS も Fargate も何もわからんところから、とにかくコンテナを立てられるのは最高です。コンテナイメージのデプロイ以外にも、README.mdを読むと、Fargateのスケールアップ、スケールアウト、再起動もできたり、一連の運用シナリオをカバーできてそうです。
しかし fargatecli のコミットログを眺めると、めっちゃ活発に開発されてるわけでもなさそうで、長い目ではちょっと不安があります。お仕事で面倒みてるプロダクトのCDパイプラインにガッツリ組み込むと、突如として動かなくなる気がしてなりません。そこからForkして一蓮托生する根性があるなら使ってよさそうです。
お勉強用途や、新規プロダクト立上げ時くらいに、便利に使える今のうちに使って、ecspresso や docker-compose 、Copilot などで立上げられるよう逃げ支度をする程度がよいのかもしれません(酷い)。
Discussion