Edited at
ゆめみDay 14

DB更新の運用を手作業から半自動化した話

More than 1 year has passed since last update.


この文書について

とあるシステム運用でDB更新の手作業をツールを作って半自動化したので、

どのようにアプローチしたかを紹介します。

対象読者: 運用を行うオペレータ、エンジニア


運用作業の概要


  • 依頼者からExcelファイルを受領する

  • 運用担当者がDB取込のバッチに食わせるtxtファイルに変換する

  • txtファイルをバッチプログラムに指定し、DBを更新

  • DBが更新されたことを動作確認する

依頼毎にBacklogやRedmineなどのITSにチケットを作り、

手順作成・レビュー・リハーサル・本番反映を行っています。


改善前の運用

OldOperation.png


  • 取込の依頼が来る


    • ファイルをExcelで受領する



  • Excelファイルを取込用のtxtファイルに加工する

  • 前回の作業チケットを調べる

  • 前回の作業チケット添付のtxtファイルと今回のtxtファイルの差分を確認する

  • ITSでチケットを作成し、対応手順・動作確認手順を作成する


    • 前回の作業チケットのURLを今回の作業チケットに書く

    • 取込用のtxtファイルをチケットに添付する

    • txtファイルの差分があった箇所を今回の動作確認手順に記載する



  • 手順をレビューする


    • 前回の作業チケットのURLが正しいか

    • 今回の作業チケットの動作確認内容が正しいか


      • txtファイルの差分確認をレビュー担当者がもう一度行い、突き合わせ





  • 開発環境で取込を行う


    • チケットからtxtファイルをダウンロードしてサーバに反映

    • サーバに反映したtxtファイルが本当に今回の作業対象のものであるか確認

    • 取込プログラムを手動で叩く

    • 動作確認をする



  • 本番環境で取込を行う


    • チケットからtxtファイルをダウンロードしてサーバに反映

    • サーバに反映したtxtファイルが本当に今回の作業対象のものであるか確認

    • 取込プログラムを手動で叩く

    • 動作確認をする




問題点と改善方法


問題点


  • 前回の取り込みチケットを探さないといけないのが面倒

  • 差分確認が手間


    • 運用担当者もレビュワーもチケットからファイルをダウンロードして差分を見る



  • 反映が手間


    • 取込を行うサーバにファイルを手動で転送しており、
      取り込みバッチに食わせる前に本当に今回反映するファイルか確認している



とにかく 「今回依頼のtxtファイルを反映するんだよね?」という念の為の確認が多かったです。

なので、こうした人の手による確認を如何にして減らすかが焦点となります。


改善方法

この業務の場合、


  • 「最新の2件のtxtファイルを比較」して動作確認手順を作る

  • 「最新のtxtファイル」をDBに取込

が肝なので、「依頼順にファイルを並んだ状態にして集中管理」することで、自動化できます。

具体的には以下の3つを行いました。


  • txtファイルの保存場所をGitにした


    • txtファイルを1つのディレクトリにまとめ、ファイル名を 依頼日.txt にする



  • 差分抽出ツールを作った


    • lsコマンドでtxtファイルを列挙し、最新の2件について diff コマンドで差分抽出



  • 最新のファイルを取込バッチに食わせるツールを作った


    • lsコマンドでtxtファイルを列挙し、最新の1件を取込バッチに食わせる




改善後の運用

NewOperation.png


  • 取込の依頼が来る


    • ファイルをExcelで受領する



  • Excelファイルを取込用のtxtファイルに加工する

  • 取込用のtxtファイルをGitリポジトリに保存

  • 差分抽出ツールを実行し、前回の取込ファイルとの差分を確認する

  • ITSでチケットを作成し、対応手順・動作確認手順を作成する


    • ツールの差分を元に今回の動作確認手順を記載する



  • 手順をレビューする


    • ツールの差分と今回の動作確認手順があっているかをチェック



  • 開発環境で取込を行う


    • Gitリポジトリの内容を同期し、最新版を反映するシェルを実行

    • 動作確認をする



  • 本番環境で取込を行う


    • Gitリポジトリの内容を同期し、最新版を反映するシェルを実行

    • 動作確認をする