AppEngine:多种配置/环境

I have a Google App Engine app (Go lang, if that matters) that I would like to deploy more than once, with slightly different setup. Think production vs. QA.

env_variables in app.yaml seemed promising, but it seems I can only have one such file. For example, I don't see a way to call "goapp deploy" with app-qa.yaml.

How can I tweak deployment configuration? Is it possible to have more than one app.yaml, without custom script that copies files to a directory and manipulates app.yaml? Any other way to configure this?

My preference is to have the delta between the staging/QA and production reflected in (and controlled via) the VCS (git in my case):

  • my main development happens on the main branch, where the staging environment config is reflected in the .yaml files' contents
  • my production branch is pulled off the main branch and contains the production environment config - the .yaml files are modified accordingly

When I perform a deployment I do it from a workspace based on the appropriate branch depending on which config I need to deploy.

The delta between the production branch and the main branch is pretty much just deployment config changes. Whenever I'm happy with the staging results and I'm ready to deploy in production I just sync the production branch to the main refpoint corresponding to the OK'd staging deployment and deploy.

Another possible approach is to directly use the SDK's appcfg.py tool, which is what goapp deploy ultimately invokes anyways:

goapp deploy wraps the appcfg.py python tool provided in the SDK. You can also invoke this tool directly if you need greater control over the deployment:

The appcfg.py tool allows you to actually have and use alternate .yaml files residing in the same app/module directory (you'd probably have to use that anyways if you go with multiple or non-standard module configurations, since auto-detection from the app's dir won't work anymore):

appcfg.py update app-qa.yaml

App Engine Modules could be used for such purposes.