Edited at

GitLabでバックアップをS3にとる+定期的にバックアップを削除する

More than 1 year has passed since last update.

GitLabではバックアップ先にAWSのS3を利用することができます。

設定方法は基本的に公式のドキュメント通りです。


EC2のIAMロールを使う方法

GitLabをEC2で動かしている場合では、IAMロールを使うことでアクセストークンの埋め込みを避けることがができます。

公式のドキュメントには記載がありませんが、以下の設定でIAMロールを使うことができました。

これは、GitLabのバックアップファイルのアップロードに使われているFogというライブラリで対応しているためです。


設定方法

以下の様に設定することで、IAMロールを使ってS3バックアップが可能です。

gitlab_rails['backup_upload_connection'] = {

'provider' => 'AWS',
'region' => 'リージョン名',
'aws_access_key_id' => '', # 空だけど必要
'aws_secret_access_key' => '',# 空だけど必要
'use_iam_profile' => true,
}

gitlab_rails['backup_upload_remote_directory'] = 'バケット名'

必須項目のバリデーションがかかっているので、aws_access_key_id, aws_secret_access_keyを空のまま残して'use_iam_profile' => trueを指定するとIAMロールが使えます。

これは以下で報告されている、公式対応のMRがマージされるまでの回避策になると思います。


S3にアップロードされたバックアップファイルを定期的に消去する方法

GitLab側でのバックアップでは、backup_keep_timeの期限を過ぎたファイルは自動で削除されます。しかし、S3にアップロードした場合ではこの期限が適用されずに、バックアップファイルが全て蓄積されていきます。

この対応策として削除スクリプトを使う方法がありますが、S3のライフサイクルという機能を使う方が容易です。

このS3のライフサイクル機能では、指定期間後にファイルを削除したり、Glacierなどの低価格な長期保存ストレージに移動したりすることが容易にできます。


設定方法

S3のバケットプロパティにある「ライフサイクル」から設定可能です。

以下のように、任意の経過日数後に削除するという設定が可能です。