![](/img/trans.png)
[英]Not able to connect to AWS DocumentDB from AWS Lambda (using Java)
[英]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 超时。 已进行以下试验以解决:
将 AWS lambda 中的环境变量(如SF_TEMPORARY_CREDENTIAL_CACHE_DIR和SF_OCSP_RESPONSE_CACHE_DIR)设置为/tmp/ 。 还尝试将 JAVA_TOOL_OPTIONS 作为 -Duser.home=/tmp/
JDBC 版本尝试:3.11.1、3.9.1、3.8.4
试图将缓存目录设置为 /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.