Azure

Azure App Service の バックアップで管理ポータルからの復元がエラーになったので調べてみた

2017/07/22

Azure の App Service 上に構築した WordPress のバックアップについて検証してみました。

今回試したのは以下のパターン

  • App Service (Windows) + Azure Database for MySQL
  • App Service (WIndows) + ClearDB
  • App Service (Linux) + Azure Daabase for MySQL

SQL Dagtabase を使うパターンと App Service in MySQL は今回は試してません。

 

試そうと思った経緯

OSC 2017 HOKKAIDO で、以下のツイートを自分がしました。

 

で、気になって家に戻って管理ポータルから復元を試してみたら。。。。
リストアできない。。。

 

ということで、色々調べて今回の記事を書くことになりました。

ちなみに、以下のドキュメントで App Service の Backup で DB も含めてのバックアップと復元はサポートされていることが記載されています。
https://docs.microsoft.com/ja-jp/azure/app-service-web/web-sites-restore

 

バックアップの構成

バックアップの構成は、以下の構成で取得しました。

バックアップ→構成をクリック

 

ストレージを設定して、「データベースをバックアップする」で「バックアップに含める」にチェックを入れて、「保存」ボタンをポチるだけです。
今回はスケジュールバックアップをしていませんが、必要ならその設定もしてください。
「バックアップに含める」に表示されているDBは、アプリケーション設定に設定されているDBです。
例えば、App Service in MySQL の構成や、オリジナルで開発した App Service 環境ですとアプリケーション設定にDBの接続文字列が登録されてない場合もありますので、その時は含めるDBがない感じになります。まぁーアプリケーション設定に登録してあげればいいだけですが。。

 

補足としてアプリケーション設定の画面。接続文字列名が defaultConnection というのがちゃんとありますね。

 

もう一つ補足です。ストレージの設定でコンテナを選ぶ際に、この操作の中でコンテナを新規作成することもできます。
その際に「アクセスの種類」を選択しようとしても、選択項目が表示されず選べませんでした。
ただ、「作成」ボタンは押せるので、アクセスの種類を選択できなかったことは気にせずに作成しましょう。
ちなみに、この場合のアクセスの種類は、「プライベート」で作られてました。

 

 

バックアップの構成が終わったら、あとはバックアップするだけです。

 

復元手順

リストアは、管理ポータルからやるとエラーになるのは検証済ですので他の方法を試すことにします。

ちょうどこんな感じで PowerShell でやる手順があるんですねー。
https://docs.microsoft.com/ja-jp/azure/app-service/app-service-powershell-backup

まずは、Azure PowerShell を起動します

Login-AzureRmAccount

 

サブスクリプションを選択します。

Get-AzureRmSubscription
Select-AzureRmSubscription -SubscriptionId [サブスクリプションID]

 

以下を実行して、復元するバックアップイメージのBackupIdを確認する

Get-AzureRmWebAppBackupList -ResourceGroupName [リソースグループ名] -Name [Web Apps名]

 

(実行結果)

ResourceGroupName  : webappwpmysql
Name               : webappwpmysql
Slot               :
StorageAccountUrl  : https://stgwebbk.blob.core.windows.net/bkup?sv=2015-04-05&sr=c&sig=uKUue25TkmM%2FpGtv7peXLsjnstxud
                     5HxHF%2F5bGldb9A%3D&st=2017-07-15T13%3A57%3A27Z&se=2291-04-29T13%3A57%3A27Z&sp=rwdl
BlobName           : webappwpmysql_201707151400.zip
Databases          : {defaultConnection}
BackupId           : 4008
BackupName         : webappwpmysql_201707151400
BackupStatus       : Succeeded
Scheduled          : False
BackupSizeInBytes  : 37588228
WebsiteSizeInBytes : 69536031
Created            : 2017/07/15 14:00:24
LastRestored       :
Finished           : 2017/07/15 14:01:25
Log                :
CorrelationId      : 03c32e4e-9a68-4bbb-ba5c-7543a8b6989b

 

リストアの実行

$backup = Get-AzureRmWebAppBackup -Name [WebApps名] -ResourceGroupName [リソースグループ名] -BackupId  [BackupID]
$backup | Restore-AzureRmWebAppBackup -Overwrite

 

まとめ

今回のブログを書いている時点では、App Service のバックアップの機能は、管理ポータルからはバックアップはできるけど、DBを含むリストアはできないみたいです。

DB を含むリストアをする場合は、PowerShell を使いましょう!!

でも、リストアする時って結構大変な時も少なくないので、その中でポータルからリストアしようとして Validation エラーでたら、ちょっと心折れちゃうかもしれませんよね。
うまく動かないなら、復元ボタン取るか、エラーメッセージで PowerShell でやってねって出してあげるといいと思うんですけどねー。

あと、もう一個気になるのは、リストア中の進捗が見えないことです。
PowerShell で Restore-AzureRmWebAppBackup を実行すると、リストアの登録要求を投げてすぐにプロンプトが戻ってきます。
その後裏側でリストアが始まるって感じです。
この辺を考えると、ステージングスロットにリストアしてリストア完了後にスワップするとかが現実的なのかな。。。。

-Azure
-,