mysql - 无法从 AWS Lambda 连接到默认 VPC 中的 AWS RDS 实例
问题描述
我有一个 RDS mysql 实例正在运行
它在默认 VPC 中分配给所有默认子网
有一个安全组,入站规则集监听所有流量、所有协议、所有端口范围和源 0.0.0.0/0
可公开访问设置为 True
我能够从 SQl Workbench 和本地 python 脚本连接到 RDS
- 在我的 python lambda 函数中 -
已为 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]
解决方案
你需要做的是:
为默认 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.
推荐阅读
- vue.js - 无法在输入中显示更新的 v-model 值
- ios - UITableViewCell 选择背景颜色更改不起作用
- apache-kafka - ksql表中的重复数据| 如何在同一 ROWKEY 更新时更新 ksql 表的行?
- php - Codeception 安装问题 - 供应商/bin/codecept 供应商未被识别为内部... windows10
- ios - 我想在 tableview 单元格中为 indexpath 的行设置刻度
- sql - 根据别名增量值连接两个 SQL 表
- python - 在 Selenium 中选择焦点元素
- php - 设置 cookie 的问题
- php - 有什么方法可以统计类别中的帖子吗?
- javascript - 从毫秒转换为持续时间