首页 > 解决方案 > 无法从 AWS Lambda 连接到默认 VPC 中的 AWS RDS 实例

问题描述

我有一个 RDS mysql 实例正在运行

  1. 它在默认 VPC 中分配给所有默认子网

  2. 有一个安全组,入站规则集监听所有流量、所有协议、所有端口范围和源 0.0.0.0/0

  3. 可公开访问设置为 True

我能够从 SQl Workbench 和本地 python 脚本连接到 RDS

- 在我的 python lambda 函数中 -

  1. 已为 AWSLambdaVPCAccessExecutionRole 、lambda_basic_execution 分配了角色

    2.Lambda没有分配给任何VPC

我从 lambda "errorMessage" 收到以下错误消息:"RequestId: xx Process exited before completed request"

代码在尝试连接到 DB get_database_connection() 和除块日志记录消息logger.error("ERROR: Unexpected error: Could not connect to MySql instance.") 时失败。

lambda 甚至可以连接到默认 VPC 中的 RDS 实例吗?lambda 未分配给任何 VPC

拉姆达代码

import sys
import logging
import package.pymysql
import logging
import package.pymysql.cursors

DATABASE_HOST = 'XXX'
DATABASE_USER = 'XXX'
DATABASE_PASSWORD = 'XXX'
DATABASE_DB_NAME = 'XXX'
port = 3306

def get_database_connection():
    "Build a database connection"
    conn = pymysql.connect(DATABASE_HOST, user=DATABASE_USER,
                           passwd=DATABASE_PASSWORD, db=DATABASE_DB_NAME, connect_timeout=5)
    return conn

try:
    conn = get_database_connection() 
except:
    logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
    sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")    

def lambda_handler(event, context):
    print("Lambda executed")

点击此链接 [ https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html][1]

标签: mysqlamazon-web-servicesaws-lambdaamazon-rds

解决方案


你需要做的是:

为默认 VPC 创建 2 个私有子网

xxx.xxx.64.0/20
xxx.xxx.128.0/20

在控制台中转到您的 Lambda 函数。

向下滚动并在左侧选择默认 VPC。

Select the 2 Private Subnets as your subnets on your lambda function.

推荐阅读