2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VMware Content Library (コンテンツライブラリ) 作成を Amazon S3 + AWS Lambda で自動化してみた

Last updated at Posted at 2023-09-01

1. はじめに

VMware 仮想環境を作ったり消したりしていると、仮想マシンのイメージファイル(ISOやOVFとか)を毎回 vCenter にアップロードするのが面倒だったりしませんか?
本番環境と PoC 環境間で OVF ファイルを毎回手動でやりとりするのは大変ではないでしょうか。

Amazon S3VMware Content Lirabry (コンテンツライラブリ) として活用することで、安価に仮想マシンのイメージファイルの保管することができます。

本来 Amazon S3 を VMware Content Library として利用するにはひと手間(ファイルのインデックス化)が必要なのですが、今回はその処理も AWS Lambda で自動化させます。

構成イメージ

事前にセットアップした Amazon S3 バケットに対して仮想マシンイメージ (OVF) ファイルをアップロードすることで、オンプレミスあるいはクラウド上の VMware 仮想環境 (vCenter) から VMware Content Library としてイメージファイルを利用できるようにします。

今回は VMware 仮想環境として VMware Cloud on AWS を利用していますが、
対象の VMware vCenter が Amazon S3 に対してアクセスさえ可能であればオンプレミス VMware 仮想環境からでも利用可能です。

image.png

登録されている仮想マシンイメージはそのまま仮想マシンとして VMware 仮想環境にデプロイ可能です。

image.png

手順は基本的に次の AWS re:Post 投稿をそのままなぞっていきます。

執筆時点で、Amazon S3 (標準) の東京リージョンにおけるストレージ料金は、
1 ヶ月あたり 0.025USD/GB です。
例えば 200GB のイメージファイルを 1 ヶ月保管してもたったの 5 ドル、
低頻度アクセスの S3 ストレージクラスにすると容量単価はさらに安価です。

2. セットアップしてみる

前提条件として、AWS リソース作成および設定が可能な AWS アクセス権限があること、また動作確認用に VMware 仮想マシンの OVF ファイルを持っていることが必要です。

Amazon S3 の Bucket (バケット) 作成

任意のリージョンにで作成します。
以下、各リソースに対する命名はすべて任意です。
1.png

今回は vCenter の Public IP 経由でのアクセスを想定しているので、パブリックアクセスのブロックは無効にしておきます。
2.png

その他の設定はデフォルトのままとしています。
バケットが作成されたら、「lib1」という名前のフォルダを作成しておきます。
9.png

S3 Bucket Policy の設定

特定の Public IP 経由でのアクセス許可をするため、次のように S3 Bucket Policy を設定します。
S3 Bucket の ARN は作成したものに置き換えます。

image.png

S3 Bucket Policy (sample)
{
    "Version": "2012-10-17",
    "Id": "S3BucketPolicyForVMCContentsLibrary",
    "Statement": [
        {
            "Sid": "AccessLimitationByIPADDR",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::[作成した S3 Bucket の ARN]/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "x.x.x.x/32",
                        "y.y.y.y/32"
                    ]
                }
            }
        }
    ]
}

AWS IAM 設定

AWS Lambda に S3 に対する操作権限を付与するための AWS IAM Policy / Role を作成していきます。

IAM Policy 作成

次のように IAM Policy を作成します。
i1.png

IAM Policy for Lambda (sample)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "34s3vmware",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectAttributes",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::[作成した S3 Bucket の ARN]",
                "arn:aws:s3:::[作成した S3 Bucket の ARN]/*"
            ]
        }
    ]
}

IAM Policy が作成されたことを確認します。
image.png

IAM Role 作成

先ほど作成したカスタム IAM Policy に加えて、次の 2 つの既存 IAM Policy を含む IAM Role を作成します。

AWSLambdaBasicExecutionRole
AmazonS3ObjectLambdaExecutionRolePolicy

i4.png
image.png

IAM Role が作成されたことを確認します。
image.png

AWS Lambda Function の作成

次のように Lambda Function を作成していきます。
Runtime には Python を選択し、先ほど作成したカスタム IAM Role をアタッチします。
image.png

Code Source の作成

次のように Code を編集していきます。

lambda.function.py の編集

次の GitHub 上のコードをコピー&ペーストし、デフォルトのサンプルコードを上書きして再利用します。
ファイル名は変更可能です。

image.png

また 32 行目は作成した S3 Bucket の情報に書き換えておきます。

image.png

変更前
make_vcsp_2018.make_vcsp_s3('REPLACE-ME','REPLACE-ME',False,'REPLACE-ME')
変更後 (sample)
make_vcsp_2018.make_vcsp_s3('[作成した S3 Bucket の ARN]','[作成した S3 Bucket の ARN]/lib1',False,'[作成した S3 Bucket の Region]')

編集後は保存 (Save) を忘れないようにします。

make_vcsp_2018.py の新規作成

次の GitHub 上のコードをコピー&ペーストし、make_vcsp_2018.pyというファイル名で新規作成して保存します。

image.png

image.png

Lambda Function の 詳細設定

リソース設定

必要に応じてリソース設定を編集します。
今回はデフォルトのままとします。
image.png

トリガー設定

トリガーを設定していきます。
image.png

作成した S3 Bucket に対する create delete イベントに対して、それぞれトリガーを作成します。
image.png

image.png

Lambda Function の deploy

最後に作成した Lambda Function がデプロイできることを確認しておきます。

image.png

VMware Content Library の動作テスト

Amazon S3 への OVF ファイルアップロードおよびインデックス化

対象 S3 Bucket の lib1 フォルダ配下に、任意の VMware 仮想マシンの OVF ファイルをフォルダごとアップロードします。

image.png
image.png

アップロードが完了すると自動的に Lambda によって、Amazon S3 を VMware Content Library として利用可能にするために必要なファイルのインデックス化が実行されているのが確認できます。(items.json libs.jsonファイルの作成によって確認できます。)

image.png

オブジェクトファイルの URL 取得

作成した S3 Bucket の lib1 フォルダ配下の lib.json のファイルの オブジェクト URL をコピーしておきます。
次のステップで利用します。

image.png

AWS Lambda の実行確認

Lambda Function を確認すると、わずかな時間ですがトリガーを検知して Lambda が動作していたことも確認できます。

image.png

Content Library の利用

VMware Cloud on AWS 環境の vCenter から Amazon S3 で作成した Content Library を利用します。

Amazon S3 との接続設定

今回は S3 Endpoint を利用せず、vCenter の Public IP から直接 Amazon S3 にアクセスさせます。

S3 Endpoint 経由でのアクセス無効化

VMware Cloud コンソールから、次のように S3 Gateway Endpoint 経由でのアクセス無効にしておきます。(デフォルトでは有効)
image.png

VMware Content Library の作成

次に vCenter のメニューから「コンテンツライブラリ」に遷移し、作成を選択します。
image.png

次のようにコンテンツライラブリの作成を進めていきます。
image.png

サブスクライブ済みコンテンツライブラリを選択し、先ほどコピーしておいた lib.json のファイルの オブジェクト URL を入力します。

image.png

証明書、セキュリティポリシーの適用についてはデフォルトのまま次に進みます。

image.png

利用するストレージ領域を選択します。

image.png

設定を確認し、コンテンツライブラリの作成を完了します。

image.png

同期が完了すると、次のように確認できます。

image.png

Amazon S3 にアップロードした仮想マシンイメージの OVF ファイルは OVF テンプレートとして登録されているため、そのまま仮想マシンとしてデプロイすることができます。

こちらでセットアップ手順は完了です。

(補足) Amazon S3 のアクセス制限

今回は Amazon S3 へのアクセスを IP アドレスだけに絞っています。
別のポリシーでアクセス制限をしたい場合は、AWS Policy Generator が便利なのでぜひご活用ください。

image.png

また VMware Cloud on AWS 環境においては Amazon S3 に S3 エンドポイント経由でアクセスする場合、Connected VPC 側での設定も必要になります。詳細は次の VMware Docs および AWS 公式ガイドもご参考ください。

VMware Cloud on AWS 運用ガイド | S3 エンドポイントを使用した S3 バケットへのアクセス

3. おわりに

余談ですが、Amazon S3 の VMware Content Library 利用に過去聞き覚えがある方は VMware 界隈で非常に著名な William Lam のブログを以前にご覧になったのかもしれません。

すでに 2018 年頃からブログの中で紹介されていました。

4. 参考情報

(VMware Docs )VMware Content Library について

VMware Cloud on AWS 運用ガイド | S3 エンドポイントを使用した S3 バケットへのアクセス

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?