はじめに
「サーバーレスエンジニアだけど Aurora に入門する」シリーズとして、Data API を試してみました。 Amazon RDS Data API の使用
なぜ Data API を使うの?
RDB への接続は一般的に TLS 上で独自のプロトコルで実行されます。 Amazon RDS においては、Private Subnet 内に何かしらのコンピューティングリソースを作成して、接続文字列を腹持ちしてコネクションを張るのがセオリーです。
これらの手順はけっこう煩雑です。 Amazon RDS においては、HTTP エンドポイントに対してアクセスできる Data API という機能があります。
この接続方式を利用することで、VPC 外のリソースからも安全かつ簡単に DB へのアクセスが可能となります。
やること
やってみた
設定の確認
- Data API が有効になっていること
以下が true になっていることを確認
aws rds describe-db-clusters \ --db-cluster-identifier {クラスター識別子} \ --query 'DBClusters[0].HttpEndpointEnabled' \ --region {リージョン}
- シークレット情報は Secrets Manager で管理されていること
- IAM ロールに RDS と Secrets Manager への参照権限がついていること
ローカルの Mac から接続
CLI コマンド
$ aws --region ap-northeast-1 \
--output json \
--endpoint-url https://rds-data.ap-northeast-1.amazonaws.com \
rds-data execute-statement \
--resource-arn '{AuroraクラスターのARN}' \
--secret-arn '{SecretsのARN}' \
--database mydb \
--sql "SELECT now();"
TypeScript
import {
RDSDataClient,
ExecuteStatementCommand,
} from "@aws-sdk/client-rds-data";
const client = new RDSDataClient({ region: "ap-northeast-1" });
const main = async () => {
const command = new ExecuteStatementCommand({
resourceArn:
"arn:aws:rds:ap-northeast-1:xxxxxxxxxxxx:cluster:database-xxxxx",
secretArn:
"arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:rds!cluster-xxxxx",
sql: "SELECT * FROM users",
database: "mydb",
});
const result = await client.send(command);
return result;
};
main().then((res) => console.log(JSON.stringify(res, null, 2)));
レスポンス例
以下のような感じです。
- 列名が含まれない
- 各値が { stringValue: “…” } のようにネストされていて、直接扱えない
という感じで活用するには一工夫必要そうです(これは今後の課題)
{
"$metadata": {
"httpStatusCode": 200,
"requestId": "c756950a-6574-4663-9348-1d9acd50d150",
"attempts": 1,
"totalRetryDelay": 0
},
"numberOfRecordsUpdated": 0,
"records": [
[
{
"longValue": 1
},
{
"stringValue": "テストユーザー"
},
{
"stringValue": "[email protected]"
},
{
"stringValue": "2025-06-06 22:47:49.528"
},
{
"stringValue": "2025-06-06 22:47:49.528"
}
]
]
}
注意事項
制限事項が多い
意外と意識すべき制限事項が多いです 公式ドキュメント
- リクエスト制限
- 32KB
- レスポンス制限
- 64KB/行
- 1MiB/リクエスト
- リクエストはライターインスタンスだけに向かう
レイテンシーの問題
ドキュメントからの類推も含みますが、Data API は直接接続に比べて以下の工程が発生するのでレインテンシーは増えることが類推されます。
- TLS ハンドシェイク
- IAM 認証
- Secrets Manager からのシクレット取得
- レスんポンスの JSON への加工
どういう時使える?
以上の制限事項を考慮すると、あまり低レイテンシーが求められない & 小規模なシステムに向いているのかなーと思いました。 また、リクエスト・レスポンスのペイロード周りは制限が厳しいので、しっかりとした設計が必要だなと感じました。
最後に
VPC 外からも SDK や CLI を通して、簡単にアクセスできました。
2025 年 6 月8日現在、Data API は prisma がサポートしていないこともあり少し影が薄い印象です(ちなみに、Drizzle はサポートしています。公式ドキュメント)
しかし、VPC 外のコンピューティングリソースから簡単にアクセスできるのはぐっと開発工程が軽くなるので、とてもいいなと思いました。