Cisco ACI で取得可能なスナップショットは「50」世代まで
Cisco ACI のスナップショット機能に関して、以前に以下のメモを書きました。
スナップショット機能は実装当初から使いやすい機能で、最新のバージョンに至るまで殆ど変更の無い、完成された機能だと思います。 今回はスナップショット機能について改めてまとめておきます。
結論¶
先に結論を記載しておきます。
DailyAutoBackupについて- ACI 初期状態で設定済み
- 8 時間おきに定期実行され、スナップショットを取得する
- スナップショットは 3 世代取得される (初期状態では後述の
maxSnapshotCountが「3」になっている為) - 3 世代を超える場合は、スナップショット全体のうち最も古いファイルが削除される
- ファブリック全体で取得可能なスナップショット最大数について
- 全ての
Export Policy合計で 50 世代までスナップショットを取得可能 - 50 世代を超える場合は、スナップショット全体のうち最も古いファイルが削除される
- 全ての
Export Policy毎に取得可能なスナップショットの最大数についてExport Policyを JSON / XML で出力した際に含まれるmaxSnapshotCountの設定値で決まるmaxSnapshotCountがglobal-limitの場合、そのExport Policyは「50」世代までスナップショットを取得可能maxSnapshotCountの値を超える数のスナップショットを取得すると、スナップショット全体のうち最も古いファイルが削除される
maxSnapshotCountの設定方法について- Web GUI からは指定出来ず、自動的に
global-limitになる - CLI からは指定出来ず、自動的に
global-limitになる - Ansible からは 1 ~ 10 の値を必ず指定出来る (但し、Ansible 2.8 時点だとソースコードを見た限り、
global-limitは指定出来ないように見えた) - REST API であれば
maxSnapshotCountへ以下を設定可能- 「1 ~ 10」の数字
global-limit(「50」と同じ意味)
- Web GUI からは指定出来ず、自動的に
Web GUI での Export Policy 設定方法¶
スナップショットは Export Policy をトリガーすることで取得される為、まず Export Policy を設定する必要があります。 ACI 4.2(2e) でも設定方法は従来と同じです。
Step.1¶
Admin → Import/Export → Export Policies → Configuration → Policy → Create Configuration Export Policy をクリックします。

Step.2¶
Create Configuration Export Policy というウインドウが表示されます。 初期状態では Shapshot が未チェックになっており、その代わりに Export Destination 欄が表示されています。

Snapshot にチェックを入れると Export Destination 欄は表示されなくなります (スナップショットは APIC 内部に保存されるので、必然的に保存場所を指定する必要がなくなる為)。 これで設定自体は完了です。 すぐにスナップショットを取得したい場合は Start Now を Yes に設定します。 但し、Start Now は「すぐにスナップショットを取得する」だけであり、設定として保持するわけでは無いので、実行してもすぐに Start Now: No に戻ります。

取得済みのスナップショットの一覧を確認する¶
Web GUI、CLI 各々から取得済みのスナップショットを一覧表示する方法をまとめます。
Web GUI¶
Admin → Config Rollbacks と辿ると取得済みのスナップショット一覧を表示することが出来ます。

CLI¶
CLI であれば show snapshot files で確認することが出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
CLI からスナップショットの数を数える¶
取得したスナップショットファイルは全てのコントローラの /data2/snapshots/ ディレクトリに保存されるようです (APIC x 3 台環境で確認)。
1 2 3 4 5 | |
スナップショット数を数えるには /data2/snapshots/ ディレクトリ配下のファイル数を数えれば良いのですが、オプションを指定しない ls では上記出力例のように 合計 という余計な表示が含まれてしまいます。 その為、ls -1 (数字の「イチ」オプション) を指定して 合計 が表示されないようにし、出力結果の行数を wc -l でカウントすることで「スナップショットファイルの数」を数えます。
1 2 | |
CLI からスナップショットを取得する¶
CLI からスナップショットを取得するには以下のように実行します。
1 | |
CLI からスナップショットを削除する¶
CLI からスナップショットを削除するには以下のように実行します。 尚、ファイル名の指定時に正規表現は利用出来ないようです。
1 | |
初期状態で存在する DailyAutoBackup の設定内容¶
(ACI でスナップショット機能を実装して以降) ACI のバージョンに関わず、初期状態で DailyAutoBackup という設定が存在します。 この設定を確認していきます。
Web GUI¶
Web GUI では以下のように表示されます。 以下の設定になっていることが分かります。
- JSON 形式でコンフィグを保存する
- (外部へのバックアップでは無く) スナップショットをバックアップする
- 8 時間間隔で定期的にコンフィグをバックアップする

CLI¶
CLI 上から設定を確認すると以下のように表示されます。
1 2 3 4 5 6 | |
all オプションを付与し、暗黙的なデフォルト値も表示させると以下のように表示されます。
1 2 3 4 5 6 7 8 | |
REST API¶
REST API で取得した .json ファイルは以下の内容になっていました。 Web GUI や CLI では確認出来ない、maxSnapshotCount : 3 という設定が存在しているのが分かります。 ACI ではこのように、Web GUI や CLI では確認出来ないが、REST API からは確認出来る設定が幾つか存在するようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
Web GUI から作成した Export Policy の内容¶
Web GUI 上から作成した Export Policy の内容を確認してみます。
CLI¶
CLI から確認すると設定は以下のようになっています。 設定時にスケジューラを指定しなかったので、schedule 設定が無いこと以外は DailyAutoBackup と同じ内容です。
1 2 3 4 5 | |
all オプションを指定すると以下のように表示されます。
1 2 3 4 5 6 7 | |
REST API¶
REST API で .json ファイルを取得すると以下の内容になっていました。 先ほどの DailyAutoBackup とは違い、maxSnapshotCount: global-limit になっていることが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
スナップショットの最大数は「50」世代まで¶
スナップショットが何世代まで取得可能なのか、試してみます。 まず、50 世代までスナップショットを取得してみました。 スナップショットの内訳は以下のようになっています。
トリガーした Export Policy |
スナップショット数 |
|---|---|
DailyAutoBackup |
3 |
SnapshotTest |
47 |

実際に APIC の CLI からスナップショット数の合計が「50」であることを確認しておきます。
1 2 | |
この状態から更にもう一世代、SnapshotTest をトリガーしてスナップショットを取得します。
1 | |
Web GUI の表示は以下のようになりました。 最も古い日付のスナップショットがひとつ、減っていることが分かります。

しかし、スナップショット自体の合計は「50」のままです。
1 2 | |
スナップショットの内訳は以下のようになっていました。
1 2 3 4 | |
これらの結果からスナップショットは以下の仕様であることが分かります。
- スナップショットは 50 世代まで取得可能
- 50 世代を超えた場合は、最も古いスナップショットが削除される
世代数を決めるパラメータは maxSnapshotCount¶
該当の Export Policy が「何世代までスナップショットを取得可能か?」を決定しているのは maxSnapshotCount というパラメータのようです。 ここまでの検証で分かるように、maxSnapshotCount は以下の動作をするようです。 加えて、maxSnapshotCount に指定可能な数値は「1 ~ 10 まで」という制限もあります。
- その
Export Policyが取得出来るスナップショットの世代数はmaxSnapshotCountの値まで maxSnapshotCountを超えるスナップショット数を超えると、全てのスナップショットを通じて最も古いスナップショットが削除される- Web GUI から
Export Policyを新規作成 / 変更する場合、maxSnapshotCountは指定できず、暗黙的にglobal-limitという値になる maxSnapshotCountがglobal-limitの場合、スナップショットは 50 世代まで取得可能maxSnapshotCountは以下の値を設定可能- 1 ~ 10
global-limit(「50」と同じ意味)
REST API で maxSnapshotCount を変更する¶
上述の通り、Web GUI や CLI では maxSnapshotCount の値を変更することは出来ませんが、REST API であれば設定変更可能です。 ここでは curl を使って DailyAutoBackup の maxSnapshotCount を「5」へ変更してみます。
まず、ACI へログインします。
ACI へログインする¶
1 2 3 4 | |
「maxSnapshotCount : 5」に設定する¶
次が本番です。 以下のように maxSnapshotCount : 5 を指定した JSON を DailyAutoBackup に対して POST すれば設定完了です。
1 2 3 4 | |
「maxSnapshotCount : global-limit」に設定する¶
バックアップ世代数を「50」(global-limit) に設定するには以下のように実行します。
1 2 3 4 | |