簡體   English   中英

調用 RDS Serverless 時 AWS Lambda 超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM