【问题标题】:Best practice for production and test environments in Google App EnginGoogle App Engine 中生产和测试环境的最佳做法
【发布时间】:2014-10-13 00:12:21
【问题描述】:

Google App Engine 中的生产和测试(暂存)环境的最佳做法是什么?设置单独的项目是个好主意吗?

我们还使用 Google Cloud Storage 和 Cloud SQL。我想防止有人在打算进行测试时错误地在生产中工作的事故。

我们将在 GCS 中存储大量内容。据我了解,GCS 环境在项目之间是分开的。这对我们来说可能是可取的。但是,如果我们想复制产品进行测试,是否可以将 GCS 从一个应用程序复制到另一个应用程序?

期待听到其他人如何做到这一点。

【问题讨论】:

标签: google-app-engine


【解决方案1】:

我还想知道是否有除项目之外的其他选项用于 UAT/Prod 环境,我发现 Google 文档中的这篇文章说您应该使用不同的项目。

Best Practices for Enterprise Organizations

https://cloud.google.com/docs/enterprise/best-practices-for-enterprise-organizations

我们建议您花一些时间来规划您的项目 ID 可管理性。典型的项目 ID 命名约定可能使用 以下模式:

[company tag]-[group tag]-[system name]-[environment (dev, test, uat, stage, prod)]

例如,人力资源的开发环境 部门的薪酬系统可能被命名为 acmeco-hr-comp-dev。

【讨论】:

    【解决方案2】:

    Bruyere 的回答在技术上是正确的,您可以对应用进行版本控制或使用单独的项目。

    在实践中,我两者都做过,但你总是需要将项目分开,原因有很多:

    • 您可能不希望同一个人有权更新暂存环境(例如,所有开发人员都具有此能力)和生产环境(通常这将仅限于技术主管或 QA 团队,或你的持续集成服务器)
    • 隔离两个应用引擎版本并不容易,尤其是在处理 cron 作业、电子邮件或 XMPP 接收时
    • 您可能不希望同一个人能够读取/写入暂存数据和产品数据
    • 您要确保 App Engine 产品应用程序不会写入暂存 Cloud Storage 存储桶。如果它们是同一个项目的一部分,默认情况下这是可能的

    我的建议是将环境相关数据(云存储桶、Cloud SQL url 等)存储在应用程序加载的配置文件中。如果您使用 Java,我个人会使用 Maven 基于两个配置文件(dev 和 prod,dev 是默认配置)填充的属性文件。

    另一个重要的一点是从一开始就将环境分开。一旦您开始假设两个环境将存在于同一个应用程序中,您的很多代码将基于该假设开发,并且将更难移回两个不同的项目。

    【讨论】:

      【解决方案3】:

      我可以看到两种方法来做到这一点,完全取决于您的需要:

      1) 使用您的应用程序上的版本、Cloud SQL 中的不同实例和 GCS 的不同存储桶名称,您可以使用同一个项目。您只需要非常小心地设置每个呼叫的目标,并在它上线时重新定向它们。

      2) 使用单独的项目可能是更安全的选择,但无论哪种方式,您都需要使用唯一的存储桶名称。 Bucket 名称在所有 GCS 实例中必须是唯一的。

      一旦您设置了权限,就很容易从一个存储桶复制到另一个存储桶。使用gsutil,您可以从存储桶复制到存储桶。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-05
        • 2011-07-14
        • 2015-07-18
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多