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がマージされるまでの回避策になると思います。
- https://gitlab.com/gitlab-org/gitlab-ce/issues/12756
- https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5910
S3にアップロードされたバックアップファイルを定期的に消去する方法
GitLab側でのバックアップでは、backup_keep_time
の期限を過ぎたファイルは自動で削除されます。しかし、S3にアップロードした場合ではこの期限が適用されずに、バックアップファイルが全て蓄積されていきます。
この対応策として削除スクリプトを使う方法がありますが、S3のライフサイクルという機能を使う方が容易です。
このS3のライフサイクル機能では、指定期間後にファイルを削除したり、Glacierなどの低価格な長期保存ストレージに移動したりすることが容易にできます。
設定方法
S3のバケットプロパティにある「ライフサイクル」から設定可能です。
以下のように、任意の経過日数後に削除するという設定が可能です。