当前位置: 首页 > 知识库问答 >
问题:

Java中的AWS Lambda无法使用连接wallet连接到Oracle RDS

马丰
2023-03-14

我正在尝试从用java编写的Lambda连接到AWS Oracle RDS。用于进行连接的连接钱包的二进制文件。

当我从SQLDeveloper使用它时,它工作正常。但是当我使用此 java 代码时,不会发生同样的情况。

在SQLDeveloper中,我使用的自定义jdbc url是:DBC:Oracle:thin:@(DESCRIPTION =(ADDRESS _ LIST =(ADDRESS =(PROTOCOL = TCPS)(HOST = myhost 100 . mydomain . fr)(PORT = 2499))(CONNECT _ DATA =(SID = mysid 01))(SECURITY =(SSL _ SERVER _ CERT _ DN = " C = US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN = mydb 100 . xyzabc . eu-west-west

因此,代码中也使用了相同的方法。

我也在罐子里添加了二进制文件

这是java代码和pom.xml。

它无法连接到RDS,最终超时。

RDS位于专用VPC中,与lambda一致,这意味着VPC、子网和安全组是一致的。

Oracle版本:19.0.0.0RU-2021-04.rur-2021-04.r1

爪哇岛:

package fr.globalhealthcheck;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Map;

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


public class MeteoHandler  implements RequestHandler<Map<String,String>, String>{

    public String handleRequest(Map<String,String> event, Context context)
    {
        LambdaLogger logger = context.getLogger();

        String response = new String("200 OK");
            
        testConnection();

        return response;
    }

    public void testConnection()
    {
        try      
        {
            System.out.println("Before connect");
            System.setProperty("oracle.net.SSL_SERVER_DN_MATCH", "ON");
            System.setProperty("oracle.net.SSL_CYFER_SUITES", "(SSL_RSA_WITH_AES_256_CBC_SHA)");
            System.setProperty("oracle.net.ssl_version1", "1.0");
            System.setProperty("oracle.net.SSL_CLIENT_AUTHENTICATION", "FALSE");
            System.setProperty("oracle.net.wallet_location", "/var/task/cwallet.sso");
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCPS)(HOST =myhost100.mydomain.fr) (PORT = 2499)))(CONNECT_DATA = (SID = MYSID01))(SECURITY = (SSL_SERVER_CERT_DN = \"C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=mydb100.xyzabc.eu-west-3.rds.amazonaws.com\")))", 
                    "myuser", "mypassword");
            System.out.println("After connect");
            if (conn != null) {
                System.out.println("Connected to the database!");
            } else {
                System.out.println("Failed to make connection!");
            }

        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}

专家:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>fr.globalhealthcheck</groupId>
    <artifactId>global-healthcheck</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>global-healthcheck</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> 
            <version>2.8.6</version> </dependency> -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-core</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-events</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-log4j2</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc11</artifactId>
            <version>21.1.0.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>${basedir}/lib/binary</directory>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>           
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>
                                        fr.globalhealthcheck.MeteoHandler
                                    </mainClass>
                                </manifest>
                            </archive>
                            <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>           
        </plugins>
    </build>
</project>

cwallet.sso是添加在二进制文件夹中的连接钱包,在maven中引用。

所以我打印了它来验证lambda中的路径,即/var/task/cwallet.sso

共有1个答案

顾永福
2023-03-14

您使用的属性之一不正确。oracle.net.SSL_CYFER_SUITES--

您使用的JDBC驱动程序版本是什么?此外,您可以查看此博客的12.2及更低版本。否则,请参阅此页面。

 类似资料:
  • 我是Harold,我是Openshift的新手,我使用下面的代码通过这里的示例用java连接到MySQLhttps://www.openshift.com/forums/openshift/no-suitable-driver-found-error, 不幸的是,我没能成功。 起初,它说“找不到合适的驱动程序”,所以我将mysql连接器添加到WEB-INF/lib文件夹并添加类。forName(“

  • java.sql.sqlexception:网络错误IOException:连接被拒绝:连接在net.sourceforge.jtds.jdbc.jtdsConnection.(jtdsconnection.java:434)在net.sourceforge.jtds.jdbc.driver.connect(driver.java:183)在net.sql.drivermanager.getCon

  • 我需要帮助。我不知道这个项目出了什么问题。我无法连接到h2数据库。即使我没有持久化任何对象,只是关闭连接,我也会得到错误。 对不起,我知道,这已经被问过几次了,但没有一个答案符合我的情况。 我得到的错误: pom.xml: Hibernate Utils类: 储存库 项目结构:

  • 我有这个代码可以通过IMAP连接到Gmail 我总是会遇到这个例外,指向商店。connect() 我已经检查了谷歌的所有信息,如果我是对的,IMAP的端口是993。用户名和密码绝对正确。我想我错过了一些东西,但我无法弄清楚。 任何帮助都将不胜感激! 编辑 添加邮件后。debug,我得到了这些日志,但我仍然停留在商店里。connect() 它已登录,但仍卡在connect上。。

  • 我使用的是Oracle 11g R2数据库。我使用Oracle SQL Developer。如果我创建了一个新连接并检查了基本连接类型并填写了我可以连接的字段。如果我选择TNS并在下拉菜单中选择我想要的,它会显示失败E/S异常:网络适配器无法建立连接。 这是tnsnames.ora。我用它连接到2个数据库,dblilly和astrea。我可以正确连接到astrea。侦听器已打开,实例已准备就绪。你

  • 在本地,我的应用程序可以很好地连接到内置的netty连接工厂,并且在启动或发送主题消息方面没有问题。我的本地盒子是独立的JBoss 5.1和独立的大黄蜂Q。 但是,当部署到我们的DEV服务器(运行集群JBoss 5.1和集群HornetQ)时,我无法连接,得到以下堆栈跟踪: 我正在尝试使用默认的内置netty连接器,除了我自己的JMS主题之外,没有额外的配置。我相对不知道DEV服务器设置,因为它超