SDDC Import/Export for VMware Cloud on AWS Toolで構成を自動バックアップする

VMware Flings(VMware社のエンジニアとコミュニティ)によって作成された構成の入出力ツールを使ってみました Part.3

こんにちは、AWS事業本部の荒平(@0Air)です。
お使いのSDDC構成、バックアップはちゃんと最新になっていますか?

以前、SDDC Import/Export ToolというVMware Cloud on AWSのSDDC構成をバックアップするためのツールを紹介しました。

ただし、この記事では手動で気付いたタイミングにバックアップするというものです。
本エントリでは、これを自動化し構成をS3に保存する方法を紹介します。

紹介するツールのページ

構成図

今回作成してみた定期バックアップ構成図です。
SDDC Import/Export Toolに実装されているS3バックアップ機能を利用します。
ちなみに、APIアクセスのため、Connected VPCを持つアカウントでも実装できますが、今回は全く関係のないアカウントから接続しました。

実装手順

(1) 準備

前述のブログにある各種ダウンロードなど、環境準備が済んでいるところからスタートします。
APIトークン切れしていないかについても、確認しておきます。

(2) コンフィグの変更

Lambdaで書き込みできるストレージは/tmp のため、config.iniexport_folder/tmp に変更します。
※ デフォルトではjson になっています

[exportConfig]

# Folder to export JSON configurations into
# export_folder = json
export_folder = /tmp

同じく config.ini の85行目付近の以下記述を探して、export_historyTrue にします。
※ デフォルトではFalse になっています

# Keep previous versions of the exported JSON files?
export_history = True

また、S3バケット書き込み用の設定を aws.ini に記述します。

[awsConfig]

# Leave access_id blank if running this script in AWS Lambda. The role the Lambda function executes as should be granted
# write access to the S3 bucket. If running this script outside of Lambda, you must create an access ID and secret, granting it
# write access to the S3 bucket
aws_s3_export_access_id = 
aws_s3_export_access_secret = 

# Populate this with the S3 bucket name. The sample Lambda code uses a command line parameter to override this configuration
aws_s3_export_bucket = {S3バケット名を入力 ※但し、invoke_lambda.pyの引数でオーバーライドされます}

aws_s3_export_access_id および aws_s3_export_access_secret は通常、ローカルマシンなどでツールを実行する際に必要ですが、Lambdaを利用する場合、Lambdaの実行ロールにS3へのアクセス権限が割り当てられていればこの値は不要です。

invoke_lambda.pyには、APIキーや各種ID、S3バケットの設定を記述できます。これを変更すると各コンフィグの値より優先します。各コンフィグで管理するより、こちらで引数として渡すことが推奨されています。

(3) Lambda関数の作成

Python 3.x系でLambda関数を新規作成します。

任意の方法で、Lambdaの実行ロールにS3バケットへのアクセス権を付与します。
アクセス権限は、Lambdaの「設定」タブから確認できます。

そして、次のファイルを圧縮してLambda関数にアップロードします。

  • config_ini ディレクトリとその中身
  • sddc_import_export.py
  • VMCImportExport.py
  • invoke_lambda.py
  • vmc_auth.py

コードソース内のツリーがこのように表示されていれば、問題ありません。

Lambdaのハンドラーが消えている状態なので、関数ページ下の「ランタイム設定を編集」より、ハンドラをinvoke_lambda.lambda_handler に変更します。

(4) ツールをLambdaレイヤーにアップロード

アップロード用のSDDC Import/Export Toolのzipファイルを作成します。

cd {SDDC Import/Export Toolの階層}
mkdir python_req
cd python_req
pip3 install --target ./python -r ../requirements.txt
zip -r layer-sddctool.zip . # macOSの場合。OSによりzip化コマンドは変えてください

Lambdaの画面に戻り、「レイヤーの作成」から作成したzipファイルをアップロードします。

Lambda関数の画面を下にスクロールし、「レイヤーを追加」から、作成したカスタムレイヤーを選択します。

(5) Lambdaで実行(試運転)

手動でLambda関数を実行し、バックアップが取得されるか確認します。

私の場合は、タイムアウト値を30秒にしていましたが、時間内に終了しないことがあったので3分に変更しました。
状況に応じて調整してください。

正常に実行できた場合、S3 upload successful というメッセージが表示され、目的のS3バケットにjsonファイルのzipが格納されます。

(6) EventBridgeでLambda関数を定期実行する

Lambda関数内の「トリガーを追加」をクリックします。

トリガーの種類に「EventBridge (CloudWatch Events)」を選択し、新規ルールを作成します。
動かしたい頻度・時間はcron式で指定します。

動作確認

確認のため、cron(*/5 * * * ? *) で5分おきに動作するよう設定をしたところ、S3バケットには正しく自動で格納されていることが分かりました。

おわりに

SDDC Import/Export for VMware Cloud on AWS Toolを使って、自動的にSDDCの構成をバックアップする仕組みを試してみました。
有事の際にも、何かしらのバックアップがあれば安心できますので、是非使ってみてください。

上手くいかなかった場合は、export_history の設定やS3バケットへの権限周りを要チェックです。

このエントリが誰かの助けになれば幸いです。

それでは、AWS事業本部 コンサルティング部の荒平(@0Air)がお送りしました!