【実務・中級編】Ansible Controller(旧AWX)のバックアップとリストア・障害復旧の完全手順 – インフラ構成管理(IaC)活用バイブル

Ansible Automation Controller(旧AWX)の死を恐れない:極限のバックアップ・リカバリ戦略

SREの現場において「IaCツールそのものが倒れた時」にどれだけ迅速に復旧できるか。これは、インフラチームの生存確率を左右する最も重要なメトリクスだ。

Ansible Automation Controller (以下AAC) は、単なる自動化ツールではない。組織の「権限」「認証情報」「実行履歴」が凝縮されたインフラの心臓部だ。今回は、Kubernetes環境(awx-operator)上でこの心臓を守り抜き、万が一の停止から瞬時に蘇生させるための「現場の最前線」の知見を共有する。

—

1. Enterprise環境におけるバックアップの哲学

多くのエンジニアは「データベースさえ抜けばいい」と勘違いしている。しかし、AACの復旧には以下の3点セットが揃っていなければならない。

  • PostgreSQLのデータダンプ: 実行履歴、ジョブテンプレート、インベントリなど。
  • 暗号化キー(Secret Key): これを失えば、DBが残っていても全Credentialはゴミと化す。
  • Persistent Volume (PV): プロジェクトのソースコードやカスタム仮想環境。

「バックアップの自動化」は前提として、「リストア手順の自動化」までをコード化せよ。 障害時にマニュアルを読んでいる余裕はない。

—

2. awx-operator環境でのバックアップ・リストア手法

`awx-operator`環境では、`AWX`カスタムリソースの構成とデータベースの整合性が全てだ。

バックアップの神髄:DBダンプの戦略

Kubernetes上のPostgreSQL(または外部DB)から、以下のスクリプトで一貫性を保ったバックアップを自動取得する。

pg_dumpを実行し、整合性を保った状態でS3等へ転送するスクリプト例
ポイント: –clean –if-exists を付与し、リストア時の衝突を回避する
kubectl exec -it — pg_dump -U \
–clean –if-exists –format=c > /backup/aac_db_$(date +%Y%m%d).dump

暗号化キーの退避(ここが生命線!)
AWXのSecretからSECRET_KEYを取得し、Vault経由で安全な場所に保管する
kubectl get secret -secret -o jsonpath='{.data.secret_key}’ | base64 -d > /backup/secret_key.txt

—

3. 障害からの迅速なリカバリ手順

リカバリの際、最も多いミスは「古いPVをマウントしたまま新しいDBを接続し、整合性を壊す」ことだ。

1. 環境のクリーンアップ: 既存のAWXリソースを削除し、Namespaceを空にする。
2. Secretの再構築: 退避していた `secret_key` を元にSecretを再作成する。
3. DBのインポート: 新しいPostgreSQLにダンプをリストアする。
4. AWXリソースのデプロイ: `AWX`カスタムリソースを適用し、`postgres_configuration` で既存DBを指定する。

プロの教訓: リストア時は必ず `image_pull_policy: Always` にし、バージョン不整合による「ログイン不能ループ」を回避すること。

—

4. 開発スピードを加速する「現場の神テクニック」

チーム開発で役立つ設定の共有ルール

Ansible ControllerのUIをポチポチ操作してはいけない。全ては `AWX` APIを通じたIaCで管理すべきだ。

  • Repository構造のベストプラクティス:

# awx-resources/job_templates.yaml

  • name: “System-Health-Check”

job_type: run
inventory: “Production-Inventory”
playbook: “site.yml”
credentials: [“SSH-Key-Prod”]
extra_vars: |
—
check_level: full

これを `awx-kit` (Ansibleコレクション) で流し込む。これにより、ControllerのUIが「表示専用」となり、変更の証跡がGit上に100%残る。

開発を劇的に速くするTips

1. CLIでの自動ログイン: `~/.netrc` に認証情報を記述し、`awx-cli` を常用せよ。`awx jobs list` などの結果を `jq` でパイプして状況を把握するのが、最も「速い」モニタリングだ。
2. 神プラグイン: VS Codeの `Ansible` 拡張機能だけでなく、`YAML` 拡張機能の `schema` 設定にController APIのJSON Schemaを紐付けろ。YAMLを書いている最中にリアルタイムでバリデーションが走る。
3. 隠れたキーボードショートカット: Controllerのジョブ実行画面では `Ctrl + Shift + Enter` を叩け。ログの表示がストリーミングモードになり、大規模なPlaybook実行時に画面の再描画を待たずに状況を追える。

—

最後に:SREとしてあるべき姿勢

バックアップとは「保険」ではない。「いつでも現在の環境を捨てて、別の場所に再構築できるという自信」そのものである。

明日、あなたの管理するAACのクラスタが消滅しても、上記の手順とGitにあるコードがあれば、1時間以内にサービスを復旧できるだろうか? 「できる」と即答できないなら、今すぐ `pg_dump` のスクリプトをCI/CDに組み込むべきだ。

技術は、壊れた時こそ、その真価が試される。備えよ、そして常に自動化せよ。

タイトルとURLをコピーしました