PowerShell を使って Azureアプリサービスからファイルをコピーする方法

3月 29, 2018 セキュリティとコンプライアンス, MOVEit

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つのパラメータを指定する必要があります。

  • SourcePath - ソース。サイト全体のすべてのコンテンツをダウンロードする場合は、wwwRootになります。
  • TargetPath - ターゲット。ダウンロードしたいフォルダーを指定します。
  • ComputerName - コンピュータ名。Azure アプリケーションサービス上の MSDeploy エンドポイントの URL です。
  • Credential - クレデンシャル。アプリケーションサービス認証に必要な、Azure のユーザー名とパスワード。

次は、これらのパラメータを指定して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 関数で実行できるようになります。

Adam Bertram

Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.