web-dev-qa-db-ja.com

Google AppEngineでステージング環境を設定する方法

開発サーバーと本番サーバーを適切に構成したので、ステージングをセットアップしたいと思います。 Google App Engineの環境は、新しく開発されたバージョンを本番環境にデプロイする前にライブでテストするのに役立ちます。

私は2つの異なるアプローチを知っています:

A。最初のオプションは、 app.yamlversionパラメータ。

version: app-staging

このアプローチが気に入らないのは、ステージングテストで本番データが汚染されていることです(間違っている場合は修正してください)。

  1. ステージングバージョンと本番バージョンは同じデータストアを共有します
  2. ステージングバージョンと本番バージョンは同じログを共有します

最初の点に関しては、新しい namespaces python API を使用して「修正」できるかどうかはわかりません。

B。2番目のオプションは、 app.yamlapplicationパラメータ

application: foonamestaging

このアプローチでは、本番バージョンから完全に独立した2番目のアプリケーションを作成します。
私が目にする唯一の欠点は、2番目のアプリケーション(管理者のセットアップ)を構成しなければならないことです。
Gaebar のようなバックアップ\復元ツールを使用すると、このソリューションもうまく機能します。

Webアプリケーションのステージング環境をセットアップするためにどのようなアプローチを使用していますか?
また、デプロイする前にyamlを変更する自動スクリプトはありますか?

56
systempuntoout

セットアップで2番目のオプションを選択したのは、それが最も迅速なソリューションであり、展開時にアプリケーションパラメーターを変更するスクリプトをまだ作成していなかったためです。

しかし、私が今見ているように、オプションAはよりクリーンなソリューションです。いくつかのコード行を使用して、バージョンに基づいてデータストアの名前空間を切り替えることができます。これは、ここに記載されているように、環境変数CURRENT_VERSION_IDから動的に取得できます。 http://code.google.com/appengine/docs/python /runtime.html#The_Environment

13
benwixen

別のデータストアが必要な場合、オプションBは私にとってよりクリーンなソリューションに見えます理由:

  1. 本番アプリケーションの実際のバージョン管理のためにバージョン機能を保持できます。
  2. トラフィック分割のバージョン機能を保持できます。
  3. マルチテナンシーの名前空間機能を維持できます。
  4. エンティティをあるアプリから別のアプリに簡単にコピーできます。名前空間間はそれほど簡単ではありません。
  5. 名前空間をサポートしていないAPIはまだほとんどありません。
  6. 複数の開発者がいるチームの場合、1人の本番環境へのアップロードを許可できます。
17
Zygimantas

オプションBを選択しました。プロジェクトを完全に分離するため、一般的には優れていると思います。したがって、たとえば、ステージングサーバーの構成の一部を試してみても、セキュリティに影響を与えたり、セキュリティを危険にさらしたり、本番環境で他のバタフライ効果を引き起こしたりすることはありません。

デプロイスクリプトに関しては、app.yamlに任意のアプリケーション名を含めることができます。いくつかのダミー/開発者名とデプロイするときは、-Aパラメーターを使用するだけです。

appcfg.py -A your-app-name update .

これにより、デプロイスクリプトが大幅に簡素化され、app.yamlで文字列の置換などを行う必要がなくなります。

5
Maksim Luzik

オプションBを使用します。

アプリケーションレベルでdevをprodから分離することの利点に関するZygmantasの提案に加えて、devアプリケーションを使用してパフォーマンスをテストします。

通常、devインスタンスは、リソースをあまり利用できない状態で実行されます。これは、アプリケーションがどこで「遅い」と感じるかを確認するのに役立ちます。次に、パフォーマンス設定を個別に微調整して、何が違いを生むかを確認することもできます(フロントエンドインスタンスクラスなど)。

もちろん、時には弾丸を噛んだり、ライブで微調整して見たりする必要があります。しかし、他のアプリケーションで遊ぶのはいいことです。

名前空間とバージョンを引き続き使用します。devだけがダーティで実験的です。

4
Campey

私はオプションAを好み、処理を自動化するために 単純なビルドスクリプト を設定しようとしています

0
JackNova