如何在弹性beantalk中将PostgreSQL RDS连接到spring boot?

Posted

技术标签:

【中文标题】如何在弹性beantalk中将PostgreSQL RDS连接到spring boot?【英文标题】:How to connect PostgreSQL RDS to spring boot in elastic beanstalk? 【发布时间】:2019-10-30 19:54:50 【问题描述】:

我有一个 Spring Boot 应用程序,它已经可以连接到我笔记本电脑中的本地 Postgres。我将我的 Spring Boot jar 文件上传到弹性 beanstalk 并且部署良好我可以看到我的应用程序中的所有内容,但它无法连接到我在 RDS 中创建的 Postgres db。

我已尝试将 rds 数据库实例名称的数据库标识符和主密码放在应用程序属性文件中,但不起作用。

#cloud.aws.rds.mydbinstanceidentifier
#cloud.aws.rds.testdbspringiloilo.password=mydbmasterpassword

当我尝试请求来自数据库的对象时,它会显示一个白标签页面,告诉我它已超时。

【问题讨论】:

你能显示你的 pom.xml 我假设缺少依赖项 嗨,Simon,这里是 pom 文件的链接dropbox.com/s/dbclfjg3stvh068/pom.txt?dl=0 【参考方案1】:

您的应用程序无法访问 RDS 实例并且正在超时。确保:

1- 安全组有一个入口规则,允许在数据库端口(Postgres 默认为 5432)上建立应用程序的子网/安全组的连接 2- 启动 RDS 实例的子网的访问列表允许从您的 Beanstalk 环境传入的流量。 3-您在属性文件中配置了正确的端点和端口。

还可以考虑为您的机密使用环境变量,而不是将它们作为纯文本存储在您的应用程序文件中。

【讨论】:

谢谢 Walid,我会进行检查。 在弹性beantalk中创建spring应用程序后,我在部署前在配置页面中添加了rds的快照。我认为这将确保应用程序和 RDS 中的 VPC/Sec 组都允许流量。【参考方案2】:

您尝试使用我们的 cloud.aws.rds 配置,但不要使用 Spring Cloud AWS。

你需要额外的依赖:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-aws</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-aws-jdbc</artifactId>
    </dependency>

请在官方文档中阅读更多关于 Spring Cloud AWS 的信息: https://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html

还有一个很好的示例:https://github.com/codeurjc/spring-cloud-aws-sample

【讨论】:

【参考方案3】:

好的,这就是我解决问题的方法。我不知道其中哪些实际上解决了它。

    我添加了一条新规则来在 vpc 中打开端口 5432。 (这让我很困惑,因为我明确添加了 Postgres rds 快照,所以配置页面在执行脚本时不应该这样做吗?)

    我向 pom 文件添加了一个新的依赖项,我不太确定这是否真的很重要,因为我已经可以运行应用程序但无法连接到数据库。

    org.springframework.boot spring-boot-starter-web

    我没有使用 db 标识符,而是使用了快照的端点地址。

感谢所有输入的家伙!干杯!

【讨论】:

以上是关于如何在弹性beantalk中将PostgreSQL RDS连接到spring boot?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用弹性 beantalk 中的 express.js 进行反应构建?

如何在自动缩放的弹性 beantalk 实例中更新文件

如何在弹性 beantalk 配置上运行 wget cron 命令

如何在 AWS EC2 弹性 beantalk 中使用命令

如何更改附加到弹性 beantalk 的负载均衡器

如何在同一个弹性beantalk实例上运行socket.io和表达?