Da Vinci Studio Blog

株式会社 Da Vinci Studio は 2023 年 7 月に株式会社 Zaim と統合し、株式会社くふう AI スタジオになりました

Chat デプロイツール gocat のご紹介

Da Vinci Studio インフラ基盤部 SRE チームの林田です。
今回は社内で利用している Chat デプロイツール「gocat」について紹介致します。

github.com

「gocat って何やねん??」という方のために簡単に説明致しますと、、、
「Slack で コンテナのデプロイや Lambda の実行を行えるようにするツール」となります。

どんなことが出来るの?

  1. Docker イメージを、AWS EKS 上で稼働しているサービスにデプロイ
  2. Docker イメージを、AWS ECS 上で稼働しているサービスにデプロイ
  3. AWS Lambda 関数の実行
  4. Docker イメージの変更を自動検知してオートデプロイ
    これらの処理を、Slack bot に「deploy staging」や「deploy production」のようにメッセージを送るだけで実行することが出来ます。

それの何がいいの?

gocat がないとき~~('_')
Developer「新しく作った Docker イメージをデプロイしたいな、、しかしやり方がわからん、、インフラ基盤部の方よろ~~」
インフラ基盤部「ごめ~~ん、今忙しいっす~~」
Developer「ええ~~~じゃあいつならいけんだよっ」
ゴニョニョ....

対して、gocat があるとき~~('ω')
Developer「よっしゃ新しい Docker イメージ出来たからデプロイ、デプロイ」
インフラ基盤部「Zzz...」
Developer「気にせず、Slack で自分の好きな時にデプロイイイイイイ!!!!!!」

業務効率は歴然。所謂デプロイ職人さんも不要となるわけです。
素晴らしい。

1. Docker イメージを、AWS EKS 上で稼働しているサービスにデプロイ

ここからは各機能の詳細を説明致します。
最初に EKS から。
まず大前提として、Da Vinci Studio では EKS 上で動かしているサービスは ArgoCD を使って継続的デプロイを行っています。

argo-cd.readthedocs.io

図にすると ↑ のような感じになります。

  1. Developer が GitHub 等のリポジトリにアプリケーションコードを push する。
  2. AWS Codebuild 等の CI ツールが実行され Docker イメージのビルドが行われ新しいタグが付与される。
  3. ビルドされた Docker イメージ及びタグが ECR に push される。
  4. Developer が Slack bot に対してデプロイ命令を出す。
  5. gocat にデプロイ命令が伝達され、インフラコード(kubernetes の manifest)の Docker イメージタグを更新する。
  6. ArgoCD がイメージタグの更新を検知し、Pod への反映を行う。

のような流れになります。

2. Docker イメージを、AWS ECS 上で稼働しているサービスにデプロイ

次に ECS。
こちらも大前提として、Da Vinci Studio では ECS 上で動かしているサービスはデプロイツールである hako を lambda 関数にインストールしてデプロイを行っています。

github.com

図にすると ↑ のような感じになります。
1.~4. EKS の場合と同じ。
5. gocat にデプロイ命令が伝達され、予め登録されていたイメージタグと ECR の最新のイメージタグとを比較し変更があるならコンテナのデプロイを行う。
のような流れになります。

3. AWS Lambda 関数の実行

次に Lambda。
こちらは EKS や ECS の場合に比べると非常にシンプルです。

図にすると ↑ のような感じになります。

  1. Developer が Slack bot に対して invoke 命令を出す。
  2. gocat に invoke 命令が伝達され、lambda 関数を実行する。

のような流れになります。

4. Dockerイメージの変更を自動検知してオートデプロイ

こちらはとても便利な機能でして、ECR に新しいイメージを push すると、Slack でデプロイ命令を送らなくっても gocat が自動的に変更を検知してデプロイを実行してくれる機能になります。
頻繁にアプリケーションコードの更新が行われるサービスなどでは、とても有効な機能となります。

図にすると ↑ のような感じになります。

  1. Developer が GitHub 等のリポジトリにアプリケーションコードを push する。
  2. AWS Codebuild 等の CI ツールが実行され Docker イメージのビルドが行われ新しいタグが付与される。
  3. ビルドされた Docker イメージ及びタグが ECR に push される。
  4. gocat がタグの更新を自動検知し、先述の各デプロイフローが実行される。
    のような流れになります。

最後に

この度は Da Vinci Studio 社内で大活躍しているデプロイツール「gocat」について紹介しました。
弊社では数多の WEB サービスを運用しておりますが、日々我々がどのようにデプロイ業務を行っているか感じて頂けたのではないかと思います。
Da Vinci Studioでは、働く仲間を募集しています! 興味のある方は こちら か recruit@da-vinci-studio.net までご連絡ください。