トラブルシューティング

環境ごとに設定値が漏れるのを防ごう

設定はなぜ管理しにくいのか? 毎回のデプロイ時に感じていた根本的な問題の一つが設定です。 私たちの会社ではSpring Bootを利用しており、デプロイ環境ごとに設定ファイルが異なる部分はSpring Cloud Configを使って管理しています。 一般的にはSpringではapplication.ymlを通じて設定を管理しますが、根本的な問題はまさにこの設定ファイルの反映です。 我が社の場合は次のような順序でデプロイが行われ、環境が上のようにdev、qa、stage、productionに分かれており、各環境ごとに設定ファイルが異なります。 問題はこの時一度でも設定が漏れると再デプロイが必要な状況が発生するか、プロダクションで設定ファイルが漏れてデプロイされた内容が反映されない問題も引き起こす点です。 1. デプロイレビューを作る このような問題を解決するために最初に考えた方法はデプロイ前にレビュー時間を持つことです。 問題は全員の時間をある程度消費しなければならない点で、コストが大きいため現在はProductionデプロイ前に追加されたインフラや設定に関する部分をレビューする方式で運営しています。 漏れた設定を見つけるのに多くの人が検討するため、より効果的で良い経験でした。しかし、追加された部分を一つ一つ確認する作業なのでレビュー時間が長くなる欠点があるようです。 2. 設定ファイル比較アクションを作る 次に今回適用した方法は設定ファイルを比較するボットを作ることです。 ただし、既存の市販されている(?) YAML比較ツールを使用すると、値まで全て比較するため、環境ごとに異なる値があることを前提に比較するには適しませんでした。 そこで、次のような方法を検討しました。 環境ごとに設定ファイルを読み込み、Key値だけを抽出する。 タイプが異なる場合や、キーが一方のファイルにない場合、配列の場合インデックスが異なる場合などをチェックする。 変更部分がある場合、各環境ブランチのマージ用PRにコメントとしてレポートを生成する。 こうすることで、環境ごとに漏れている設定があるかどうか確実に追跡することが可能だと判断しました。 設計 構造図の大部分は理解しやすいですが、大まかな構造はこのようです。 ここでyaml-diff-reporterは二つのYAML設定ファイルをパースして比較し、レポートをコンソールやファイルに出力できるCLIツールで、今回一緒に実装しました。 使用法を一緒に明示しておいたので、同じような悩みをしている方がいれば使用してみてください。単純ファイル比較用として使用できるようにフラグを通じてモードを指定するように実装しました。 アクションを作る name: 設定ファイル比較 on: pull_request: branches: [ qa, stg, prod ] 私たちは前述の通り4つの環境が存在します。一般的には開発時にdevにマージされ、デプロイ時にのみqa、stg、prodデプロイ用PRを上げるため、このように設定しました。

もっと読む →

2025年1月3日