l3d.restic
Ansibleロール: restic
ベータ版: このロールはベータ版です。
説明
Resticは、複数のバックエンド、重複排除、および増分バックアップをサポートする多目的Goベースのバックアップソリューションです。
このロールは、クライアントにresticをインストールし、バックアップリポジトリを設定し、オプションでバックアップを実行するsystemdタイマーまたはcronジョブを設定します。その上、手動でバックアップを実行するための実行可能なスクリプトもセットアップします。
このプロジェクトは、donat-b/ansible-resticとhttps://github.com/arillso/ansible.resticのAnsibleロールから多くを借りています。私たちは、このロールをより理解しやすく、モダンにするために、systemdタイマーや/etc/crontabを使用してバックアップパスを定義し、より絶対的なパスを使用し、オプションを減らすことを目指しています。(S3ストレージやWindowsでは未テストです…)
バックアップスクリプト
このロールは、各バックアップのために、restic_script_dir
内にバックアップスクリプトとLinuxでsource
コマンドで使用できる資格情報ファイルを作成します。
これらの実行可能スクリプトは、手動でバックアップアクションをトリガーするために使用できますが、restic_create_schedule
変数をtrueに設定した場合は、自動バックアップにも使用されます。
ファイルを手動で変更しないように注意してください。そうしないと、バックアップに干渉することがあります。
Linuxで手動スナップショットを撮りたい場合、次のようにバックアップを実行できます:
$ /path/to/backup/script/backup-example.sh
デフォルトでは、このようなスナップショットにはmanual
タグが付けられ、これにより自動的に作成されたスナップショットと区別できます。さらに、単に追記することで、他のタグを追加することもできます:
$ /path/to/backup/script/backup-example.sh --tag deployment
CRON / スケジュールされたタスク
定義されたバックアップを利用するために、それらを自動的にスケジュールされたタスクとして設定できます。こうしたアクションを構成するには、(少なくともLinuxシステムでは)管理者権限が必要であることに注意してください。
自動タスクの作成ができない場合でも、生成されたスクリプトを使用できます。たとえば、共有ホスティングサーバーにいる場合や、ウェブインターフェースを介してcronジョブを定義できる場合は、各バックアップファイルを実行するように追加してください。コマンドをCRON=true
で接頭して、スナップショットがスケジュールされたタスクによって作成されたことを示すようにしてください:
CRON=true /path/to/backup/script/backup-example.sh
インストール
ロールをインストールする方法はいくつかあります。直接GitHubリポジトリからクローンまたはダウンロードするか、Ansible Galaxyを介してインストールします:
ansible-galaxy install roles-ansible.restic
要件
- bzip2
ロール変数
名前 | デフォルト | 説明 |
---|---|---|
restic_url |
未定義 |
resticをダウンロードするためのURL。デフォルトを書き換えるためにこの変数を使用してください。 |
restic_version |
'0.15.1' |
インストールするResticのバージョン |
restic_download_path |
'/opt/restic' |
resticバイナリのダウンロード場所 |
restic_install_path |
'/usr/local/bin' |
resticバイナリのインストール場所 |
restic_script_dir |
'/opt/restic' |
生成されたバックアップスクリプトの場所 |
restic_backup_script_shell |
sh |
バックアップスクリプトの実行に使用するシェル |
restic_log_dir |
'{{ restic_script_dir }}/log' |
バックアップスクリプトのログの場所 |
restic_repos |
{} |
スナップショットが保存されるリポジトリの辞書。*(詳細情報: Repos)* |
restic_backups |
{} (または [] ) |
バックアップするファイルおよびディレクトリを指定する辞書のリスト。*(詳細情報: Backups)* |
restic_create_schedule |
false |
各バックアップをスケジュールしますか?cronジョブまたはsystemdタイマー経由で設定できます。 |
restic_backup_now |
false |
バックアップスクリプトを即座に実行するかどうかのフラグ |
restic_schedule_type |
systemd |
cronjob またはsystemd タイマーを作成するかどうかを定義します。systemdタイマーの作成に失敗した場合、cronジョブが作成されます。 |
restic_dir_owner |
'{{ansible_user}}' |
作成されたすべてのディレクトリの所有者 |
restic_dir_group |
'{{ansible_user}}' |
作成されたすべてのディレクトリのグループ |
restic_no_log |
true |
隠されたansibleログを表示するためにfalseに設定します |
restic_do_not_cleanup_cron |
false |
cronの場所を変更し、古いものをクリーンアップします。ここでクリーンアップをスキップできます。 |
restic__cache_config |
false |
カスタムキャッシュディレクトリを構成します |
restic__cache_dir |
'~/.cache/restic' |
カスタムキャッシュディレクトリを定義します |
submodules_versioncheck |
false |
この変数をtrueに設定すると、古いバージョンのこのロールの実行を防ぐために簡単なバージョンチェックが実行されます。 |
restic__limit_cpu_usage |
false |
CPUの使用を制限しますか? |
restic__max_cpus |
1 |
同時に使用できるCPUの最大数 |
リポジトリ
Resticはデータをリポジトリに保存します。このロールを使用するためには、少なくとも1つのリポジトリを指定する必要があります。リポジトリはローカルまたはリモートである可能性があります(公式のドキュメントを参照)。
SFTPリポジトリの使用
SFTPバックエンドを使用する場合、ユーザーはホストへのパスワードなしのアクセスが必要です。 SSHキーを適切に配布することを確認してください。これはこのロールの範囲外です。
利用可能な変数:
名前 | 必要 | 説明 |
---|---|---|
location |
はい | バックエンドの場所。目前は、ローカル、SFTP、S3、Azure BlobおよびB2をサポートしています |
password |
はい | このリポジトリを保護するために使用されるパスワード |
init |
いいえ | リポジトリを初期化するかどうかを記述します。既存のリポジトリにバックアップする場合はfalse を使用します。 |
例:
restic_repos:
local:
location: /srv/restic-repo
password: securepassword0
init: true
remote:
location: rest:https://restic_rest_server.example.com:8000/restic-repo/
password: securepassword1
init: true
sftp:
location: sftp:user@host:/srv/restic-repo
password: securepassword2
init: true
aws:
location: s3:s3.amazonaws.com/bucket_name
password: securepassword3
init: true
aws_access_key: accesskey
aws_secret_access_key: secretaccesskey
aws_default_region: eu-west-1
azure:
location: azure:container:/
password: securepassword4
init: true
azure_account_name: storageaccountname
# 次のいずれか一つが必要です
azure_account_key: somekey
azure_account_sas: sasurl
# オプショナル
azure_endpoint_suffix: core.windows.net
b2:
location: b2:bucketname:path/to/repo
password: securepassword5
init: true
b2_account_id: accountid
b2_account_key: accountkey
バックアップ
バックアップはバックアップするディレクトリまたはファイルを指定します。バックアップはrestic_repos
で定義されたリポジトリに書き込まれます。
利用可能な変数:
名前 | 必要 (デフォルト) | 説明 |
---|---|---|
name |
はい | このバックアップの名前。トリミングとスケジューリングに使用され、一意である必要があります。 |
repo |
はい | バックアップを取るリポジトリの名前。 |
src |
はい(ただし、stdin == true の場合を除く) |
ソースディレクトリまたはファイル |
stdin |
いいえ | バックアップがstdinから作成されていますか? |
stdin_cmd |
いいえ(stdin == true の場合ははい) |
stdinを生成するコマンド。 |
stdin_filename |
いいえ | リポジトリで使用されるファイル名。 |
pre_backup_cmd |
いいえ | バックアップ前に実行するコマンド。通常、データベースをディスクにダンプするために使用されます。 |
tags |
いいえ | デフォルトタグの配列 |
keep_last |
いいえ | 設定されている場合、最後のnスナップショットのみを保持します。 |
keep_hourly |
いいえ | 設定されている場合、最後のn時間ごとのスナップショットのみを保持します。 |
keep_daily |
いいえ | 設定されている場合、最後のn日ごとのスナップショットのみを保持します。 |
keep_weekly |
いいえ | 設定されている場合、最後のn週間ごとのスナップショットのみを保持します。 |
keep_monthly |
いいえ | 設定されている場合、最後のnか月ごとのスナップショットのみを保持します。 |
keep_yearly |
いいえ | 設定されている場合、最後のn年ごとのスナップショットのみを保持します。 |
keep_within |
いいえ | 設定されている場合、この期間内のスナップショットのみを保持します。 |
keep_tag |
いいえ | 設定されている場合、このタグでスナップショットを保持します。リストを指定することを確認してください。 |
prune |
いいえ (false ) |
true の場合、スクリプト内のrestic forget コマンドに--prune オプションが追加されます。 |
scheduled |
いいえ (false ) |
restic_create_schedule がtrue に設定されている場合、このバックアップはスケジュールされ、systemdタイマー単位を作成しようとします。失敗した場合、cronジョブが作成されます。 |
schedule_oncalendar |
'*-*-* 02:00:00' |
systemdタイマーのための時間。randomDelaySecオプションに注意してください。デフォルトでは、バックアップは毎晩午前2時に実施されます(+0-4時間)。ただし、スケジュールされた場合のみ。 |
schedule_minute |
いいえ (* ) |
ジョブが実行される分(0-59、、/2など) |
schedule_hour |
いいえ (2 ) |
ジョブが実行される時(0-23、、/2など) |
schedule_weekday |
いいえ (* ) |
ジョブが実行される曜日(0-6の日曜-土曜、*など) |
schedule_month |
いいえ (* ) |
ジョブが実行される月(1-12、、/2など) |
exclude |
いいえ ({} ) |
除外するファイルを指定できます。Excludeを参照してください。 |
disable_logging |
いいえ | ログをオプションで無効にします |
log_to_journald |
いいえ | バックアップジョブの名前をタグとしてjournaldへのロギングをオプションで切り替えます |
mail_on_error |
いいえ | バックアップジョブが失敗した場合にメールを送信するオプションを追加します(mailxが必要です) |
mail_address |
mail_on_error がtrueの場合、必須 |
mail_on_error を有効にした場合にメールを受信するメールアドレス |
monitoring_call |
いいえ | バックアップが成功した場合に呼び出されるコマンド。ハートビート監視システムに役立ち、ハートビートが受信されない場合に警告をランチャーします。フルコマンドを使用してください。例: curl https://monitoring.example.com/api/push/E9Wzm4lJ2O?status=up&msg=OK&ping= |
niceness |
いいえ | 設定されている場合、与えられたniceness値でスケジュールされたバックアップを実行します。Linuxでは、-20が最高優先度、0がデフォルト、19が最低優先度です。生産システムのバックアップルーチンには、一般に10の低優先度が割り当てられます。 |
例:
restic_backups:
data:
name: data
repo: remote
src: /path/to/data
scheduled: true
schedule_oncalendar: '*-*-* 01:00:00'
database:
name: database
repo: remote
stdin: true
stdin_cmd: pg_dump -Ubackup db_name
stdin_filename: db_name_dump.sql
scheduled: true
schedule_oncalendar: '*-*-* 01:30:00'
niceness: 10
all_databases:
name: all_databases
repo: remote
src: /var/dumped_data
scheduled: true
schedule_oncalendar: '*-*-* 02:00:00'
pre_backup_cmd: cd /var/dumped_data && mariadb -N -e 'show databases' | while read dbname; do mariadb-dump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; done
restic_backups
を配列として指定することもできます。これはレガシー機能で、将来的に廃止される可能性があります。現在、名前キーはアクセスおよびバックアップファイルの命名に使用されています。
除外
バックアップのexclude
キーは、複数のファイルを除外したり、除外するファイル名を探すために使用できます。次のキーを指定できます:
exclude:
exclude_caches: true
exclude:
- /path/to/file
iexclude:
- /path/to/file
exclude_file:
- /path/to/file
exclude_if_present:
- /path/to/file
特定のキーの使い方については、ドキュメントを参照してください。
依存関係
このロールには、他のAnsibleロールを依存関係として持っていません。
例プレイブック
- name: 毎晩夜にホームフォルダを /mnt/backup にバックアップ
hosts: localhost
roles:
- {role: do1jlr.restic, tags: restic}
vars:
restic_create_schedule: true
restic_repos:
local:
location: '/mnt/backup'
password: 'ChangM3'
init: true
restic_backups:
home:
name: home
repo: local
src: /home/
scheduled: true
schedule_oncalendar: '*-*-* 01:00:00'
ライセンス
このプロジェクトはMITライセンスのもとで公開されています。全文についてはLICENSEファイルを参照してください。
ansible-galaxy install l3d.restic