LoginSignup
52
32

More than 3 years have passed since last update.

ECSデプロイツールを公開しました

Last updated at Posted at 2018-04-08

概要

AWS ECSを運用するために内製で開発したデプロイツールを公開しました。

リポジトリ

何ができるのか

Slack botに対し deploy と打つと、ECSクラスタに対象となるソースをデプロイします。またコマンドベースのデプロイやGitHubのPushをトリガーとした自動デプロイもサポートします。

機能詳細

  • サービスやタスクスケジューリングのデプロイ、タスク実行をサポート
  • YAMLベースのタスク定義
    • 環境変数に渡した秘匿値の暗号化・復号に対応 (KMS)
  • デプロイ形式
    • Slackを用いた対話形式のデプロイ
    • コマンドベースのデプロイ
    • GitHubのPushをトリガーとした自動デプロイ
  • デプロイ状況を可視化するWebコンソールの提供
  • デプロイコマンドが実行する処理
    • イメージのビルド
    • イメージのプッシュ (ECR)
    • タスクのデプロイ

図解。

Webコンソールはデプロイの状況を可視化します。「誰が」「いつ」「どこに」「何を」デプロイしたか、ひと目で把握することができます。

詳細ページからはデプロイの状況を確認できます。

設定ファイル

デプロイ設定ファイルとタスク定義ファイルを作成する必要があります。詳しくは Wiki を参照してください。

タスク定義ファイル

アプリケーションディレクトリ下に config/deploy/{services}.yml を作成します。名前は何でも構いません。ファイルにはコンテナごとのタスク仕様を定義します。指定可能なパラメータは タスク定義パラメータ と同じです。
環境変数にパスワードなどの秘匿値を渡す場合、KMSで暗号化した値を指定すると良いでしょう。値はデプロイのタイミングで復号され、環境変数として展開されます。

family: sandbox-productiton
task_role_arn: ''
network_ode: bridge
container_definitions:
- name: app
  image: ***.dkr.ecr.ap-northeast-1.amazonaws.com/sandbox-app-production:{{tag}}
  memory: 1024
  port_mappings:
  - container_port: 3000
    host_port: 0
    protocol: tcp
  essential: true
  environment:
  # Private value can be encrypted with KMS
  - name: SECRET_KEY
    value: ${***}
  readonly_root_filesystem: false
  log_configuration:
    log_driver: fluentd
    options:
      fluentd-address: ***:24224
      fluentd-async-connect: "true"
      tag: docker.sandbox-app-production

デプロイ定義ファイル

デプロイルールを定義した config/deploy.yml ファイルを作成します。clusters にアプリケーションのデプロイ先となるクラスタやサービスを定義します。

clusters:
  # クラスタ名
  - name: sandbox
    services:
      # サービス名
      production:
        # タスク定義ファイルの相対パス
        path: ./config/development.yml

        # コンテナごとのビルドファイル指定
        containers:
        - name: web
          build:
            # etc/docker/web/Dockerfileを参照
            context: ../etc/docker/web

デプロイ形式

コマンドベースのデプロイ

対象リポジトリ・クラスタ・サービス (必要があればブランチ) を指定することで、デプロイが始まります。

$ docker-compose run --rm rails thor genova:deploy service -r {repository} -c {cluster} -s {service} -b master

Slackを用いた対話形式のデプロイ

Slack Appをセットアップすることで、deploy コマンドで対話形式のデプロイが始まります。

GitHubのPushをトリガーとした自動デプロイ

Pushイベントをトリガーとして特定のサービスに対し自動デプロイが走ります。

auto_deploy:
- branch: master
  cluster: sandbox
  service: production

この設定は「masterブランチへのPushを検知した時、sandboxクラスタのproductionサービスをデプロイする」という意味になります。また実行結果はSlackに通知されます。

52
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
32