AWS Lambda Java,连接到 MySQL RDS
AWS Lambda Java, connect to MySQL RDS
我需要开发一个 AWS Lambda Java 函数来从 RDS MySQL 数据库中检索一些记录。
我应该使用 JDBC 吗?我应该使用标准 JDBC 示例:
try {
String url = "jdbc:msql://200.210.220.1:1114/Demo";
Connection conn = DriverManager.getConnection(url,"","");
Statement stmt = conn.createStatement();
ResultSet rs;
rs = stmt.executeQuery("SELECT Lname FROM Customers WHERE Snum = 2001");
while ( rs.next() ) {
String lastName = rs.getString("Lname");
System.out.println(lastName);
}
conn.close();
} catch (Exception e) {
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}
第 1 步:
- 登录 IAM 控制台
- 角色 -> 创建新角色
- 角色名称:lambda-vpc-execution-role
AWS 服务角色 ->
a) Select aws lambda
b) 附加策略 "AWSLambdaFullAccess"
第 2 步:
- 从https://github.com/vinayselvaraj/lambda-jdbc-sample获取代码(注意这是maven项目)
右键单击项目 select 运行 as --->5.maven build...
目标提供名称 package shade:shade
转到项目文件夹和target/lamda-0.0.1-SNAPSHOT-shaded.jar
第 3 步:
- 登录到 lambda 控制台(跳过蓝图)
- 创建新的 lambda
名称:时间测试
a) 运行时-java
b) 上传 .zip(.jar) 文件 (target/lamda-0.0.1-SNAPSHOT-shaded.jar)
提供package.class-name::myhandler
-> Handler
角色 -> lambda-vpc-exceution-role
vpc 提供 rds-vpc 详细信息(这应该在同一个 vpc 组中工作)
创建函数
在操作下拉列表中select配置测试事件
结果会像这样显示 "Execution result: succeeded (logs)"
您可以使用这种实现方式:
public static DataSource getDataSource(){
Utils._logger.log("Get data source");
MysqlDataSource mysqlDs = null;
try{
mysqlDs = new MysqlDataSource();
mysqlDs.setURL('jdbc:msql://'+'url');
mysqlDs.setUser('user');
mysqlDs.setPassword('pwd');
Utils._logger.log("Object "+mysqlDs.getUrl()+" "+mysqlDs.getUser()+" ");
return mysqlDs;
}
catch(Exception e) {
Utils._logger.log("No se pudo abrir el archivo de properties");
e.printStackTrace();
}
return mysqlDs;
}
是的,您需要在 lambda 函数 class 中使用标准 JDBC 代码。您提供的代码看起来没问题。通过 Lamda 函数访问 RDS 或任何其他 RDBMS 时,您还需要做一些事情 -
- 为您的 Lambda 函数创建 jar 或 zip 文件
- 您的 zip 文件需要有一个 lib 文件夹,您的 JDBC 驱动程序文件就在其中。 Lambda 函数文档说这是两种标准方法之一,但它对我不起作用。
- 您可以创建一个 jar 文件,在其中放入驱动程序 classes。这可行。最好的方法是通过 Maven Shade 插件,它提取 JDBC 驱动程序并将 classes 打包到一个 jar 文件中。
- 设置处理函数并在 Lambda 部署时指定它
- 根据需要定义执行角色和VPC。
- 上传并发布您的 jar 或 zip 文件。
您可以通过控制台测试Lambda函数,并在CloudWatch日志中查看实际输出。
我在您的代码库中特别注意到的一件事是,即使您使用此 Lambda 函数连接到您拥有的特定 RDS,主机名也可能不是 Amazon RDS 的正确主机名。
它必须是您尝试连接的 RDS 的端点,并且您的完整连接 url 如下所示 -
//jdbc:mysql://主机名(RDS 端点):port/databasename
String url = "jdbc:mysql://"+dbHost+":3306/"+dbName;
由于这些端点可能会因不同的数据库和服务器而发生变化,因此您可以将它们作为 Lambda 中的环境变量并使用
进行引用
String dbHost = System.getenv("dbHost");
字符串 dbName = System.getenv("dbName");
对于 Lambda 支持的更简洁和无状态的设计。
我需要开发一个 AWS Lambda Java 函数来从 RDS MySQL 数据库中检索一些记录。
我应该使用 JDBC 吗?我应该使用标准 JDBC 示例:
try {
String url = "jdbc:msql://200.210.220.1:1114/Demo";
Connection conn = DriverManager.getConnection(url,"","");
Statement stmt = conn.createStatement();
ResultSet rs;
rs = stmt.executeQuery("SELECT Lname FROM Customers WHERE Snum = 2001");
while ( rs.next() ) {
String lastName = rs.getString("Lname");
System.out.println(lastName);
}
conn.close();
} catch (Exception e) {
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}
第 1 步:
- 登录 IAM 控制台
- 角色 -> 创建新角色
- 角色名称:lambda-vpc-execution-role
AWS 服务角色 ->
a) Select aws lambda
b) 附加策略 "AWSLambdaFullAccess"
第 2 步:
- 从https://github.com/vinayselvaraj/lambda-jdbc-sample获取代码(注意这是maven项目)
右键单击项目 select 运行 as --->5.maven build...
目标提供名称
package shade:shade
转到项目文件夹和target/lamda-0.0.1-SNAPSHOT-shaded.jar
第 3 步:
- 登录到 lambda 控制台(跳过蓝图)
- 创建新的 lambda
名称:时间测试
a) 运行时-java
b) 上传 .zip(.jar) 文件 (target/lamda-0.0.1-SNAPSHOT-shaded.jar)
提供
package.class-name::myhandler
-> Handler角色 ->
lambda-vpc-exceution-role
vpc 提供 rds-vpc 详细信息(这应该在同一个 vpc 组中工作)
创建函数
在操作下拉列表中select配置测试事件 结果会像这样显示 "Execution result: succeeded (logs)"
您可以使用这种实现方式:
public static DataSource getDataSource(){
Utils._logger.log("Get data source");
MysqlDataSource mysqlDs = null;
try{
mysqlDs = new MysqlDataSource();
mysqlDs.setURL('jdbc:msql://'+'url');
mysqlDs.setUser('user');
mysqlDs.setPassword('pwd');
Utils._logger.log("Object "+mysqlDs.getUrl()+" "+mysqlDs.getUser()+" ");
return mysqlDs;
}
catch(Exception e) {
Utils._logger.log("No se pudo abrir el archivo de properties");
e.printStackTrace();
}
return mysqlDs;
}
是的,您需要在 lambda 函数 class 中使用标准 JDBC 代码。您提供的代码看起来没问题。通过 Lamda 函数访问 RDS 或任何其他 RDBMS 时,您还需要做一些事情 -
- 为您的 Lambda 函数创建 jar 或 zip 文件
- 您的 zip 文件需要有一个 lib 文件夹,您的 JDBC 驱动程序文件就在其中。 Lambda 函数文档说这是两种标准方法之一,但它对我不起作用。
- 您可以创建一个 jar 文件,在其中放入驱动程序 classes。这可行。最好的方法是通过 Maven Shade 插件,它提取 JDBC 驱动程序并将 classes 打包到一个 jar 文件中。
- 设置处理函数并在 Lambda 部署时指定它
- 根据需要定义执行角色和VPC。
- 上传并发布您的 jar 或 zip 文件。
您可以通过控制台测试Lambda函数,并在CloudWatch日志中查看实际输出。
我在您的代码库中特别注意到的一件事是,即使您使用此 Lambda 函数连接到您拥有的特定 RDS,主机名也可能不是 Amazon RDS 的正确主机名。 它必须是您尝试连接的 RDS 的端点,并且您的完整连接 url 如下所示 -
//jdbc:mysql://主机名(RDS 端点):port/databasename
String url = "jdbc:mysql://"+dbHost+":3306/"+dbName;
由于这些端点可能会因不同的数据库和服务器而发生变化,因此您可以将它们作为 Lambda 中的环境变量并使用
进行引用String dbHost = System.getenv("dbHost");
字符串 dbName = System.getenv("dbName");
对于 Lambda 支持的更简洁和无状态的设计。