異なるVPC上にあるLambdaから、異なるVPC上にあるRDSへRDS Proxy経由で接続する
VPC-A上にあるLambdaからVPC-B上にあるRDS(パブリックアクセシビリティ:なし)へ接続します。
| VPC | CIDR | サービス |
|---|---|---|
| VPC-A | 172.16.0.0/16 | Lambda(node.js v16) |
| VPC-B | 172.31.0.0/16 | RDS(MySQL 8.0.30) |
RDSを作成
VPC-B上にRDSを作成します。
セキュリティグループは以下です。
| タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|
| MYSQL/Aurora | TCP | 3306 | RDS Proxyのセキュリティグループ |
RDS Proxyを作成
VPC-B上にRDS Proxyを作成します。RDSと同一VPC上に作成する必要があります。
RDS Proxyのセキュリティグループは以下です。
| タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|
| MYSQL/Aurora | TCP | 3306 | 0.0.0.0/0 |
30分くらいかかって作成されます。
追加でプロキシエンドポイントを作成する(VPC-A用)
RDS Proxyに追加でプロキシエンドポイントを作成します。
このプロキシエンドポイントがVPC-Aの為のエンドポイントです。今回はVPC-A上に配置したLambda用のプロキシエンドポイントを作成します。
「プロキシエンドポイントを作成」をクリックします。
以下のように設定し、「プロキシエンドポイントを作成」をクリックします。
RDS Proxyのセキュリティグループは以下です。
| タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|
| MYSQL/Aurora | TCP | 3306 | 0.0.0.0/0 |
30分ほど待ちます。
これでVPC-A上に配置したLambdaからVPC-B上に配置したRDSにRDS Proxyのエンドポイント経由で接続することが可能になります。
Lambda(node.js v16)
サンプルソースです。
import * as mysql from 'promise-mysql'
export async function handler(event, context) {
const conn = await mysql.createConnection({
host: 'lambda.endpoint.proxy-xxxxxxxxxx11.ap-northeast-1.rds.amazonaws.com', // 追加したプロキシのエンドポイント指定すること
port: 3306,
user: 'admin',
password: '12345678',
database: 'mysql',
dateStrings: true
})
const results = await conn.query('select * from mysql.user', [])
console.log(results)
await conn.end()
return {
statusCode: 200,
body: 'Hello World!!!'
}
}
Lambdaをマネジメントコンソールから「Test」で実行します。
RDS ProxyのCloud Watchログが出力されていることが確認できます。
補足
VPCピアリングを作成不要です。
RDS Proxyに対応していないRDSもありますので、ご注意ください。
参考サイト


KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^





コメント