はじめに
インフラをAWSのEC2からECSに切り替えたサービスがありました。以降デプロイ時間が伸びてしまい開発効率が落ちてしまう問題が発生しました。そこでデプロイを短くしようと試みたので方法をまとめます。
行ったこと
当たり前かも知れませんが、まずCircleCIのパイプラインから各Jobの実行時間を調べました。Jobの詳細を見ることでStepsとしてJob内の処理も確認できます。
上記調査からデプロイ時の時間の掛かっている処理やボトルネックがないかを確認しました。
対策
具体的に行った対策は下記の2つです。
- 同時実行
- Jobの統一
対策の詳細
1. 同時実行
ビルドしたDockerイメージをECRにプッシュする処理を同期的に行っていたました。その処理を同時実行で並列にしました。これまではJobには切り出されていませんでしたが、Job内のStepsの中で同期的に行われていました。
2. Jobの統一
workspaceを使ってJob間でデータを共有している処理が複数ありました。データ共有の処理で1〜2分かかっていたのでJobを統一し短縮しました。
備考
DLC Docker Layer Cacheを使用しようと考えましたが既に実装されていました。DLCは料金がかかりますが、有効な手段かと思います。
まとめ
CircleCIのデプロイ時間を短くすると聞いて、最初はハードルが高かったですが理解してみると面白く、理解しやすい部分もありました。開発効率を上げられることにも繋がるので機会があればまた挑戦してみたいです。
最後に
私の働いている会社で経験の有無を問わず採用を行っています。
興味のある方は是非カジュアル面談から応募してみてください!