RDS Proxy経由でRDSにつながらない場合対処法
RDS Proxyの設定は結構ややこしいです。
version |
---|
MySQL8.0.28 |
ターゲットグループの設定
関連付けられたデータベースが設定されているか確認します。されていない場合は、編集をクリックして設定します。
コマンドで接続状態を確認
LambdaからRDSには繋がるのにRDSProxy経由すると接続できない場合、コマンドで状態を確かめます。
$ aws rds describe-db-proxy-targets --db-proxy-name <プロキシ識別子> { "Targets": [ { "RdsResourceId": "xxxxxxx", "Port": 3306, "Type": "TRACKED_CLUSTER" }, { "Endpoint": "xxxxxxx-instance-1.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com", "TrackedClusterId": "xxxxxxx", "RdsResourceId": "xxxxxxx-instance-1", "Port": 3306, "Type": "RDS_INSTANCE", "Role": "UNKNOWN", "TargetHealth": { "State": "UNAVAILABLE", "Reason": "PENDING_PROXY_CAPACITY", "Description": "DBProxy Target is waiting for proxy to scale to desired capacity" } } ] }
DBProxy Target is waiting for proxy to scale to desired capacity
30分程度待ってから再度接続を試みてください。
"TargetHealth": { "State": "UNAVAILABLE", "Description": "DBProxy Target unavailable due to an internal error" }
次に出るエラーがこのエラーだとセキュリティグループ周りのエラーです。
VPCLambda → RDS Proxy → RDSというフローなのでセキュリティグループの設定は以下の通りにします。
セキュリティグループ | タイプ | ソース |
---|---|---|
VPCLambdaのセキュリティグループ | インバウンド未設定 | インバウンド未設定 |
RDSのセキュリティグループ | MYSQL/Aurora | RDS Proxyのセキュリティグループ |
RDS Proxyのセキュリティグループ | MYSQL/Aurora | 0.0.0.0/0 |
VPC Lambdaのセキュリティグループのインバウンドは未設定で問題ありません。
これで再度コマンド実行します。
$ aws rds describe-db-proxy-targets --db-proxy-name <プロキシ識別子> { "Targets": [ { // ....省略 "Port": 3306, "Type": "RDS_INSTANCE", "TargetHealth": { "State": "AVAILABLE" // OK } } ] }
これで接続OKです。
VPC Lambdaから接続
同じVPC上に配置したVPC Lambdaから接続します。
import * as mysql from 'promise-mysql' export async function handler(event, context) { const conn = await mysql.createConnection({ host: 'rdspro.proxy-cjvwtdcasc7l.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!!!' } }
RDS Proxyのcloudwatchのログが出ていればVPC Lambdaからの接続はOKです。
ちなみにパスワード認証の場合はLambda側でのデータベースプロキシの追加は不要です。
ローカルからRDS Proxy接続は不可
ローカルにあるDBツール(A5M2やDBeavere)からRDS Proxyエンドポイントに接続することはできません。
RDSプロキシは、データベースと同じ仮想プライベートクラウド(VPC)内にある必要があります。プロキシは一般にはアクセスできませんが、データベースにはアクセスできます。例えば、ローカルホストでプロトタイピングを行っている場合、専用のネットワーキングを設定しない限り、RDS Proxyに接続することはできません。これは、ローカルホストがプロキシの VPC の外にあるためです。
DBProxy Target unavailable due to an internal error
「DBProxy Target unavailable due to an internal error」エラーが出たらRDSProxyのセキュリティグループの設定ミスと思われます。
参考サイト
https://qiita.com/mmmm/items/0486f6f4be44109b5e32
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント