[英]AWS Lambda times out when calling RDS Serverless
我有一個帶有兩個隔離子網的 VPC,一個用於我的 RDS Serverless 集群,另一個用於我的 Lambda 函數。
但是我的 Lambda 函數在調用我的 RDS 時都會超時。
我的問題是; 這個 VPC + 隔離子網是 API Gateway -> Lambda -> RDS 的工作結構,還是我嘗試了一些不可能的事情?
拉姆達:
import * as AWS from 'aws-sdk';
const rdsDataService = new AWS.RDSDataService();
const query = `SELECT * FROM information_schema.tables;`;
export const handler = async (event) => {
const params = {
secretArn: `secret arn`,
resourceArn: "rds arn",
sql: query,
database: 'db name'
};
const res = await rdsDataService.executeStatement(params).promise();
return { statusCode: 200, body: {
message: 'ok',
result: res
}};
};
我的 RDS 和 Lambda 共享一個安全組,我已經在其中打開了所有流量(我知道這並不理想),而我的 Lambda 具有管理員權限(也不理想),但仍然只是超時。
您正在使用 Aurora Serverless Data API。 該 API 不存在於您的 VPC 中。 您選擇了隔離子網,這些子網無法訪問您的 VPC 之外的任何內容。 您需要切換到私有子網,或者將 RDS 終端節點添加到您的 VPC。
重要的是要指出 RDS API != RDS Data API; 兩者是不同的。 您將 RDS API 用於標准 RDS 實例; 對於 Aurora Serverless 之類的東西,您可以使用 RDS數據API。
對於將來遇到此問題的任何人,現在有一些有用的文檔描述了如何創建 Amazon VPC 終端節點以允許訪問 RDS 數據 API 。
如果您使用 Terraform 創建 VPC 終端節點,這里有一個片段,它基本上復制了上述教程中的說明:
resource "aws_vpc_endpoint" "rds-data" {
vpc_id = <your-vpc-id-here>
service_name = "com.amazonaws.<your-region-here>.rds-data"
vpc_endpoint_type = "Interface"
private_dns_enabled = true
security_group_ids = [
<your-security-group-ids-here>
]
subnet_ids = [
<your-subnet-ids-here>
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.