【OCI クラウド移行ガイド】 AWSとOCIをプライベートDNSピアリングで相互参照してみた

# OCIクラウド移行ガイドとは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア（@araidon,@kazunishi,@yama6）による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。

https://qiita.com/yama6/items/b197c0fe3ec75eb02637

# 移行したいサンプルワークロード
日々の業務でよく目にするサービスを中心に、サンプルワークロードとしてまとめてみました。このシリーズでは、主にAWSからの移行を取り上げます。
このワークロードは、ユーザがログインして、Web上で写真を共有するWebサービスをイメージしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/1c9074f1-d4df-e201-1274-0b92d49837e1.png)

# 移行するサービス：Amazon VPC内のリソース群

今回は下記記事の続編として、VPCとVCNのDNS相互参照の手順をガイドします。

https://qiita.com/yama6/items/c188de191269cb604341

相互DNS参照（相互ドメイン名解決）は、異なるクラウドプラットフォームや異なるネットワーク環境において、複数のドメインやサービスがお互いに名前解決を行えるようにするための仕組みです。これにより、異なるクラウド環境やネットワーク間でのシームレスな通信や連携が可能になります。

# 移行方式

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/56884877-2244-90f1-66e7-6d2c277fcaf3.png)


AWSのVPCとOCIのVCN間でプライベートDNSピアリング接続を作成します。
OCIでは、VCNから直接アクセス可能な**プライベートDNSリゾルバ**が提供されています。
この機能により、異なるクラウドプラットフォームのDNSと連携し、DNSクエリの転送ルール（リゾルバ・ルール）に基づき名前解決を行うことができます。

作成後、AWSのプライベートサブネットにあるEC2と、OCIのプライベートサブネットにあるComputeVMのそれぞれが持つ内部FQDN（AWSで言うプライベートIP DNS名）に対してpingを送り合って相互参照を確認します。


# 前提条件

前提条件は、前述した記事でAWSとOCI間でVPN接続が確立されていることです。
IPアドレスはそのまま引き継いで記事を作成しているので、VPN接続から作成される方はご参照ください。
また、Amazon EC2,OCI ComputeVMのプライベートIPアドレスに対してpingが通ることを確認してください。

Amazon EC2→OCI Compute
```
[ec2-user@ip-10-1-1-66 ~]$ ping 10.2.1.214
PING 10.2.1.214 (10.2.1.214) 56(84) bytes of data.
64 bytes from 10.2.1.214: icmp_seq=1 ttl=61 time=5.23 ms
64 bytes from 10.2.1.214: icmp_seq=2 ttl=61 time=5.03 ms
64 bytes from 10.2.1.214: icmp_seq=3 ttl=61 time=5.09 ms
64 bytes from 10.2.1.214: icmp_seq=4 ttl=61 time=5.12 ms
64 bytes from 10.2.1.214: icmp_seq=5 ttl=61 time=6.56 ms
```
OCI Compute→Amazon EC2
```
[opc@toaws-instance ~]$ ping 10.1.1.66
PING 10.1.1.66 (10.1.1.66) 56(84) bytes of data.
64 bytes from 10.1.1.66: icmp_seq=1 ttl=125 time=4.89 ms
64 bytes from 10.1.1.66: icmp_seq=2 ttl=125 time=5.24 ms
64 bytes from 10.1.1.66: icmp_seq=3 ttl=125 time=4.73 ms
64 bytes from 10.1.1.66: icmp_seq=4 ttl=125 time=4.89 ms
64 bytes from 10.1.1.66: icmp_seq=5 ttl=125 time=4.93 ms
```


# 移行手順

1. ドメイン名の確認
2. OCI Private DNSリゾルバの設定
3. Amazon Route 53 Resolverの設定
3. OCI Private DNS リゾルバ・ルールの設定
3. Amazon Route 53 リゾルバ・ルールの設定
3. OCIセキュリティリストとAWS セキュリティグループの設定
3. 疎通確認

# 1. ドメイン名の確認
のちの設定、疎通確認で必要となるリソースのドメイン名を確認します。

# 1-1. VPCとVCNのDNS ドメイン名確認
まずは、AWS,OCIそれぞれで仮想ネットワークのDNS名を確認します。

# 1-1-1. VPCのDNS ドメイン名確認

VPCの画面から、DHCP オプションセットをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/a05e7cdd-b0d6-07aa-bc96-c89ae6501953.png)

domain-nameを確認します。
ここに表示されるドメイン "ap-northeast-1.compute.internal" が、VPCのDNSドメインになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/eb13e982-3034-49d0-31ae-7b801f433e0e.png)

:::note warn
米国東部（バージニア北部）リージョンでは、domain-nameが"ec2.internal"になります。
:::

# 1-1-2. VCNのDNS ドメイン名確認
ネットワーキング>仮想クラウド・ネットワークから、仮想クラウド・ネットワークの詳細画面に遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/97b0a159-2bb7-fb31-165a-0ad367997b71.png)


DNSドメイン名を確認します。
ここに表示されるドメイン "testvcn.oraclevcn.com" が、VCNのDNSドメイン名になります。

# 1-2. Computeリソースのドメイン名確認
次に、Computeリソースのドメイン名を確認します。
本トピックの最後に、DNS設定前にホスト名(FQDN)での接続ができない状態であることを確認します。

# 1-2-1. Amazon EC2のドメイン名確認
EC2>インスタンスから、インスタンス概要画面に遷移します。
プライベートIP DNS名を参照します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/604f7db0-7b90-f200-55b0-bc293f10f92c.png)

# 1-2-2. OCI Computeリソースのドメイン名確認
コンピュート>インスタンスから、インスタンスの詳細画面に遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/1eee2a70-3bf3-0dca-b1eb-0698c19dcc63.png)


内部FQDNの表示ラベルをクリックし、表示されたドメイン名を確認します。

それぞれのドメイン名に対してpingコマンドを実行します。

Amazon EC2→OCI Compute
```
[ec2-user@ip-10-1-1-66 ~]$ ping toaws-instance.testprisubnet.testvcn.oraclevcn.com
ping: toaws-instance.testprisubnet.testvcn.oraclevcn.com: Name or service not known
```

OCI Compute→Amazon EC2
```
[opc@toaws-instance ~]$ ping ip-10-1-1-66.ap-northeast-1.compute.internal
ping: ip-10-1-1-66.ap-northeast-1.compute.internal: Name or service not known
```
どちらも"Name or service not known"と表示され、ホスト名では疎通ができないことがわかります。

# 2. OCI Private DNSリゾルバの設定

Private DNSリゾルバを設定していきます。
VCNの詳細画面から、DNSリゾルバのラベルをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/7baad54d-52c5-27e0-604f-6f2263535c89.png)

プライベート・リゾルバの詳細画面に遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/0b3cb8bc-c3d3-92ba-95ba-daa4a0c8ac58.png)

画面左の「リソース」から、「エンドポイント」を押下します。
エンドポイントの画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/6b66522a-07b3-f93b-66f4-6d5e1e4ba927.png)

「エンドポイントの作成」ボタンを押下します。
すると、画面右にエンドポイント作成画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/fca740c4-eeb3-a838-75ae-bc9cff00c49b.png)

ここから、DNS相互参照するVCN内のサブネットに下記の２つのエンドポイントを作成していきます。

|エンドポイント  |役割
|---|---
|リスナー  |VCNのプライベートDNSドメイン名に対する外部リクエストをリスニングする
|フォワーダー  |内部リソースから外部プライベートDNSドメイン名にリクエストを転送する

詳細は、公式ドキュメントのリゾルバ・エンドポイントのページをご参照ください。

https://docs.oracle.com/ja-jp/iaas/Content/Network/Concepts/dns-topic-resolver_endpoints.htm

# 2-1. リスナー（リスニング）エンドポイントの作成

リスナーを作成していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/2dcab381-38b4-159c-36c8-2e4f894606e3.png)

名前を入力し、対象のプライベートサブネットを選択します。
エンドポイント・タイプで「リスニング」を選択します。

# 2-2. フォワーダー（転送）エンドポイントの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/ec68106d-c263-85da-2a5d-64ba72f1ca30.png)

名前を入力し、対象のプライベートサブネットを選択します。
エンドポイント・タイプで「転送」を選択します。

リスナー、フォワーダー双方のエンドポイントが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/1caf368e-984b-6c9a-1b35-e4c353e88af0.png)

# 3. Amazon Route 53 Resolverの設定

次に、AWSでもエンドポイントを作成していきます。
AWSでは、DNSサービスであるRoute 53を用いて設定していきます。

Route 53のサービスページに遷移した後、左上のハンバーガーメニューから、「リゾルバー」の「インバウンドエンドポイント」、「アウトバウンドエンドポイント」にそれぞれ遷移します。

# 3-1. インバウンドエンドポイントの作成

遷移後、「インバウンドエンドポイントの作成」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/458c8095-9701-977f-81b3-95e1c91c6678.png)

インバウンドエンドポイントの作成画面が表示されます。
下記の通り、項目を入力、選択していきます。

|項目  |入力内容
|---|---
|インバウンドエンドポイントの全般設定|
|エンドポイント名  |OCIinboundendpoint（任意）
|当該リージョンの VPC: ap-northeast-1 (東京) |VPN接続を有効にしたVPCを選択
|このエンドポイントのセキュリティグループ  |プライベートサブネットにあるEC2に対して設定したセキュリティグループを選択
|エンドポイントのタイプ  |IPv4を選択
|IP アドレス|
|IP アドレス #1|
|アベイラビリティーゾーン|（EC2が存在するAZを選択）
|サブネット|（EC2が存在するプライベートサブネットを選択）
|IPv4 アドレス|自動的に選択された IPv4 アドレスを使用します。
|IP アドレス #2|
|アベイラビリティーゾーン|（EC2が存在するAZを選択）
|サブネット|（EC2が存在するプライベートサブネットを選択）
|IPv4 アドレス|自動的に選択された IPv4 アドレスを使用します。
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/044061a6-cf2f-0092-b40c-cb1f0c9eca95.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/26dba985-d639-7edd-411b-284a46af1fb8.png)

入力後、「インバウンドエンドポイントの作成」ボタンを押下します。

作成が完了すると、ステータスが「実行中」となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/41df50bd-9b9a-99c4-73fc-9bdd1865bc6d.png)

IDラベルをクリックすると、この操作で作成されたIPアドレスが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/ac3978a8-a52d-e5e6-35de-ccae76729d16.png)

# 3-2. アウトバウンドエンドポイントの作成

同様に、アウトバウンドエンドポイントを作成していきます。
「アウトバウンドエンドポイントの作成」ボタンを押下します。
下記の通り、項目を入力、選択していきます。

|項目  |入力内容
|---|---
|アウトバウンドエンドポイントの全般設定|
|エンドポイント名  |OCIoutboundenpoint（任意）
|当該リージョンの VPC: ap-northeast-1 (東京) |VPN接続を有効にしたVPCを選択
|このエンドポイントのセキュリティグループ  |プライベートサブネットにあるEC2に対して設定したセキュリティグループを選択
|エンドポイントのタイプ  |IPv4を選択
|IP アドレス|
|IP アドレス #1|
|アベイラビリティーゾーン|（EC2が存在するAZを選択）
|サブネット|（EC2が存在するプライベートサブネットを選択）
|IPv4 アドレス|自動的に選択された IPv4 アドレスを使用します。
|IP アドレス #2|
|アベイラビリティーゾーン|（EC2が存在するAZを選択）
|サブネット|（EC2が存在するプライベートサブネットを選択）
|IPv4 アドレス|自動的に選択された IPv4 アドレスを使用します。
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/6b5f5990-a42c-2ae2-24bb-a540fa31592c.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/0a6a43a5-b50f-196d-d8f3-741b78717113.png)

入力後、「アウトバウンドエンドポイントの作成」ボタンを押下します。

作成が完了すると、ステータスが「実行中」となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/7f4ad620-39d7-7aca-ee02-012d5ccf4ef8.png)

IDラベルをクリックすると、この操作で作成されたIPアドレスが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/e5f93f86-7a9f-b2fb-a737-9f2ff3ed728e.png)

:::note warn
課金注意
Amazon Route 53 リゾルバーエンドポイントは、0.125USD ENI / 時間で課金が発生します。
https://aws.amazon.com/jp/route53/pricing/
インバウンド、アウトバウンドでそれぞれ4つのエンドポイントを作成したため、1時間当たり0.5USDの課金となり、1日で12USDほどになります。
検証用途で作成される方は、無駄な課金を防ぐために速やかな削除を推奨します。
なお、OCIのエンドポイントは無償で提供されています。
:::

# 4. OCI Private DNS リゾルバ・ルールの設定
前章までで、それぞれのクラウドにおいてエンドポイントを作成しました。
これらを使って、転送ルールであるリゾルバ・ルールを設定していきます。
まずは、OCIから設定していきます。

さきほど「OCI Private DNSリゾルバの設定」で表示した「プライベート・リゾルバの詳細」画面の、左下「リソース」から「ルール」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/6cdc0bf5-02e9-e5d7-fb8c-e276b6a7332d.png)

「ルールの管理」ボタンを押下します。
下記の内容を設定します。

|項目  |入力内容
|---|---
|ルール条件|ドメイン
|ドメイン|ap-northeast-1.compute.internal(「1-1-1. VPCのDNS ドメイン名確認」で確認したVPCのFQDN)
|ソース・エンドポイント|AWSForwarder（「2-2. フォワーダー（転送）エンドポイントの作成」で作成したフォワーダー）
|宛先IPアドレス|「3-1. インバウンドエンドポイントの作成」で生成されたインバウンドエンドポイントのIPアドレス（どちらかひとつ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/d460ce3e-f7a9-be84-1d5c-7a4dbd49d673.png)

「変更の保存」ボタンを押下します。
すると、下記のようにルールが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/a320e8c4-a82c-168e-f759-da615782ae2c.png)

設定した内容をざっくりご説明すると、VPCのFQDNに対して、OCIのフォワーダーから、AWSのインバウンドエンドポイントを通ってDNSクエリを転送するよというものです。

# 5. Amazon Route 53 リゾルバ・ルールの設定

次に、AWS側でも転送ルール（リゾルバ・ルール）を設定していきます。
左上のハンバーガーメニューから、「リゾルバー」の「ルール」に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/47ac0a18-17b5-39f3-8c5e-5be475061629.png)
「ルールの作成」のボタンを押下します。

|項目  |入力内容
|---|---
|名前|AWS-OCI_DNSRule（任意）
|ルールタイプ|転送
|ドメイン名|testvcn.oraclevcn.com
|このルールを使用する VPC - オプション|(VPN接続を設定したVPCを選択)
|アウトバウンドエンドポイント|「3-2. アウトバウンドエンドポイントの作成」で作成したAWSのアウトバウンドエンドポイントを選択
|ターゲット IP アドレス|「2-1. リスナー（リスニング）エンドポイントの作成」で作成したOCIのリスナーIPアドレス
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/daaeeaf7-ce28-4754-ead6-22014278beb5.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/24ebdaa8-22f8-11e7-4c4b-fb74250350b6.png)

「送信」ボタンを押下します。
新しいルールが正常に作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/b235e2e4-8c47-bf48-1fdd-da214c17b3b0.png)

# 6. OCIセキュリティリストとAWS セキュリティグループの設定

VPC,VCNそれぞれのセキュリティグループ、セキュリティリストのインバウンドで53番ポート、UDP,TCPプロトコルを通す設定を行う必要があります。

# 6-1. AWSのインバウンド設定

疎通を行うEC2からセキュリティグループに遷移します。
AWS側での設定は下記のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/0e4b3f56-4ffc-cced-200b-a5a1abb24df9.png)

今回、pingを使用した疎通を行うためICMPプロトコルを許可しています。
また、ポート範囲53で、UDP,TCPを許可しています。

# 6-2. OCIのインバウンド設定

疎通を行うVCNからセキュリティリストに遷移します。
OCI側での設定は下記のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/00ce73f1-8b44-d2f6-462e-577f4f852450.png)

AWSのVPC(10.1.0.0/16)から、ICMPプロトコル、宛先ポート53でUDP,TCPを許可しています。ルールの追加は、「イングレスルールの追加」から行ってください。


# 7. 疎通確認

では最後に、疎通確認を行います。
それぞれCloud shellからプライベートサブネット上のインスタンスにログインし、「1-2. Computeリソースのドメイン名確認」で確認したインスタンスのFQDN(ホスト名)にpingコマンドを実行します。

AWS→OCI
```
[ec2-user@ip-10-1-1-66 ~]$ ping toaws-instance.testprisubnet.testvcn.oraclevcn.com
PING toaws-instance.testprisubnet.testvcn.oraclevcn.com (10.2.1.214) 56(84) bytes of data.
64 bytes from ip-10-2-1-214.ap-northeast-1.compute.internal (10.2.1.214): icmp_seq=1 ttl=61 time=5.22 ms
64 bytes from ip-10-2-1-214.ap-northeast-1.compute.internal (10.2.1.214): icmp_seq=2 ttl=61 time=5.33 ms
64 bytes from ip-10-2-1-214.ap-northeast-1.compute.internal (10.2.1.214): icmp_seq=3 ttl=61 time=5.35 ms
64 bytes from ip-10-2-1-214.ap-northeast-1.compute.internal (10.2.1.214): icmp_seq=4 ttl=61 time=5.23 ms
64 bytes from ip-10-2-1-214.ap-northeast-1.compute.internal (10.2.1.214): icmp_seq=5 ttl=61 time=5.36 ms
```
OCI→AWS
```
[opc@toaws-instance ~]$ ping ip-10-1-1-66.ap-northeast-1.compute.internal
PING ip-10-1-1-66.ap-northeast-1.compute.internal (10.1.1.66) 56(84) bytes of data.
64 bytes from 10.1.1.66 (10.1.1.66): icmp_seq=1 ttl=125 time=5.45 ms
64 bytes from 10.1.1.66 (10.1.1.66): icmp_seq=2 ttl=125 time=5.48 ms
64 bytes from 10.1.1.66 (10.1.1.66): icmp_seq=3 ttl=125 time=5.39 ms
64 bytes from 10.1.1.66 (10.1.1.66): icmp_seq=4 ttl=125 time=5.21 ms
64 bytes from 10.1.1.66 (10.1.1.66): icmp_seq=5 ttl=125 time=5.46 ms
```

疎通確認結果

|AWS→OCI  |OCI→AWS
|---|---
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/796e6a47-4e01-4842-ee5a-51a5f6df3819.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/0ab19bb0-3831-3acd-22ba-262fad2efbdb.png)

# 8.まとめ
異なるクラウド間で相互DNS参照を設定することで、動的なIPアドレスを持つプライベートリソースに対して、リソースのホスト名を接続先に指定して、セキュアなアクセスを実現できます。
移行作業を行う上でも、相互のクラウド間でホスト名指定によるリソースの通信が役立つことがあります。
マルチクラウド構成の実現、移行作業を行う上でこの記事が一助になりましたら幸いです。

# 参考記事

https://www.ateam-oracle.com/post/inter-cloud-private-dns-peering-between-oci-and-aws

https://docs.oracle.com/ja-jp/iaas/Content/Network/Concepts/dns-topic-resolver_endpoints.htm