Время ожидания AWS Lambda истекает при вызове RDS Serverless

У меня есть VPC с двумя ИЗОЛИРОВАННЫМИ подсетями, одна для моего кластера без сервера RDS, а другая для моих функций 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 имеет роль с правами администратора (также не идеальна), но все же только время ожидания.

2 ответа

Решение

Вы используете API Aurora Serverless Data. API не существует внутри вашего VPC. Вы выбрали изолированные подсети, которые не имеют доступа ни к чему, что существует за пределами вашего VPC. Вам нужно будет либо переключиться на частные подсети, либо добавить конечную точку RDS в свой VPC.

Важно отметить, что RDS API!= RDS Data API; эти два разные. Вы используете RDS API для стандартных экземпляров RDS; для чего-то вроде Aurora Serverless вы используете API данных RDS .

Для тех, кто столкнется с этим в будущем, теперь есть полезная документация, описывающая, как создать конечную точку Amazon VPC, чтобы разрешить доступ к API данных RDS .

Если вы используете 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>
  ]
}
Другие вопросы по тегам