AWS Privatelink (NLB不要版) を使ってみる (2) RDSへの接続

# 1. はじめに
- 前回の記事「[AWS Privatelink (NLB不要版) を使ってみる](https://qiita.com/mksamba/items/32a63fbabc3b32975f31)」にて、別のVPCからのアクセスを従来のNLBではなくResource Gatewayを用いて受け付ける構成について検証した。
- 前回の記事ではResource Gatewayを用いて、EC2インスタンス(nginx)に対して外部から接続する設定としたが、本記事ではEC2インスタンスではなく、RDSインスタンス(RDS for Oracle)に対しての接続を設定し動作確認を行い、どこが違うのかなどを確認する。

# 2. やったこと
- VPC1にRDS for Oracle(接続される用)を作成
- VPC1にResource Gateway/Resource Configuration(VPC外からの接続を受けるための設定)を作成
- VPC2にOracleのクライアント(sqlplus)を作成
- VPC2にResource Endpoint(VPC1のResource Configurationと繋ぐためのEndpoint)を作成
- VPC2のクライアントから上記の経路を使用してVPC1のRDS for Oracleへ接続
- RDS for Oracle のAct/Sbyの系切替をしても切替後に接続できることを確認

# 3. 構成図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/f6d871d0-7e22-9d7e-6cec-d635d20b5ff2.png)



# 4. 手順

## 4.1 事前準備
- VPC1/VPC2を作成し、VPC1側にResource Gatewayを作成する。手順は前回の記事「[AWS Privatelink (NLB不要版) を使ってみる](https://qiita.com/mksamba/items/32a63fbabc3b32975f31)」を参照。
- VPC1内にRDS for Oracle をスタンバイインスタンス有りで作成する。手順は以前の記事「[【初心者】いまさら Amazon RDS for Oracle に入門する](https://qiita.com/mksamba/items/6010ff36f48b2ea7f989)を参照。

## 4.2 Resource Configurationの作成

- 前回の記事で作成したResource Gateway(nginxインスタンスへのResource Configurationを含む)にて、追加のResource Configurationを作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/f128db24-c813-b809-819d-a5699ffc2cfa.png)

- TypeをARN、Resource typeをRDSとすると、接続したいRDS Databaseが選択できるようになるため、事前に作成したRDS for Oracleを選択する。
- 動作確認のため、CloudWatchへのログ出力を設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/66b9d515-f70b-0a6e-9b36-94155cab9410.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/85ce0eca-1338-48cc-903a-a34fff3343cd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/6b489120-5b06-751d-1ad8-784415617120.png)

- 作成後、Type: ARN と Type: Child の 2つのConfigurationが作成される。ARNの子設定としてChildがあり、Child側にポート番号などの詳細が入っているイメージ。(Type: Singleは前回の記事で作成したEC2インスタンスへの接続用のConfiguration)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/db805c7a-11c4-1990-bad1-69dbff6c28bd.png)

## 4.3 Resource Endpointの作成

- VPC2側に、RDS for Oracle接続用のResource Configurationと接続するためのResource Endpointを作成する。
- 接続先はARNのほう(CHILDではない)を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/41c30232-d3ab-31c6-1468-8ea89dfebf45.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/2a4ce5ae-2167-e987-38aa-8a3ca06ea78a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/eb84cb30-f369-8177-cc6f-91fb6ebf409d.png)



- 作成されたResource EndpointにはDNS名が付与される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/6c2c39bf-ff64-5af2-ff2c-516c834e0a72.png)

- Resource EndpointのIPアドレスを確認する。Resource Endpointの画面では10.0.2.80/10.0.3.96 と表示されているが、それぞれのENIを確認すると、セカンダリプライベートアドレスが付与されており、10.0.2.126と10.0.3.50がアサインされていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/881c9e11-0e42-bfff-c3ac-651db5ac49cf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/b85af43a-3e10-a802-d44f-884060f173e3.png)

## 4.4 接続確認
### 通常時
- VPC2にあるクライアント(SQLPLUS)から、Resource Endpointを経由してVPC1のRDS for Oracleに接続できることを確認する。
- コマンドラインは以下の通り。

```
[ec2-user@ip-10-0-0-121 ~]$ sqlplus admin/PASSWORD@//10.0.3.50:1521/ORCL

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 7 07:49:47 2025
Version 19.19.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Last Successful login time: Tue Jan 07 2025 07:49:14 +00:00

Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.25.0.0.0
SQL>
```
- Resource EndpointのENIのIPは計4つあるが、そのうち2つは疎通不可だった。何かバックアップ的な感じ（普段は使えない）なのかもしれない。

| IPアドレス | プライマリ/セカンダリ | 疎通可否
| ---- | ---- | ---- |
| 10.0.2.80 | プライマリ | 不可
| 10.0.2.126 | セカンダリ |　可
| 10.0.3.96 | プライマリ | 不可
| 10.0.3.50 | セカンダリ |　可

- AZ-3b側にRDS for OracleのACTがある状態でのアクセスログは以下のようになる。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/1aa212eb-7898-3e3b-b554-44b97e24c360.png)


### 系切替時

- RDS for Oracle を手動フェイルオーバー(ACTをAZ-3a側へ)して、再度Resource Endpoint経由でのアクセスが可能なことを確認する。
- SQLPLUSによる接続確認を行った（コマンド結果は省略）。疎通可能なResource EndpointのIPアドレスは系切替前と変わらなかった。(10.0.2.126、10.0.3.50経由のみ疎通可能)
- AZ-3a側にRDS for OracleのACTがある状態でのアクセスログは以下のようになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/a9503fc8-f167-6743-588a-53e8cd0e9a7b.png)

# 5. 所感
- 接続先がRDSの場合でもEC2の時とそれほど設定内容の差はなかったが、Resource EndpointのENIにセカンダリIPが付与される点がよく分からなかったため継続調査したい。(あまり気にせずにDNS名を使うようにすればよいのかもしれないが）
- VPC間をPeeringやTransit Gatewayで接続することができないような環境で、RDSに対して他のVPCから接続を受けるようにするには有用な仕組みではないかと思った。