AWS Transform for VMware でも活用できる Import/Export for NSX で VMware NSX の構成を保存してみた

:::note info
Amazon Q Developer は AWS Tranform としてリブランディングされ 2025 年 5 月 に一般提供が開始されました。以下、Amazon Q Developer と記載されている部分は AWS Transform に読み替えてください。
:::


## はじめに
Import/Export for NSX は、VMware NSX の構成を zip ファイルにエクスポートするために使用できる新しい AWS オープンソースツールです。
re:Invent 2024 にて Preview として発表された Amazon Q Developer transformation capabilities for VMware でも活用できるこの Import/Export for NSX を使ってみました。

## Import Export for NSX の概要
VMware NSX を使っていると、現時点の構成を保管しておきたいと思うことがあります。
例えば、検証環境構築後、環境を削除する前の構成のバックアップ、検証環境から本番環境への移行、リージョン間移行などのケースが当てはまると思います。

そこで活躍するのが今回紹介する "Import/Export for NSX" です。
Import/Export for NSX は、VMware NSX の構成を zip ファイルにエクスポートするために使用できる新しい AWS オープンソースツールです。

VMware Flings で公開されていた SDDC Import/Export for VMware Cloud on AWS Tool にも Contributor として参画していた [Patrick Kremer](https://vexpert.vmware.com/directory/6542) 氏によって作成されております。
この観点から Import/Export for NSX の構成や使い方は、SDDC Import/Export for VMware Cloud on AWS Tool に非常に似ています:grinning:

詳細や使い方の詳細については、GitHub に全て載っていますので、そちらをご覧ください。

https://github.com/awslabs/import-export-for-nsx/

## 使ってみた

今回は VMware Cloud on AWS の環境において NSX の構成情報を保存してみます。

1. Python3 を手元の環境で使えるようにします。バージョン 3.10 以降が必要です。
1. ツールのダウンロード（必要に応じて仮想環境をアクティブにして下さい）

        git clone https://github.com/awslabs/import-export-for-nsx.git
        cd import-export-for-nsx
        pip3 install -r requirements.txt
 
    上記を実行したうえで、 ```Successfully installed ~~``` と表示されていれば問題ありません。

    
1. VMware Cloud on AWS の API トークンを生成
    VVMware Cloud on AWS トークンを生成します。トークンには、**VMware Cloud on AWS の Administrator ロール**と **NSX Cloud Admin** ロールが必要です。トークンの生成手順については、[VMware Docs](https://docs.vmware.com/jp/VMware-Cloud-services/services/Using-VMware-Cloud-Services/GUID-E2A3B1C1-E9AD-4B00-A6B6-88D31FCDDF7C.html) を参照ください。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/06933947-5aba-0e29-ea94-e22518b7156c.png)


1. VMware Cloud on AWS SDDC から組織 ID と SDDC ID を取得します。これらは SDDC の [サポート] タブにあります。

1. 環境変数を作成します。

    ```bash
    EXP_source_refresh_token="xxxxx"
    export EXP_source_refresh_token
    EXP_source_org_id="xxxxx"
    export EXP_source_org_id
    EXP_source_sddc_id="xxxxx"
    export EXP_source_sddc_id
    ```


1. Export の実行
    ```python3 nsx_import_export.py -o export``` コマンドで Export を実行します。
    VMware Cloud on AWS から Export をする場合でも、オンプレミスの NSX から Export する場合でも、同じコマンドを実行してエクスポートを実行します。
    
    以下のように出力されました。
    ```
    % python3 nsx_import_export.py -o export
    Overriding nsx_domain_name, forcing to cgw because nsx_endpoint_type=vmc
    Loaded source refresh token from environment variable
    Loaded source org ID from environment variable
    Loaded source SDDC ID from environment variable
    Not loading local NSX environment variables because auth_mode=token
    Current authentication mode: token
    Token expires at 2024-12-05 15:30:05.818044
    Exporting data from org XXXXXXXXXXXXXX (XXXXXXXXXXXXXX), SDDC XXXXXXXXXXXXXX (XXXXXXXXXXXXXX), SDDC version 1.22v8
    Deleting old JSON export files...
    Source SDDC Info exported.
    Beginning Services export...
    SDDC services exported.
    Beginning Tags export...
    SDDC tags exported.
    Beginning Domains export...
    Domains exported.
    Beginning Gateway Policies export...
    Gateway Policies exported.
    Beginning VMs export...
    SDDC VMs exported.
    Beginning VM VIFs export...
    SDDC VM VIFs exported.
    MGW export skipped.
    Beginning CGW export...
    CGW groups exported.
    Suppress True
    Checking CGW rules to suppress default VTI rule...
    Suppressed default VTI rule, cgw_suppress_vti_export=True
    CGW rules exported.
    Multi-T1 CGW export skipped: mcgw_export=False, auth_mode=token
    Multi-T1 static routes export skipped: mcgw_static_routes_export=False, auth_mode=token
    Multi-T1 Firewall Policy and Rules export skipped: mcgw_fw_export=False, auth_mode=token
    Connected VPC Managed Prefix List export skipped: mpl_export=False, auth_mode=token
    SDDC Route Aggregation list export skipped: ral_export=False, auth_mode=token
    Beginning SDDC route configuration export
    SDDC Route Configuration exported
    Beginning network segments export...
    Networks exported.
    Flexible segment and segment discovery profile bindings export skipped: flex_segment_export=False, auth_mode=token
    Beginning DFW export...
    DFW rules exported.
    Beginning Public IP export...
    Public IP exported.
    Beginning NAT export...
    NAT rules exported.
    NSX Advanced Firewall export skipped: nsx_adv_fw_export=False, auth_mode=token
    Service access export skipped: nsx_adv_fw_export=False, auth_mode=token
    VPN export skipped: vpn_export=False, auth_mode=token
    Tier-1 VPN export skipped: tier1_vpn_export=False, auth_mode=token
    FQDN profile export skipped: nsx_l7_fqdn_export=False, auth_mode=token 
    NSX L7 Context Profile export skipped: nsx_l7_context_profile_export=False, auth_mode=token 
    JSON files successfully zipped into vmc_2024-12-05_15-00-34_json-export.zip
    export_purge_after_zip flag is true, deleting JSON files
    Deleted json/dfw.json
    Deleted json/vm-vifs.json
    Deleted json/natrules.json
    Deleted json/services.json
    Deleted json/dhcp-static-binding.json
    Deleted json/vms.json
    Deleted json/sddc_info.json
    Deleted json/cgw.json
    Deleted json/domains.json
    Deleted json/route_config.json
    Deleted json/public.json
    Deleted json/cgw_groups.json
    Deleted json/dfw_details.json
    Deleted json/tags.json
    Deleted json/gateway-policy.json
    Deleted json/cgw-networks.json
    1 zipfiles found with a configured maximum of 1
    Zipfile maintenance completed with no errors.
    Export has been concluded. Thank you for using Import/Export for NSX.
    ```

    ```json``` フォルダに _json-export.zip ファイルが作成されます。

## zip ファイルの中身

zip ファイルを解凍すると様々な json ファイルが含まれておりました。
例えば cgw.json には CGW のゲートウェイ ファイアウォールのルール情報などが含まれています。
```
cgw-networks.json
cgw.json
cgw_groups.json
dfw.json
dfw_details.json
dhcp-static-binding.json
domains.json
gateway-policy.json
natrules.json
public.json
route_config.json
sddc_info.json
services.json
tags.json
vm-vifs.json
vms.json
```

## 取得した構成情報（zip ファイル）は Amazon Q Developer transformation capabilities for VMware で利用できる！

AWS re:Invent 2024 にて [Amazon Q Developer transformation capabilities for VMware](https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-q-developer-transformation-capabilities-vmware-preview/) の Preview が発表されました。これを利用することによって、VMware ワークロードの Amazon EC2 への移行を簡素化し、加速することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/2829efb3-8550-b6ae-4825-6e8db6cf3f0c.png)


既存環境で VMware NSX を使用している場合は、すべてのネットワークとファイアウォールルールを変換するオプションがあります。今回紹介した Import/Export for NSX を利用することで、NSX の情報をもとに Amazon VPC のサブネットやセキュリティグループの作成を大幅に簡素化することができるようになります！
詳細は、以下の AWS ブログを参照ください。

https://aws.amazon.com/jp/blogs/migration-and-modernization/getting-started-with-amazon-q-developer-transform-for-vmware/


## まとめ

Import/Export for NSX を用いて、非常に簡単にオンプレミスまたは VMware Cloud on AWS の NSX 構成をバックアップを取得することができました。
既存環境の構成取得・バックアップの用途のみでなく、Amazon EC2 への移行としても活用できますので是非活用してみて下さい。

## 参考文献

https://aws.amazon.com/jp/blogs/migration-and-modernization/exporting-network-configuration-data-with-import-export-for-nsx/

**DevelopersIO**: [SDDC Import/Export for VMware Cloud on AWS Tool で構成を保存してみた](https://dev.classmethod.jp/articles/sddc-export-tool-for-vmc/)

## 関連文書

https://qiita.com/mtoyoda/items/b85a57267a4a37a34ee1

https://qiita.com/mtoyoda/items/27051312ce20b681480f

https://qiita.com/mtoyoda/items/64094a969a2d92a67827