已部署 Tomcat EC2 中的 Webapp 无法与 Postgres RDS 实例通信
Deployed Tomcat Webapp in EC2 can't talk to Postgres RDS instance
我在 EC2 中 tomcat 服务器的端口 8080 上有一个简单的 Java 基于 servlet 的应用程序 运行ning。当我单击一个按钮时,它 return 收集数据库中的所有用户记录并将它们呈现到屏幕上。
当我使用 Tomcat 在我的本地主机上部署该应用程序时,该应用程序运行良好,并且它可以很好地连接从中检索用户记录的 RDS。
但是,当我将 WAR 文件部署到 EC2 实例上的 Tomcat 并通过 http://51..[= 访问它时38=].***:8080/MyApp-0.0.1-SNAPSHOT,当我单击同一个按钮时,它不允许我连接到我的 RDS 和 return 相同的对象.
EC2和RDS实例共享相同的可用区、VPC(默认)和安全组。
我什至将 EC2 的私有 IP 地址添加到为 RDS 和 EC2 指定入站规则的安全组(入站:Postgres 5432 139.. .*** ).
我正在通过 AWS EC2 Instance Connect 连接到我的 EC2(不是通过我本地主机上的 bash,因为 RDS 是一项托管服务)。我已经在 ec2 上安装了 maven、jdk8、tomcat 和 git....我还需要安装 postgres 吗?
将 war 文件复制到 var/lib/tomcat/webapps
后,我 运行 使用 sudo service tomcat start
的应用程序可以在我上面提到的地址的端口 8080 上访问它。 (http://51.***.***.***:8080/MyApp-0.0.1-SNAPSHOT
).
EC2和RDS实例共享的安全组入站规则如下:
在允许 EC2 和 RDS 相互通信方面我做错了什么?
想通了。与安全组或 VPC 无关。有问题的基于 servlet 的应用程序正在使用 URL 重写来捕获发送到 http://543.251.123/AppToDeploy/...
的请求
final String URI = request.getRequestURI().replace("/AppToDeploy/", "");
switch(URI) {
case "login":
RequestHelper.processLogin(request, response);
break;
...
在 EC2 实例中,当我 运行 mvn clean package
时,它生成了一个名为 AppToDeploy-0.0.1-SNAPSHOT.war
的 WAR,我将其传递给 Tomcat 的 webapps/
目录在端口 8080 上提供服务。
修复方法是将以下内容添加到我的 pom.xml
文件以重命名打包的 war 文件。
<build>
<!-- This renames the built war file -->
<finalName>${project.artifactId}</finalName>
</build>
我在 EC2 中 tomcat 服务器的端口 8080 上有一个简单的 Java 基于 servlet 的应用程序 运行ning。当我单击一个按钮时,它 return 收集数据库中的所有用户记录并将它们呈现到屏幕上。
当我使用 Tomcat 在我的本地主机上部署该应用程序时,该应用程序运行良好,并且它可以很好地连接从中检索用户记录的 RDS。
但是,当我将 WAR 文件部署到 EC2 实例上的 Tomcat 并通过 http://51..[= 访问它时38=].***:8080/MyApp-0.0.1-SNAPSHOT,当我单击同一个按钮时,它不允许我连接到我的 RDS 和 return 相同的对象.
EC2和RDS实例共享相同的可用区、VPC(默认)和安全组。 我什至将 EC2 的私有 IP 地址添加到为 RDS 和 EC2 指定入站规则的安全组(入站:Postgres 5432 139.. .*** ).
我正在通过 AWS EC2 Instance Connect 连接到我的 EC2(不是通过我本地主机上的 bash,因为 RDS 是一项托管服务)。我已经在 ec2 上安装了 maven、jdk8、tomcat 和 git....我还需要安装 postgres 吗?
将 war 文件复制到 var/lib/tomcat/webapps
后,我 运行 使用 sudo service tomcat start
的应用程序可以在我上面提到的地址的端口 8080 上访问它。 (http://51.***.***.***:8080/MyApp-0.0.1-SNAPSHOT
).
EC2和RDS实例共享的安全组入站规则如下:
在允许 EC2 和 RDS 相互通信方面我做错了什么?
想通了。与安全组或 VPC 无关。有问题的基于 servlet 的应用程序正在使用 URL 重写来捕获发送到 http://543.251.123/AppToDeploy/...
的请求 final String URI = request.getRequestURI().replace("/AppToDeploy/", "");
switch(URI) {
case "login":
RequestHelper.processLogin(request, response);
break;
...
在 EC2 实例中,当我 运行 mvn clean package
时,它生成了一个名为 AppToDeploy-0.0.1-SNAPSHOT.war
的 WAR,我将其传递给 Tomcat 的 webapps/
目录在端口 8080 上提供服务。
修复方法是将以下内容添加到我的 pom.xml
文件以重命名打包的 war 文件。
<build>
<!-- This renames the built war file -->
<finalName>${project.artifactId}</finalName>
</build>