ども、おひさしブリーフ、かっぱです。
tl;dr
ecs-cli を触っていて、立ち上げたコンテナインスタンスに ssh でアクセスしたい時に ssh の config ファイル作ったりするのが面倒だなあと思ったので rake コマンド一発で config ファイルを生成するタスクを書いてみた。あと、せっかくなので生成した config ファイルから ssh アクセスするタスクも書いてみた。
Rakefile
インスタンスの情報を取得してくるあたりはかなりやっつけ。
demo
タスク一覧
% rake -T No such file or directory @ rb_sysopen - config rake ecs:instance:down # Terminate ECS Container Instances rake ecs:instance:launch # Launch ECS Container Instances rake ssh:config:generate # Generate ssh config file
ECS コンテナインスタンスの起動
% rake ecs:instance:launch
以下のように ECS コンテナインスタンスが CloudFormation によって起動される。
INFO[0000] Created cluster cluster=sample-locust INFO[0001] Waiting for your cluster resources to be created INFO[0001] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0063] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0124] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0184] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0246] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
ECS コンテナインスタンスの情報を取得して ssh config ファイルを生成
インスタンスが起動したら以下のように ssh config ファイルを生成。
% rake ssh:config:generate > config
config ファイルは以下のように生成されている。
% cat confg
Host amazon-ecs-cli-setup-sample-locust_000
Hostname ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com
Host *
Port 22
IdentityFile path/to/keyname.pem
User ec2-user
もう一度タスク一覧
% rake -T rake ecs:instance:down # Terminate ECS Container Instances rake ecs:instance:launch # Launch ECS Container Instances rake ssh:config:generate # Generate ssh config file rake ssh:login:amazon-ecs-cli-setup-sample-locust_000 # Access to amazon-ecs-cli-setup-sample-locust_000
ECS コンテナインスタンスに ssh アクセス
以下のように rake タスクの一つとしてコンテナインスタンスにアクセス。このあたりは Serverspec の Rakefile を参考にさせて頂いた。
% rake ssh:login:amazon-ecs-cli-setup-sample-locust_000 ssh -F config amazon-ecs-cli-setup-sample-locust_000 (snip) __| __| __| _| ( \__ \ Amazon ECS-Optimized Amazon Linux AMI 2016.03.a ____|\___|____/ For documentation visit, http://aws.amazon.com/documentation/ecs 1 package(s) needed for security, out of 1 available Run "sudo yum update" to apply all updates. [ec2-user@ip-10-0-1-214 ~]$ sudo docker version Client: Version: 1.9.1 API version: 1.21 Go version: go1.4.2 Git commit: a34a1d5/1.9.1 Built: OS/Arch: linux/amd64 Server: Version: 1.9.1 API version: 1.21 Go version: go1.4.2 Git commit: a34a1d5/1.9.1 Built: OS/Arch: linux/amd64
ECS コンテナインスタンスの削除
一応、立ち上げたばっかりだけどコンテナインスタンスを削除。
% rake ecs:instance:down
以下のように CloudFormation のスタックが削除される。
ecs-cli down --force INFO[0001] Waiting for your cluster resources to be deleted INFO[0001] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS INFO[0061] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS (snip)
おわり
結局、まったく ECS 関係無くなってしまったけど、未来の自分が ssh config に手動でアクセス先を追加していたりする際の参考になれば幸い。頑張れ、未来の自分。