需求是我在 GCP 用 Spring Boot 部署了一台 Cloud Run,同时也 Cloud Run 申请了一台 PostgreSQL,我希望能从这台 Cloud Run 使用 JDBC 连线到 Cloud SQL,原本认为应该很容易,意外的却卡关有点久,整理了一下笔记,至少下次有同样的需求时不会忘掉
笔记开始前
- 在 Cloud SQL 申请 PostgreSQL,这个部份不在这篇笔记讨论的范围,不过很简单,一直按下一步就差不多了,要稍微注意的是 GCP 预设申请的是「4 个 vCPU 和 26 GB」的机器,价格有点贵,有预算考量的人记得申请时选等级差一点的机器
- 将 Spring Boot 包成 docker image 档上传到 GCP 的 Artifact Registry,这个部份也不在这篇笔记讨论的范围,晚点有空的时候再来整理一下这里的笔记
什么是 Cloud Run
Cloud Run 是 GCP 的一个 serverless 服务,和 AWS 的 Lambda 不同的是,Cloud Run 使用 docker container 来部署,也就是说只要能把程式包成 docker image 档上传到 GCP 的 Artifact Registry 或 Container Registry,程式就可以跑,不限制使用什么语言,测试过 Python Flask 和 Java Spring Boot 都能正常执行
然后 Cloud Run 提供了「只在要求处理期间分配 CPU」和「随时分配 CPU」两种选项,实测如果选择「只在要求处理期间分配 CPU」在很久没有执行后,再次执行大概要等个 10 秒,如果某个服务不需要 24 小时执行(ex:排程执行的服务),这个选择可以省下不少费用
Spring Boot 怎么连线 PostgreSQL
这篇文章其实也预设大家已经知道 Spring Boot 怎么连线 PostgreSQL,所以写的简洁一点
- gradle 设定:增加以下两行设定
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'org.postgresql:postgresql'
}
- application.properties 或 application.yml 设定,以下范例为 application.yml
spring:
datasource:
url: jdbc:postgresql://127.0.0.1:5432/database-name
driverClassName: org.postgresql.Driver
username: user-name
password: ******
Spring Boot 其实算是简化 db 连线的设定,基本上就是 gradle 设定好,application.properties 设定好就可以了
GCP 如何在 Cloud Run 使用 Spring Boot 连线 Cloud SQL
终于写到正文