エンジニアブログです。Engineering部DevOpsチームに入社したid:itkqです。いうことで、この記事では、私が入社してから中心となって進めた、ECSサービスのデプロイの改善について書いています。バクラクのインフラ私が所属するバクラク事業部では、バクラク請求書をはじめとする、BtoB向けのSaaSを提供しています。Fargateにデプロイされています。今後の事業成長を支えられるようなソフトウェアアーキテクチャと周辺の仕組みが発達してきています。以下の記事で述べられているように、モノレポかつサービスが多数存在します。tech.layerx.co.jpDevOpsチームの目線では、ECSサービスが50+存在する、マイクロサービスのCI/CDをいい感じにする必要があります。Actionsを大いに活用したCIOpsを行っています。今回は、特にECSサービスのデプロイを改善した話をします。既存のECSデプロイの仕組みアプリケーションコードとインフラコードともに、自動生成を積極的に取り入れています。独自のサービス定義ファイルがあり、コード生成コマンドを発行すると、Goやprotoのコードだけでなく、TerraformやECSタスク定義のコードが生成されます。ここでは特にインフラコードの自動生成について説明します。前提インフラはTerraformで管理されており、コードはgithub.comでホスティングしています。CodeBuildで構成されています。Terraformの実行基盤の概念図ECSサービスをデプロイするECSサービスとそのCIを立ち上げるには以下の手順が必要です。「サービス」はモノレポにおけるconnectサービスのことを指します。サービスを定義する(サービス定義は独自のものです。Group、MySQLユーザなどのリソースを作成サービス定義を元に自動生成を行い、ECSタスク定義の生成元となるCUE*2ファイルとデプロイ用のGHAワークフローを作成。ECSサービスをデプロイ。上述した構成では、特に以下の問題がありました。Managerで管理しています。採用し、これを中心としたECSデプロイ基盤を構成しました。既存の課題は以下のように解決できます。よりシークレットARNを参照可能ECSデプロイの実行は、これまでと変わらずGHAです。ECSデプロイの動作概念図ecspressoの採用理由ECSデプロイを行うツールはいくつか存在します。比較検討の詳細は省略しますが、ecspressoは既存の課題を解決するだけでなく、特に以下の嬉しいポイントがあると考えています。Docsの両方を活用しています。議論の余地が少ないものはADRとして残す場合が多いです。今回のecspresso移行は、事前にEnablingチームとDevOpsチームと話したところ特に議論が無かったため、ADRを最初に記述しました。既存のECSデプロイの仕組みは素朴なものだったので、特に移行が難しいポイントはありませんでした。あり、既存のECSサービスから設定ファイルを生成できるため、初期設定はかなり楽に済みました。requestのマージでデプロイが発火します。実行し、コメントするようにしています*8。request上で確認できます。データベースマイグレーションも同様にdry-runとコメントします。あり、これをデプロイ時に実行しています。実行することで、例えば初回デプロイの際に、シークレットの箱は存在するものの値が入ってない状況を検出できます。これにより、デプロイ後にECSタスクが起動と終了を繰り返す状況を事前に回避できます。他の細かい工夫を以下に列挙しました。アプリケーションコードの変更がmainブランチにpushされると、開発環境への自動デプロイが走るように設定しています。サービス数が多いとデプロイ時間がかさみ、GHAの課金額が増加してしまいます。使ってkayac/ecspressoの実行バージョンを指定し、開発環境などの部分的なアップデートや全体反映の作業を楽にしていますecspressoがJsonnetをネイティブサポートしているので、設定ファイルにはJsonnetを使っています。ネイティブサポートのおかげで、何もせずともコードコメントや抽象化が捗っています。現時点で、近々やりたいことは次の2点があります。ECS定義ファイルの生成するCUEファイルをJsonnetに置き換えるCUEにはファーストクラスのバリデーションや定義ファイルからのスクリプト実行など、良いところがあると理解していますが、学習コストの観点から、Jsonnetと共存させる積極的な理由はないと考えています。一部はJsonnetに移行し始めていますユニバーサルバイナリを活用したデプロイメントの集約ECSサービスが多いと単純にコストが増加しがちなため、サービスを集約することでECSサービス数を圧縮できるのではないかと目論んでいますまとめECSのデプロイツールとしてecspressoを採用し、これまでの問題点を解消しつつ、工夫した点を紹介しました。今後も改善を続け、安全に素早く変更をリリースできるCI/CD基盤を整えていきます。ecspresso本体への貢献も積極的に行っていきたいです。機械学習チームのテックリードを務めております機械学習エンジニアの島越(@nt_4o54)です。Firehoseを使用して、Snowflakeへストリームデータをロードする方法を紹介します。