2020年9月30日水曜日

Gitlab のバックアップデータを自動で S3 に保存する方法

概要

過去に gitlab のデータをバックアップする方法を紹介しました
今回はバックアップしたデータを自動で S3 にアップロードする方法を紹介します
また gitlab のバージョンも 13 系になったのでコマンドが変わったのでそのあたりも紹介します

環境

  • GitLab Enterprise Edition 13.3.5-ee

フルバックアップコマンド

  • gitlab-backup create

これですべてのデータベースやリポジトリのバックアップが取得できます
ビルドの成果物や git lfs のファイルも含まれるのでファイルがかなり大きくなるケースがあるので注意しましょう
デフォルトだとバックアップファイルは /var/opt/gitlab/backups/ に保存されます

ただこのコマンドにはセンシティブの設定ファイルやシークレットファイルが含まれていません

gitlab.rb と gitlab-secrets.json をバックアップする

実際に別サーバに移行するとなった場合にはこれらのファイルも必要です
先程の gitlab-backup create コマンドにはこれらは含まれません
なので別途バックアップする必要があります
gitlab 12.3 以上であれば専用のコマンドがありこれで tar ファイルを作成してくれるのでこれを使いましょう

  • gitlab-ctl backup-etc

これで /etc/gitlab/config_backup/ に tar ファイルが作成されます

本題: S3 に自動アップロードする方法

本題の自動アップロード方法です
gitlab.rb に S3 のバケット名と認証情報を設定するだけです
なので事前にバケットの作成と認証情報の確認をしておきましょう

  • vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_upload_connection'] = {
  'provider' => 'AWS',
  'region' => 'us-east-2',
  'aws_access_key_id' => 'AKIxxxxxxxxxxxxxxxxxxx',
  'aws_secret_access_key' => 'xxxxxxxxxxxxxxxxxxxxx',
  # # If IAM profile use is enabled, remove aws_access_key_id and aws_secret_access_key
  'use_iam_profile' => false
}
gitlab_rails['backup_upload_remote_directory'] = 'your-bucket-name'

設定できたら reconfigure を実行します

  • gitlab-ctl reconfigure

再度バックアップを実行して動作確認

では再度バックアップを実行してどうなるか確認してみます
まずフルバックアップしてみましょう

  • gitlab-backup create

Uploading backup archive to remote storage ... というログが表示されるようになると思います

バケット側を確認するとちゃんと tar ファイルがアップロードされていることも確認できると思います

一応ローカル側にも tar ファイルは残っているようです
/var/opt/gitlab/backups/1601361216_2020_09_29_13.3.5-ee_gitlab_backup.tar
不要な場合は削除しましょう

backup_keep_time

どうやら gitlab.rb の backup_keep_time が経過したらローカル側は自動で削除してくれるようです
試しに 1 秒にしてみたらすぐにローカルの tar ファイルは削除されました

gitlab_rails['backup_keep_time'] = 1

Excon::Error::Socket: Broken pipe (Errno::EPIPE)

自分は S3 のバケットがリージョン名が違っていたために発生しました
基本的にこのエラーが出た場合は gitlab.rb を見直して認証情報やリージョン情報など S3 の設定が間違っていないか確認しましょう

設定ファイルはどうなるか

次に設定ファイルのバックコマンドを実行して S3 にアップロードされるか確認してみました

  • gitlab-ctl backup-etc

こちらは S3 にアップロードされることはなくローカルに保存されるだけでした
おそらくセキュリティ的な面と /etc/gitlab 配下のサイズが大きくならないので、わざわざ S3 にアップロードする必要がないという判断なのかなと思います

最後に

gitlab のバックアップファイルを S3 に自動にアップロードする方法を紹介しました
gitlab.rb に S3 の情報を記載するだけで OK なので簡単にできると思います
また注意する点としては設定ファイルはフルバックアップに含まれないので別途手動でバックアップする必要があるということがわかりました

参考サイト

0 件のコメント:

コメントを投稿