web-dev-qa-db-ja.com

DB移行およびAzureデプロイメントスロット

新しいWebアプリケーションをAzure Web App Service(旧Azure Webサイト)にプッシュする予定です。本番環境にプッシュする前にデプロイメントをテストできるように、デプロイメントスロットを利用したいと思います。 DBスキーマを変更する必要がない限り、これで問題ありません。しかし、スキーマが変更された場合、2つのソフトウェアバージョンを同じdbバージョンで動作させることはできません。私はEF移行を使用しているため、ステージングスロットへのプッシュにより、DBが最新バージョンに即座に更新されます。

だから私の質問は、データベースの移行が必要なときに展開スロットを使用するかどうかです。

大規模なプロバイダーの場合、どのように行われますかSaaSプロバイダー。新しいバージョンで即座にDB移行を実行していますか?確かにダウンタイムが発生します。

私はこの問題のかなり複雑な解決策しか考えることができません、単純なものはありますか?

16
Sam7

Azure App Serviceスロットとステージングとプロダクションで共有される単一のデータベースを使用したダウンタイムなしのリリースは可能ですが、すべてのデータベースの変更に下位互換性があることを確認して、Webアプリの現在のバージョンと新しいバージョンを同時に実行できるようにする必要がありますステージングおよび本番スロット。

これが機能することを保証するいくつかのルール:

  • 新しいデータベースの列はすべてnull可能であるか、デフォルト値を持っている必要があります
  • 列の名前を変更することはできません
  • 列の削除は許可されていません

列の名前の変更や削除などの破壊的な変更を行う必要がある場合、これを行うには2つのリリースが必要です。

  1. 新しいバージョンのWebアプリをリリースする必要があります。これにより、名前が変更された列やドロップされた列への依存関係が削除されます
  2. 破壊的な変更を行う追加のリリースが行われます

これは少し複雑に聞こえますが、実際には、破壊的な変更を頻繁に行うことはないでしょう。

3
Cocowalla

スロット固有の構成アイテムを見ましたか? WebApp/Settings/Application Settingsで、Webアプリの設定を指定できますが、このスロットにのみ適用するかどうかも定義できます。

したがって、ステージングスロットにスロット固有の接続文字列を用意し、スワッピングスロットにも移行を適用できます。

0
Owain Thomas