エンジニアの皆さん、こんにちは。大規模インフラの自動化において、Ansible Automation Controller(旧AWX)はもはや「心臓部」です。しかし、心臓が止まったとき、その復旧手順を即座に脳内で再生できないのであれば、それは「システムを運用している」のではなく「神頼みで運用している」のと同じです。
今日は、現場で血を流しながら学んだ「Ansible Controllerの死なない設計と、死んでも蘇る設計」について語ります。これをマスターすれば、深夜の障害呼び出しに怯える必要はもうありません。
—
1. Enterpriseにおけるバックアップの哲学
「バックアップを取っている」という言葉は、実は無意味です。「リストアできる状態を維持している」ことが唯一の正義です。
Enterprise環境では、以下の3つの要素が物理的に分離されている必要があります。
- PostgreSQLのデータ: すべての設定と実行履歴。
- Secret Key: データベース内の機密情報を復号するための鍵。これを失えば、DBが残っていてもデータはゴミになります。
- Projectデータ(Git): Playbookの実体。
2. awx-operator環境での完全バックアップ戦略
Kubernetes上で動くAutomation Controllerにおいて、バックアップの要は「PostgreSQLのダンプ」と「Secret Keyの保管」です。
手順A: データベースのダンプ
awx-operatorが管理するPostgreSQL Podを見つけ、中身を吸い出します。
PostgreSQL Podの特定
POD_NAME=$(kubectl get pods -n awx -l “app.kubernetes.io/name=awx,app.kubernetes.io/component=postgresql” -o jsonpath='{.items[0].metadata.name}’)
ダンプ実行 (production_db はデフォルトのDB名)
kubectl exec -it $POD_NAME -n awx — pg_dump -U awx -d awx > automation_controller_backup.sql
手順B: 命綱「Secret Key」の保護
ControllerのPod内にある `/etc/tower/SECRET_KEY` は、再インストール時に全く同じ文字列を指定しないと、DB内のパスワードや認証情報が復号できず、すべてのジョブが失敗します。
Secret Keyを抽出して安全な場所に保管
kubectl get secret awx-admin-password -n awx -o jsonpath='{.data.password}’ | base64 -d # 必要に応じて
最も重要なのはこれ
kubectl get secret awx-secret-key -n awx -o yaml > awx-secret-key-backup.yaml
—
3. 障害発生時の迅速なリカバリ手順
万が一、Controllerが全損した際の「最短復旧プロセス」は以下の通りです。
1. 新規クラスタの構築: `awx-operator` をデプロイします。
2. Secret Keyの復元: バックアップした `awx-secret-key` を適用します。(重要:デプロイ前に適用してください)
3. DBのリストア:
# 空のDBへ流し込む
cat automation_controller_backup.sql | kubectl exec -i $NEW_POD_NAME -n awx — psql -U awx -d awx
4. Operatorの同期: `AWX` カスタムリソースを更新し、Controllerを再起動させます。
—
4. 初心者へのエール:HelloWorld的な動作確認
「バックアップが取れた」と思っても、リストアできなければ意味がありません。以下の小さな手順で、自動化の「作法」を身体に染み込ませてください。
1. Job Templateの作成: 実行するだけの簡単なPlaybookを登録する。
2. Backup実行: 上記の手順でバックアップを取る。
3. 破壊: `kubectl delete awx awx-instance` を叩いてControllerを消す。
4. 復元: リストアを実行し、元のJob Templateが残っているか確認する。
「破壊」こそが最高の学習です。 壊れることを前提に設計されたシステムだけが、真に強靭(Resilient)なシステムと言えます。
—
現場のエンジニアから最後に
バックアップを自動化する際は、必ず 「S3やAzure Blob Storageへの転送」までを一つの自動化パイプラインに組み込んでください。 手動でローカルPCに保存したバックアップは、半年後にはどこにあるか分からなくなります。
「自動化のためのツールを、手動で管理してはいけない」。これがインフラエンジニアの鉄則です。
今日の手順を明日一度試してみてください。その瞬間、あなたは「障害に怯える運用の奴隷」から「システムを支配する設計者」へと一歩進化します。応援していますよ。