AWS LAMBDA无法通过JDBC
访问RDS我有使用Java 8AWS LAMBDA无法通过JDBC
测试lambda函数设置到目前为止,我有
- 给出的lambda函数连接lambda函数的执行角色
AWSLambdaVPCAccessExecutionRole
到我在我的帐户上唯一的VPC,并选择VPC内的所有子网,以便它可以访问我的RDS实例在这种情况下开放给t他是公开的,我可以通过我的笔记本电脑访问它(即拉姆达代码实际上运行在分配给
Lambda
远程主机不VPC内)安全组是最宽松的可能(即所有所有CIDR块的流量)
不过,我仍然无法访问我的RDS实例运行在AWS上的lambda函数时(但相同的代码工作在我的笔记本电脑,从main()
功能运行时)
示例代码
public class Application implements RequestHandler<Object, Boolean> {
private Logger logger = Logger.getLogger(Application.class);
public Boolean handleRequest(Object object, Context context) {
try {
Class.forName("com.mysql.jdbc.Driver");
logger.info("Calling DriverManager.getConnection()");
Connection con = DriverManager.getConnection(
"jdbc:mysql://...endpoint...defaultdb",
"awsops",
"..."
);
Statement stmt = con.createStatement();
logger.info("Test Started!");
ResultSet result = stmt.executeQuery("SELECT\n" +
" last_name, COUNT(*)\n" +
"FROM\n" +
" users\n" +
"GROUP BY\n" +
" last_name\n" +
"HAVING COUNT(*) > 1");
if (result.next()) {
logger.info(result.getString("last_name"));
}
return true;
} catch (Exception e) {
logger.info(e.getLocalizedMessage());
}
return false;
}
}
你能帮我理解我可能做错了什么吗?
的CloudWatch的记录显示,此功能可在DriverManager.getConnection()
原来我RDS与那真的只是白名单我个人的IP地址自动创建的安全组推出挂......所以感觉好像我能连接到它的“任何地方”
我不得不更新我的RDS实例的安全组,以允许从子网流量在LAMBDA的虚拟网络接口可以从
您可以删除分配给Lambda函数的SG中的所有规则。没有理由分配任何东西给SG,它什么都不做。 Lambda函数应用SG的原因是您可以在其他SG规则中引用该函数。在分配给RDS实例的SG中,您可以轻松创建允许来自特定SG的任何成员的入站访问的规则,而不是将您的子网中的所有IP列出,在这种情况下SG将分配给您的Lambda函数。从EC2控制台的安全组视图编辑规则,开始键入“sg”以获取可供选择的SG列表。 –
的RDS实例都有一个安全组的到来。 SG上的入站规则是什么?另外,http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html提供了这个教程。 – jarmod