簡體   English   中英

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) 選擇 aws lambda

    b) 附加策略“AWSLambdaFullAccess”

第 2 步:

  1. https://github.com/vinayselvaraj/lambda-jdbc-sample獲取代碼(注意這是 maven 項目)
  2. 右鍵單擊項目選擇 Run 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. 創建函數

在操作下拉列表中選擇配置測試事件結果將顯示如下“執行結果:成功(日志)”

是的,您需要在 lambda 函數類中使用標准的 JDBC 代碼。 您提供的代碼看起來沒問題。 通過 Lamda 函數訪問 RDS 或任何其他 RDBMS 時,您還需要做一些事情 -

  1. 為您的 Lambda 函數創建 jar 或 zip 文件
  2. 您的 zip 文件需要有一個 lib 文件夾,您的 JDBC 驅動程序文件在其中。 Lambda 函數文檔說這是兩種標准方式之一,但它對我不起作用。
  3. 您可以創建一個 jar 文件,在其中放入驅動程序類。這是可行的。 最好的方法是通過 Maven Shade 插件,它提取 JDBC 驅動程序並將類打包到一個單獨的 jar 文件中。
  4. 設置處理函數並在部署 Lambda 時指定它
  5. 根據需要定義執行角色和 VPC。
  6. 上傳並發布您的 jar 或 zip 文件。

您可以通過控制台測試 Lambda 函數,並在 CloudWatch 日志中查看實際輸出。

你可以使用這種實現:

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 函數連接到您擁有的特定 RDS,主機名也可能不是 Amazon RDS 的正確主機名。 它必須是您嘗試連接的 RDS 的端點,並且您的完整連接 URL 如下所示 -

//jdbc:mysql://hostname(RDS的端點):port/databasename

String url = "jdbc:mysql://"+dbHost+":3306/"+dbName;

由於這些端點可以針對不同的數據庫和服務器進行更改,因此您可以將它們設置為 Lambda 中的環境變量並使用

String dbHost = System.getenv("dbHost");

String dbName = System.getenv("dbName");

Lambda 支持的更簡潔和無狀態的設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM