ども、Rake 教信者のかっぱです。
tl;dr
ECS とか ECR を弄っている際にクラスタ作ったり、Task Definition を更新したり、Docker イメージをビルドしたり、色々なタスクを個別に叩くのはちょっと面倒だなあと思ったので Rakefile に纏めてみた。
github.com
詳しくは README を。先日の「第9回 コンテナ型仮想化の情報交換会@福岡」のデモでもちょっと使った。
demo
タスク一覧
rake clean # Remove any temporary products rake clobber # Remove any generated file rake ecr:get_login # Get login infomation rake ecr:login # Docker Registry にログインする rake ecs:as:get_group_name # Auto Scaling グループ名を取得する rake ecs:as:put_down_policy # スケールインする為のポリシーを設定する rake ecs:as:put_up_policy # スケールアウトする為のポリシーを設定する rake ecs:as:update_as_group # Auto Scaling Group の設定を更新する(max_size を任意の値に変更する) rake ecs:cluster:configure # ECS クラスタを初期化する rake ecs:cluster:down # ECS クラスタを停止して削除する rake ecs:cluster:launch # ECS クラスタを起動する rake ecs:cluster:list:clusters # ECS クラスタの一覧を確認する rake ecs:cluster:list:instances # ECS コンテナインスタンスの一覧を確認する rake ecs:cluster:scale # ECS クラスタ内のコンテナインスタンス数を調整する(環境変数 INSTANCE_COUNT で起動するインスタンス数を指定する) rake ecs:compose:service:ecs-app:ps # Service Task ecs-app のコンテナ一覧を確認する rake ecs:compose:service:ecs-app:scale # Service Task ecs-app をスケールアウトする(環境変数 DESIRE_COUNT で起動するコンテナ数を指定する) rake ecs:compose:service:ecs-app:up # Service Task ecs-app を起動する rake ecs:docker:ecs-app:build # ecs-app のコンテナイメージをビルドする rake ecs:docker:ecs-app:push # ecs-app を ECR に push する rake ssh:config:generate # ssh config を生成する rake ssh:config:init # 作成済みの ssh config を初期化する
準備
config.yml を適宜設定する。
:ssh_user_name: "ec2-user" :key_path: "keyname.pem" :key_name: "keyname" :ecs_cluster_name: "ecs-demo" :region: "ap-northeast-1" :instance_type: "t2.micro" :instance_count: 1 :desire_instance_count: 3 :vpc_id: "vpc-xxxxxxxx" :subnets: - "subnet-xxxxxxx" - "subnet-xxxxxxx" :azs: - "ap-northeast-1a" - "ap-northeast-1c" :sg_ids: - "sg-xxxxxxxx" :ecs: :cluster_name: "xxxxxxxxx" :service: :deployment_max_percent: 100 :deployment_min_healthy_percent: 0 :ecr: :registry: "xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com" :login_file: "login_file"
ecs-cli と AWS SDK for Ruby もインストールしておく必要がある。
あとはよしなに…
この Rakefile で出来ることは以下の通り。
- ECS クラスタの作成、削除(ecs-cli を利用している)
- ECS コンテナインスタンスへの SSH ログイン(要 SG 設定)
- 作成したクラスタの AutoScaling の設定変更、CloudWatch Alarm の設定変更
- ECS Service の起動、スケールアップ、ダウン
- Docker コンテナのビルド、ECR へのログイン、イメージのプッシュ
ECS と ECR を弄る際に行うようなタスクはそこそこ出来る(と思う)。
最後に
ecs-cli のようなコマンドラインツールと Ruby のコードが一緒に書ける Rakefile サマサマ。とても雑だけど、個人的にはこれでデモとか検証がかなり捗るようになった気がする。
以上、メモでした。