VMware Cloud on AWSとAmazon VPCの接続パターン & ENI経由での接続詳細

# はじめに
<!-- 発端や概要を記載 -->
今後 VMware Cloud on AWS (VMC) とネイティブ AWS サービスの連携例をいくつか紹介していきたいなと思っていますので、今回は AWS サービスが稼働する Amazon VPC と VMC の接続パターンと、その中の一つである Elastic Network Interface (ENI) 経由での接続の詳細について解説してみたいと思います。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [VMware Cloud on AWS と Amazon VPC の接続パターン](#vmware-cloud-on-aws-と-amazon-vpc-の接続パターン)
1. [ENI 経由での接続の仕組み](#eni-経由での接続の仕組み)
1. [ENI の詳細](#eni-の詳細)
1. [ENI での接続の場合の考慮点](#eni-での接続の場合の考慮点)
1. [まとめ](#まとめ)
1. [参考文献及び関連記事](#参考文献及び関連記事)

<!-- 各チャプター -->
# VMware Cloud on AWS と Amazon VPC の接続パターン
VMC の Software-Defined Data Center (SDDC) と Amazon VPC の接続は大きく分けて 3 つのパターンがあります。
1. Elastic Network Interface (ENI) 経由での接続
1. AWS Transit Gateway との接続
1. VTGW との接続
※ VTGW: VMware Transit Connect サービスにおける AWS Transit Gateway 機能の総称

今回は、その中で一番シンプルな接続パターンである ENI 経由での接続を紹介いたします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/6490554b-e61c-a11f-fdcd-627736cee417.png)


# ENI 経由での接続の仕組み
ENI 経由でどのように VPC と接続されるか仕組みを簡単に見ていきたいと思います。

最初に SDDC を作成する際に、接続をする AWS アカウントの指定、そしてそのアカウント内の VPC、サブネットの指定をするステップがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/7de87ddd-2d30-7b29-bbb0-dd231bc0b685.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/31a71d4f-5871-5b30-19d7-4f4d2648b114.png)


上記で指定したサブネット上に ENI が作成されて、それが SDDC と接続をする形となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/e44e7176-4e0b-c4b9-dd89-3121a2c78c6f.png)

仮想マシンはコンピューティングゲートウェイ / CGWという分散論理ルーターに接続をいたします。
仮想マシンの論理ネットワークを複数自由に作成する事が出来、好きなIPアドレスレンジが指定が出来ます。
以下では例として2つの論理ネットワークを作成しています。
論理ネットワークを作成するとAWSアカウント内の、VPCのルートテーブルが自動的に更新され、セグメントの情報が追加されます。この為、低遅延かつプライベート接続でAWSサービスと接続が可能となります。
そして同じ AZ 内の通信に関してはデータ転送費用も発生しないというメリットがあります！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/478a1fb6-fc70-2347-aa9c-a3f7ea27736d.png)

ENI が実際にどう作成されているか、AWS マネジメントコンソールにアクセスし、構成を確認してみます。
ENI は AWS マネジメントコンソールから、[EC2] -> [ネットワーク & セキュリティ] -> [ネットワークインターフェイス] にて確認できます。

以下の通り、SDDC 作成時に指定したサブネットに 17 個の ENI が作成されています。
また今回は 2 ホストで構成した為、2 ホスト分の ENI が In-use のステータスになっています。例えば 6 ホストでデプロイした場合は、6 個の ENI が In-use のステータスになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/03e09e35-6372-4dc4-72d2-c957eacfb08f.png)

ルートテーブルの構成は以下の通りです。SDDC の管理サブネットとして指定した 10.2.0.0/16 と、ワークロード用のセグメントとして作成した 192.168.xxx.0/24 が ENI 経由になるよう自動構成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/c0d19a6b-9d1b-b74e-d54c-109844092c33.png)

こちらはVMCコンソール側で見たワークロード用のセグメント一覧です。「ルーティング」として指定したセグメントが全て上記のルートテーブルに反映されている事が見ていただけるかと思います。
また、セグメントの追加を行うと即時にVPC側のルートテーブルに追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/10187052-b630-18e2-a5e5-4f647935550b.png)



この為、以下のように VPC 上の AWS サービスから仮想マシンに対して NAT などを行う必要なく、直接仮想マシンの IP アドレスを指定してプライベートで接続が可能です。（逆に仮想マシンから AWS サービスに対してももちろん接続が可能です）
```
EC2 から VMC 上の Linux VM へ SSH でアクセス
[ec2-user@ip-10-0-165-11 ~]$ ssh tc@192.168.160.2
tc@192.168.160.2's password: 
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

tc@box:~$ 
```

# ENI の詳細
補足までにENIについてもう少し深掘りしてみます。
標準クラスタの場合、SDDC デプロイ時に ENI が指定したサブネット上に 17 個作成されます。この ENI は、各 ESXi にそれぞれマッピングされ、アクティブな NSX-T Edge が稼働している ESXi にマッピングされた ENI がアクティブな ENI として機能します。
[ENI 経由での接続の仕組み](#eni-経由での接続の仕組み)で紹介した環境では、ENI eni-0f38bb6ddacabxxxx にマッピングされた ESXi 上でアクティブな NSX Edge が稼働している為、各セグメントのターゲットとして指定されていました。

尚、"17 個" というのは、1 つ目のクラスタに最大 16 個 ESXi が構成可能 + フェイルオーバー用に 1 つ確保している為です。SDDC デプロイ時のホスト数に関わらず、17 個作成されます。
尚、SDDC あたり最大で 20 個クラスタが作成可能ですが、ENI が作成されるのは最初のクラスタのみです。（NSX などの管理コンポーネントは最初のクラスタにのみ作成される為です。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/91e2a5c3-d44f-3fc6-deb9-23c91bf60ac9.png)

アクティブな NSX-T Edge がメンテナンスや障害などで別の ESXi に移動した場合は、それに呼応してアクティブなENIも自動で切り替わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/3a0736ce-60c9-c5e3-8a2d-0797e5e28937.png)




# ENI での接続の場合の考慮点
最後に　ENI での接続の際の一般的な考慮点、ベストプラクティスについて列記します。
- 仮想マシンで利用する論理ネットワークと VPC 間で IP アドレスの重複がないようネットワークセグメントの設計を行う。
- SDDC 毎に専用のプライベートサブネット（/26）の用意が推奨
- ENI が作成される Connected VPC では、メイン ルートテーブルを利用する。（カスタム ルート テーブルの使用はサポートされません）
    - SDDC 側で論理ネットワークを作成した場合や、ENI のフェイルオーバーを行う際に、メインルートテーブルに対して自動で変更を行う為です。



# まとめ
今回は、Elastic Network Interface (ENI) 経由での VMware Cloud on AWS と Amazon VPC の接続について解説してみました。ENI 経由での接続により、AWS サービスとプライベート、かつ高速に接続をする事ができます。
そして同じ AZ 内の通信に関してはデータ転送費用も発生しないというメリットがあります。
まずはオンプレミス環境にあるアプリケーションを VMC にリロケートし、段階的に AWS のネイティブサービスと連携をするといったステップを取ることが可能です。AWS サービスとの連携により、ライセンスコストの圧縮や、高可用性、スケーラビリティーの確保など、クラウドのさらなるメリットを享受することが可能です。
今後は ENI 経由で色々な AWS サービスとの接続例について紹介していきたいと思います！

# 参考文献及び関連記事
- [Software-Defined Data Center (SDDC) の展開と管理](https://docs.vmware.com/jp/VMware-Cloud-on-AWS/services/com.vmware.vmc-aws-operations/GUID-BC0EC6C5-9283-4679-91F8-87AADFB9E116.html)
- [ストレッチクラスタをデプロイしてみる (VMware Cloud on AWS)](https://qiita.com/mtoyoda/items/8927b737df20d9c5d339)