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 步:

  1. 登录 IAM 控制台
  2. 角色 -> 创建新角色
  3. 角色名称:lambda-vpc-execution-role
  4. AWS 服务角色 ->

    a) Select aws lambda

    b) 附加策略 "AWSLambdaFullAccess"

第 2 步:

  1. https://github.com/vinayselvaraj/lambda-jdbc-sample获取代码(注意这是maven项目)
  2. 右键单击项目 select 运行 as --->5.maven build...

    目标提供名称 package shade:shade

  3. 转到项目文件夹和target/lamda-0.0.1-SNAPSHOT-shaded.jar

第 3 步:

  1. 登录到 lambda 控制台(跳过蓝图)
  2. 创建新的 lambda
  3. 名称:时间测试

    a) 运行时-java

    b) 上传 .zip(.jar) 文件 (target/lamda-0.0.1-SNAPSHOT-shaded.jar)

  4. 提供package.class-name::myhandler -> Handler

  5. 角色 -> lambda-vpc-exceution-role

  6. vpc 提供 rds-vpc 详细信息(这应该在同一个 vpc 组中工作)

  7. 创建函数

在操作下拉列表中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 时,您还需要做一些事情 -

  1. 为您的 Lambda 函数创建 jar 或 zip 文件
  2. 您的 zip 文件需要有一个 lib 文件夹,您的 JDBC 驱动程序文件就在其中。 Lambda 函数文档说这是两种标准方法之一,但它对我不起作用。
  3. 您可以创建一个 jar 文件,在其中放入驱动程序 classes。这可行。最好的方法是通过 Maven Shade 插件,它提取 JDBC 驱动程序并将 classes 打包到一个 jar 文件中。
  4. 设置处理函数并在 Lambda 部署时指定它
  5. 根据需要定义执行角色和VPC。
  6. 上传并发布您的 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 支持的更简洁和无状态的设计。