ども、Rake 教信者のかっぱです。

tl;dr

ECS とか ECR を弄っている際にクラスタ作ったり、Task Definition を更新したり、Docker イメージをビルドしたり、色々なタスクを個別に叩くのはちょっと面倒だなあと思ったので Rakefile に纏めてみた。

Contribute to ecs-demo development by creating an account on GitHub.

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 サマサマ。とても雑だけど、個人的にはこれでデモとか検証がかなり捗るようになった気がする。

以上、メモでした。

元記事はこちら

ECS と ECR をデモをやり易くする為に Rakefile を作ったメモ