繁体   English   中英

无法使用 JAVA 8 通过 AWS lambda 连接 Snowflake

[英]Unable to connect Snowflake through AWS lambda using JAVA 8

尝试使用 Java 8 从 AWS lambda 连接雪花。

  Class.forName("net.snowflake.client.jdbc.SnowflakeDriver"); // v3.9.1 as maven dependency

            final Properties snowflakProperties = new Properties();
            snowflakProperties.put("user", "username");
            snowflakProperties.put("password", "password");
            snowflakProperties.put("account", "account"); // accountname.regionname
            snowflakProperties.put("db", "dbname");
            snowflakProperties.put("schema", "schemaname");
            snowflakProperties.put("role", "rolename");

            DriverManager.getConnection("jdbc:snowflake://accountname.snowflakecomputing.com", 
                                                       snowflakProperties);

不幸的是,这无法连接,并且 lambda 超时。 已进行以下试验以解决:

  1. 将 AWS lambda 中的环境变量(如SF_TEMPORARY_CREDENTIAL_CACHE_DIRSF_OCSP_RESPONSE_CACHE_DIR)设置/tmp/ 还尝试将 JAVA_TOOL_OPTIONS 作为 -Duser.home=/tmp/

  2. JDBC 版本尝试:3.11.1、3.9.1、3.8.4

  3. 试图将缓存目录设置为 /home/ ,这会引发异常并显示消息Failed to touch the cache file: /home/ocsp_response_cache.json

仍然没有得到适当的解决方案。 AWS lambda 是否不允许使用临时目录获取雪花连接?

因此,期待尽快解决

谢谢你。

I tested the Lambda fn with java .Change the values accordingly.
You can try this one below:

-----------------------------------------------------------------------------

package com.snowflake.LambdaTest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class LambdaRequestHandler implements RequestHandler<Object, String> {
    public String handleRequest(Object input, Context context) {
        String data= input != null ? input.toString() : "{}";
        context.getLogger().log("Input: \n" + data);
        context.getLogger().log("Connecting to Snowflake DB ......\n");

        String connectionUrl = "jdbc:snowflake://<URL>/?account=<AccountName>&warehouse=<WareHouseName>&role=<RoleName>&db=<DBName>&schema=<SchemaName>&tracing=ALL";

        String user = "<UserName>";
        String passwd = "<Password>";

        Properties _connectionProperties = new Properties();
        _connectionProperties.put("user", user);
        _connectionProperties.put("password", passwd);

        try {
            Class.forName("net.snowflake.client.jdbc.SnowflakeDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        context.getLogger().log("Getting Conn...\n");
        Connection testConnection = null;

        try {
            testConnection = DriverManager.getConnection(connectionUrl, _connectionProperties);

            testConnection.setAutoCommit(false);
            Statement stat = testConnection.createStatement();
            ResultSet rs = stat.executeQuery("select * from <TableName>");
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }

        } catch (SQLException e) {

            e.printStackTrace();
        }
        try {
            testConnection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return "Success";

    }

}
----------------------------------------------------------------------

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM