App Engine のMaster-Slave Datastore のマイグレーションについて、分かりにくいことが多いと思うので、FAQを作ってみました。背景は 僕のブログ記事を読んでください。
Master-Slaveを使うアプリは xxx というIDにします。HRDのアプリIDは xxx-hrd とします。
マイグレーションするにはどうすればいいの?
ステップは以下の感じです。それぞれのドキュメントを参照してくでさい。マイグレーションツールについては次の質問もご参考にしてください。
- アプリを複製する。アプリの管理画面の「Application Settings」でできます。
- 新しいアプリへデプロイする
- マイグレーションツールを使ってマイグレーションを行います。
マイグレーションするけど、実際に何が行われるの?
マイグレーションは以下のようなことを順番に行います (ドキュメントはこちら)
- xxx アプリのデータを一旦 xxx-hrd にコピーする (Incremental Copy)。これは何回も繰り返できます。
- コピーが終わったら、xxx を読み込み専用モードにする。これは自動ではなくて自分で「Activate Read-only」ボタンを押す感じです。
- 「Finish Migration」で 1 と 2 の間に更新されたデータを xxx-hrd にコピーする (これは終わったら、元に戻せないので注意)。Finish Migrationが終わったら、エイリアスが作られて、 xxx.appspot.com から xxx-hrd のアプイケーションのデータを使って動作します。
- xxx.appspot.com (内部は xxx-hrd というアプリ)はちゃんと動作しているのを確認してから、Billing を無効にします。その後は xxx を削除できます。
xxx.appspot.comを使い続けたいけど、可能ですか?
可能です。マイクレーションするために、xxx-hrdみたいな別App IDを作らなくちゃいけないけど、マイグレーションの最後にドメインのエイリアスを作るので、 xxx.appspot.com は使い続けます。
xxx というIDを使い続けないけど、可能ですか?
これは不可能です。マイグレーションの最後にドメインのエイリアスを作るので、 xxx.appspot.com は使い続けますが、xxxのアプリIDは使えなくなります。App Engineの管理画面は xxx-hrd を使うことになります。
- App Id: xxx-hrd
- URL: xxx.appspot.com OR xxx-hrd.appspot.com になります。
最終的には、xxx.appspot.comでアクセスできるので、ユーザーのエクピリエンスが変わらないと思います。xxx.appspot.comなのに、管理画面ではxxx-hrdというアプリIDになる分かりにくさだけが残ると思います。
xxx.appspot.com と xxx-hrd.appspot.com から両方アクセスできるのが気持ち悪いんですけど、どうすれば?
もし、xxx-hrd.appspot.comでアクセスを不可能にしたい場合は、アプリ側でHTTPのHostヘッダーを検証するのがベストかなと思います。
xxx から移行したら後に課金されるんですか?
マイグレーションした後に何もしなければ、データの容量に対して課金されます。マイグレーション後に確認した後にxxxのBilling を無効にしなければならない。
xxx はもういらないんだけど、削除できますか?
Billing を無効にしたら、削除できるはず。
最初の Incremential Migration がなかなか終わらないけど、どうすれば?
Incremential Migration をする時に、終わらないケースがあるらしい。 Using the Migration Toolの下の9版をご参考ください。
Read-onlyでIncremental Migrationを行う場合は、終わらないケースを解消するらしい。もし、Incremental Migrationが終わらない場合は、一旦Migrationを止めて、Read-onlyにしてからまたIncremental Migrationを実行するのがいいと思います。
その他
他に質問があると思うんですが、もしここに自分の質問が答えてない場合は、 ここにコメントするか、@IanMLewisに連絡して、できるだけこの記事を更新していきます。あと、#gcpjaというハッシュタグをつけると他のエキスパートの方が回答してくれるかもしれない。