🐳

fargatecli でコンテナを立てる

2020/12/20に公開

fargatecli は 第1回 AWS Fargate かんたんデプロイ選手権 にて紹介されてる、Fargateにアホほど簡単にデプロイできるCLIツール。ほーん(はなほじ)で放置してましたが、ふと動かしてみました。

https://github.com/awslabs/fargatecli

準備

fargatecli は何でもは作れない。いくらか面倒みてあげる必要があります。

VPCを準備する

fargatecliはVPC一式は作ってくれません。クラメソさんが、最強の勉強用VPCを作るCloudFormationを用意してくれてますので、これでVPCを用意します。リージョンは好きなの使ってください。

https://dev.classmethod.jp/articles/create_nat_gateway/

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