PowerShell を使用して独自のツールを作成することで、ごく簡単にローカルにコンテンツを転送できます。その方法を説明します。
Azure アプリケーションサービスでコンテンツをアップロードした後に、そのコンテンツをローカルにダウンロードしたい場合があります。通常は、内部ツールを使用して何らかの方法でコンテンツを変更するか、またはバックアップをとったりします。残念ながら、コンテンツをローカルに転送するための簡単な方法はマイクロソフトからは提供されていません。
コンテンツをローカルに転送するツールを独自で作成するには、いくつかの前提条件があります。まず、明らかに PowerShell が必要です。ここでは、PowerShell v5 を使って説明しますが、v4 でも同様に動作します。また、2つの "ヘルパー" PowerShellモジュールも必要になります。実際の転送を行うには、技術的には、MSDeploy ツールを使用して Azure のデータをオンプレミスと同期させます。PSWebDeployモジュールを使用すると、別々の PowerShell モジュールを使わずにすみ、複雑な MSDeploy のパラメータとスイッチを設定する必要がなくなります。PSWebDeploy モジュールを使うには、Web Deploy をインストールする必要があります。
上述の必要な準備を終了した時点で、大半の作業はすでに完了しています。Azure アプリケーションサービスは1つの IIS Web サイトなので、面倒な作業は MSDeploy ツール(PSWebDeploy PowerShellモジュールを使用)に任せることができます。
Azure アプリケーションサービスからコンテンツをダウンロードするには、PSWebDeploy モジュールにある Sync-Website 関数を使用します。この関数は、MSDeploy へのラッパーとして動作し、Azure アプリケーションサービス内で利用可能な IIS Web サイトのコンテンツをダウンロードするのに必要なすべてのパラメータとスイッチを、MSDeploy に自動的に送信します。
Sync-Website コマンドには、SourcePath、TargetPath、ComputerName、Credential という4つのパラメータを指定する必要があります。
次は、これらのパラメータを指定してSync-Website を呼び出す方法の例です。
$appServiceName = 'myappservice'
$credential = Get-Credential
$syncParams = @{
SourcePath = 'wwwroot'
TargetPath = 'C:\MyLocalFolder'
ComputerName = "https://$appServiceName.scm.azurewebsites.net:443/msdeploy.axd?site=$appServiceName"
Credential = $credential
}
Sync-Website @syncParams
上記のコマンドを実行すると、C:\MyLocalFolder にAzure アプリケーションサービスのすべてのコンテンツがダウンロードされます。ここで終わることもできますが、Save-AzrWebApp 関数を作成してもっとシンプルにすることも可能です。以下のようにすることで、プロセスはさらにシンプルになります。
PS> Save-AzrWebApp -Name 'myappservice' -TargetPath 'C:\MyLocalFolder' -Credential (Get-Credential)
Save-AzrWebApp が実行されたとき、実際に表面下で何が起きているのかを見たら、(その複雑さに)きっと驚くと思います。これが、PowerShellを使用することの素晴らしさです。コミュニティのメンバーとして、私たちは自分のためだけでなく、このようなツールを作成して他の人たちを支援することができます!Azure アプリケーションサービスからのファイルのコピーは、ここに掲載された単純な1行コマンドですむようなものではありません。しかし、いったんツールが作成されれば、MSDeploy の複雑な処理を、シンプルな Save-AzrWebApp 関数で実行できるようになります。
Subscribe to get all the news, info and tutorials you need to build better business apps and sites