異なる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(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント