ども、おひさしブリーフ、かっぱです。

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 に手動でアクセス先を追加していたりする際の参考になれば幸い。頑張れ、未来の自分。

元記事はこちら

ssh の config ファイルを書き出したり、書きだした config ファイルを利用して ssh でアクセスする Rakefile のサンプル feat. ecs-cli