App Engine Admin API でデプロイとトラフィック分割を自動化
2016年8月15日月曜日
* この投稿は米国時間 8 月 4 日、Product Manager である Karolina Netolicka によって投稿されたもの(投稿はこちら)の抄訳です。
Google App Engine では通常、Google Cloud Platform Console かコマンドラインを使ってアプリケーションを管理します。ただし、場合によっては、プログラム内からアプリケーションを管理しなければならないことがあります。たとえば、独自に作成したカスタム ツール チェーンから App Engine にデプロイしなければならない場合や、独自の A/B テスト フレームワークを記述したい場合などです。
こうしたことはすべて、App Engine Admin API で可能になります。私たち Google はこのたび、この API を GA(一般公開)リリースしました。
Admin API は、アプリケーションの新バージョンのデプロイや、サービスのトラフィック管理だけではなく、インスタンス クラスなど、アプリケーションのさまざまな構成設定の変更にも使用できます。
さらに、App Engine Flexible Environment をゼロにスケールダウンするために個々のバージョンを止めることも可能です。この API によって複数の App Engine サービスを並列にデプロイできるので、デプロイのスピードもアップします。
なお、Google APIs Explorer を使用すれば、簡単に API を試し、どのような機能が得られるのかがわかります。
上で触れたシナリオに話を戻しましょう。アプリケーションの新バージョンをデプロイし、本番トラフィックの 50 % を使ってテストしたり、それ以外のトラフィックを少しずつ新バージョン向けに移行したりするスクリプトを書くことをイメージしてください。
以下は、その基本的な手順です。詳細は Getting Started ガイドを参照してください。
バージョンのデプロイは、一般に次のステップで進めます。
この例では、ソースコードがすでにステージングされているバージョンをデプロイします。
最初に、次の内容で “helloworld.json” というファイルを作ります。
次に、Admin API に HTTP POST 要求を送って新バージョンを作ります。
(実際にこの要求を送るためには、認証トークンをセットアップする必要があります。詳細は Getting Started ガイドを参照してください)
応答には長時間実行されるオペレーションの ID が含まれているので、それを使ってポーリングすれば、デプロイがいつ終わったかがわかります。
バージョン間でトラフィックを分割するには、少なくとも別のバージョンが 1 つ必要です。別バージョンは、バージョン ID を変更した同じアプリケーションをデプロイすることで作成できます。
たとえば、次の JSON マニフェストを使い、上と同じ手順に従って “appengine-goodbyeworld” バージョンをデプロイしてください。
バージョンのデプロイに成功したら、次の要求でトラフィックの 50 % をこのバージョンにルーティングします。
それでは http://<your-project-id>.appspot.com にアクセスしてアプリケーションを見てみましょう。ページをリロードすると、要求がどちらのバージョンのアプリケーションにルーティングされたかによって表示内容が変わります。
バージョン間でトラフィックを移行するもう 1 つの方法は、App Engine の Traffic Migration 機能を使用することです。そうすれば、新インスタンスに十分なウォームアップのための時間を与えながら、次第にトラフィックを移して、できるだけ早く新バージョンに全面的に移行できます。
Admin API により、ご使用のツールで App Engine アプリケーションを管理できるようにして、日常のワークフローを単純化していただければと思います。
- Posted by Karolina Netolicka, Product Manager
Google App Engine では通常、Google Cloud Platform Console かコマンドラインを使ってアプリケーションを管理します。ただし、場合によっては、プログラム内からアプリケーションを管理しなければならないことがあります。たとえば、独自に作成したカスタム ツール チェーンから App Engine にデプロイしなければならない場合や、独自の A/B テスト フレームワークを記述したい場合などです。
こうしたことはすべて、App Engine Admin API で可能になります。私たち Google はこのたび、この API を GA(一般公開)リリースしました。
Admin API は、アプリケーションの新バージョンのデプロイや、サービスのトラフィック管理だけではなく、インスタンス クラスなど、アプリケーションのさまざまな構成設定の変更にも使用できます。
さらに、App Engine Flexible Environment をゼロにスケールダウンするために個々のバージョンを止めることも可能です。この API によって複数の App Engine サービスを並列にデプロイできるので、デプロイのスピードもアップします。
なお、Google APIs Explorer を使用すれば、簡単に API を試し、どのような機能が得られるのかがわかります。
使い方の例
上で触れたシナリオに話を戻しましょう。アプリケーションの新バージョンをデプロイし、本番トラフィックの 50 % を使ってテストしたり、それ以外のトラフィックを少しずつ新バージョン向けに移行したりするスクリプトを書くことをイメージしてください。
以下は、その基本的な手順です。詳細は Getting Started ガイドを参照してください。
バージョンのデプロイは、一般に次のステップで進めます。
- Google Cloud Storage バケットにアプリケーションのリソースをステージングします。
- app.yaml ファイルを JSON マニフェストに変換します。
- Admin API に HTTP POST 要求を送って新バージョンを作ります。
この例では、ソースコードがすでにステージングされているバージョンをデプロイします。
最初に、次の内容で “helloworld.json” というファイルを作ります。
{ "deployment": { "files": { "main.py": { "sourceUrl": "https://storage.googleapis.com/admin-api-public-samples/hello_world/main.py" }, } }, "handlers": [ { "script": { "scriptPath": "main.app" }, "urlRegex": "/.*" } ], "runtime": "python27", "threadsafe": true, "id": "appengine-helloworld", "inboundServices": [ "INBOUND_SERVICE_WARMUP" ] }
次に、Admin API に HTTP POST 要求を送って新バージョンを作ります。
POST https://appengine.googleapis.com/v1/apps/my-application/services/def ault/versions helloworld.json
(実際にこの要求を送るためには、認証トークンをセットアップする必要があります。詳細は Getting Started ガイドを参照してください)
応答には長時間実行されるオペレーションの ID が含まれているので、それを使ってポーリングすれば、デプロイがいつ終わったかがわかります。
バージョン間でトラフィックを分割するには、少なくとも別のバージョンが 1 つ必要です。別バージョンは、バージョン ID を変更した同じアプリケーションをデプロイすることで作成できます。
たとえば、次の JSON マニフェストを使い、上と同じ手順に従って “appengine-goodbyeworld” バージョンをデプロイしてください。
{ "deployment": { "files": { "main.py": { "sourceUrl": "https://storage.googleapis.com/admin-api-public-samples/goodbye_world/main.py" }, } }, "handlers": [ { "script": { "scriptPath": "main.app" }, "urlRegex": "/.*" } ], "runtime": "python27", "threadsafe": true, "id": "appengine-goodbyeworld", "inboundServices": [ "INBOUND_SERVICE_WARMUP" ] }
バージョンのデプロイに成功したら、次の要求でトラフィックの 50 % をこのバージョンにルーティングします。
PATCH https://appengine.googleapis.com/v1/apps/my-application/services/def ault/?updateMask=split { "split": { "shardBy": "IP", "allocations { "appengine-helloworld": 0.5, "appengine-goodbyeworld": 0.5 } } }
それでは http://<your-project-id>.appspot.com にアクセスしてアプリケーションを見てみましょう。ページをリロードすると、要求がどちらのバージョンのアプリケーションにルーティングされたかによって表示内容が変わります。
バージョン間でトラフィックを移行するもう 1 つの方法は、App Engine の Traffic Migration 機能を使用することです。そうすれば、新インスタンスに十分なウォームアップのための時間を与えながら、次第にトラフィックを移して、できるだけ早く新バージョンに全面的に移行できます。
PATCH https://appengine.googleapis.com/v1/apps/my-application/services/def ault/?updateMask=split&migrateTraffic=true {"split": { "shardBy": "IP", "allocations": { <"appengine-goodbyeworld": 1 } } }
その他の情報
App Engine Admin API ドキュメントには、API の認証獲得、特定のプログラミング言語から API を呼び出すためのクライアント ライブラリなど、Admin API の使い方が完全な形で掲載されています。Admin API により、ご使用のツールで App Engine アプリケーションを管理できるようにして、日常のワークフローを単純化していただければと思います。
- Posted by Karolina Netolicka, Product Manager
0 件のコメント :
コメントを投稿