Chr*_*isJ 6 google-app-engine google-cloud-sql google-cloud-platform
我以前使用过 Heroku 和 AWS,现在正在使用 App Engine 和 Cloud SQL (Postgres) 在 Google Cloud 平台上设置服务。
我们尝试使用 12 要素原则构建应用程序。
事实证明,设置是如此乏味,以至于我开始怀疑我是否只是从根本上错过了某些东西。
以下是让我感到困惑的事情:
我是否错过了服务器管理方面的一些重大发展,这些发展已成为最佳实践?刚刚发现#3 和#4 后,我真的开始认为我一定在我的设置中做了一些根本性的错误。我有没有?
小智 3
我没有专门尝试按照您所描述的方式配置应用程序,但我知道这些并不是 Google 想要的结果。为了解决一些具体问题:
Connecting to Cloud SQL特别指出以下内容,建议存储密码不是他们想要的,并为机密提供了单独的解决方案。
# Remember - storing secrets in plaintext is potentially unsafe. Consider using
# something like https://cloud.google.com/secret-manager/docs/overview to help keep
# secrets secret.
Run Code Online (Sandbox Code Playgroud)根据本文,Google App Engine 不支持 app.yaml 中的环境变量(Google App Engine 类似问题的评论)。我对类似问题的修复是以下代码:
# Remember - storing secrets in plaintext is potentially unsafe. Consider using
# something like https://cloud.google.com/secret-manager/docs/overview to help keep
# secrets secret.
Run Code Online (Sandbox Code Playgroud)
注意:该脚本也可以使用 subprocess 库用 python 编写。这就是我自动构建 GKE 项目的方法。
接下来,获取应用程序 app.yaml 文件并添加 bash 变量字符串替换,如示例 app-tpl.flexible.yaml 所示:
#!/bin/bash
# deploy-helper.sh
prepare_yaml() {
[ -z "$1" ] && echo "ERROR: template.yaml filename must be provided." && exit 1
template="${1}" # ARG #1 : filename of template yaml
finalYAML=$(mktemp) # make temporary file
generated_stdin_cmds="$(echo "cat <<EOF >\"$finalYAML\""; cat $template; echo EOF;)"
source /dev/stdin <<< "$generated_stdin_cmds"
echo "$finalYAML"; # return filepath of filled-in file
return 0
}
# Set environment variables
TYPE="prod" # in script file
source env/production.vars # read them in from a file
DEPLOYMENT_FILE="app.flexible.yaml"
tmpfile="$(prepare_yaml "app.tpl.yaml")"
if [ $? -eq 0 ]; then
mv "$tmpfile" "$PWD/$DEPLOYMENT_FILE" # gcloud wants specific filename
gcloud app deploy "$DEPLOYMENT_FILE"
rm "$DEPLOYMENT_FILE" # Cleanup temporary file
fi
Run Code Online (Sandbox Code Playgroud)
制作包含必要变量的文件(在源代码管理中忽略)
# example app-tpl.flexible.yaml
---
runtime: custom
env: flex
env_variables:
MYSQL_SOCK: "/cloudsql/${project}:${region}:${instance}"
MYSQL_DB: "${db_name}"
MYSQL_USER: "${db_user}"
MYSQL_PASSWORD: "${db_pw}"
Run Code Online (Sandbox Code Playgroud)这应该通过答案#2 来解决。在要执行的脚本上添加标志/选项以交换 SQL 实例或更改环境变量名称。
看起来您需要配置两个 CloudSQL 连接实例,然后自动 CloudSQL 代理将能够连接到 2 个数据库。请参阅cloud.google.com/sql/docs/mysql/connect-app-engine-flexible和这个答案,因为他们让它使用不同的端口号。
祝你好运!
归档时间: |
|
查看次数: |
164 次 |
最近记录: |