Freigeben über


Azure WebJob のコマンド ライン配信または継続的デリバリの実行

このポストは、8 月 18 日に投稿した Enabling Command-line or Continuous Delivery of Azure WebJobs の翻訳です。

Visual Studio 2013 Update 3 でリリースされた WebJob 発行ツールの開発にあたって、マイクロソフトでは、Azure API および Management Libraries の機能強化に対応できるように設計を行いました。これにより、WebJob ツールに対する更新プログラムは迅速にリリースが可能です。また、開発者の皆様が継続的インテグレーションのビルドにおいて使い慣れている発行機能の使用を求めていることを理解していましたし、WebJob を発行する新しいツールによって、既存のツールと発行の自動化シナリオで対応できなかったことが実現できるだろうと考えました。そしてこのたび、コマンド ラインを使用した WebJob の発行シナリオと継続的インテグレーションのシナリオに改善の余地を見つけたため、これらの不足を解消する更新プログラムを用意しました。今回の記事では、この更新プログラムと、Visual Studio の正式な更新プログラムの発表直後にマイクロソフトがこの更新プログラムをリリースできたしくみ、Azure WebJob の継続的インテグレーションまたはコマンド ライン発行を実行してそのメリットを活用する方法について概要をご説明します。

NuGet による迅速なツール更新プログラムの実現

最大限の柔軟性を提供するために、WebJob の発行ロジックを実際に実行するコードの大部分を含む WebJobs Publish NuGet パッケージ (英語) が公開されています。以下の図は、WebJob ツールによる発行チェーンのアーキテクチャの概要を示しています。

Scheduler のジョブ コレクションや WebSites といった Azure リソースをセットアップするため、また API を効果的に使用してそれらのコンポーネントを NuGet パッケージに統合するために必要となる API 呼び出しをカプセル化することで、より広範な Visual Studio の更新プログラムを必要とすることなく、API の機能強化、修正プログラム、リファクタリングなどを実行することができます。上記の図は、NuGet を利用して基本的なツールのワークフローに更新プログラムをリリースすることのメリットも示しています。Visual Studio とコマンド ラインによる両方のプロセスで NuGet 更新プログラムのメリットを得ることが可能です。これらの機能強化は NuGet を通じて有効化されるため、コマンド ラインから WebJob を発行するための最初の手順として、まずは WebJobs Publish NuGet パッケージをバージョン 1.0.1 に更新する必要があります。以下の NuGet パッケージの更新ダイアログのスクリーンショットでは、Visual Studio 2013 からこの更新を実行しています。

コマンド ライン発行のメリット

この記事では、Microsoft WebJobs Publish 1.0.1 NuGet パッケージ (英語) のコマンド ライン関連の機能強化と、Azure WebJob のコマンド ライン配信または継続的デリバリを実行する方法を中心にご説明します。これは、おそらく WebJob 所有者の大半が抱える主要な要件であるため、包括的な Visual Studio 3 Update に含めることを検討しましたが、数点の機能強化を追加する必要がありました。そこで、Azure WebJob 所有者が反復的な WebJob の発行シナリオを設定するうえで複数の選択肢を提供できるように、可能な限り多くの認証シナリオをテストして実現させました。

非対話式操作による Azure 認証を実行する

上記の図を見ると、WebJob ツールが Microsoft Azure Management Libraries (MAML、英語) を基盤として構築されていることがわかります。MAML では、Active Directory トークンと管理証明書という、主に 2 種類の方法で Azure への認証を実行することができるため、WebJob ツールでもこの両方の認証方法を使用できます。Visual Studio には、Active Directory トークンにダイヤルインするための優れた方法が提供されており、WebJob を手動で発行する際にはこの認証方法が既定として使用されます。しかし、Visual Studio からの発行とコマンド ラインからの発行を比較した場合、以下の認証ウィンドウは Visual Studio あるいはその他のクライアントから手動で認証する場合にのみ有用です。

ビルド サーバーなど、機械やサービスによって実行されるコマンド ライン環境では、ログイン ダイアログを利用する方法は適切ではありません。継続的インテグレーションのビルド中に Azure へのビルド サーバーの認証方法が利用できなければ、WebJob 発行の自動化を実現することはできません。おもしろいことに、WebJob 発行の自動化シナリオを実現する最適なソリューションは私たちの目の前にありました。私たち自身のテスト環境で使用されているテクニックを流用したのです。当たり前のことながら、WebJob ツールを自動化する方法を考え出すためには、マイクロソフト自身の自動化シナリオのテスト方法を参考にするのが最善の策でした。ところが、あまりにも数多くのテストを実行していたため、コマンド ラインを使用したシナリオのテストを独立したものとして詳細に注目することがなかったのです。そこで、Visual Studio の更新プログラムが完成した後、コマンド ラインを使用したシナリオの完全なテストと改善に着手しました。

WebJob の発行プロセスを管理証明書による認証に変更する

Azure API への認証には、Active Directory トークンを使用する代わりに管理証明書を使用することもできます。私たち自身のツールのテストでは、ビルド サーバーの認証に管理証明書を使用していたため、お客様も MSBuild プロセスで管理証明書を使用できるようにしました。その結果、継続的インテグレーション環境で作成されたプロジェクトで Azure に WebJob を発行し、関連する Scheduler のジョブを適切に作成して関連付けることができるようになりました。WebJobs Publish NuGet パッケージ バージョン 1.0.1 (上記参照) のインストール後、発行する Web アプリケーション プロジェクトまたはコンソール アプリケーションのプロパティ フォルダーに webjobs.props という名前のファイルを追加します。

このファイルでは、3 種類の方法で管理証明書を使用した WebJob の発行プロセスの認証を行うことができます。

新規の Azure 発行設定ファイルを取得する

管理証明書を使用した Azure への認証で最も簡単なのは、Azure 発行設定ファイルに格納された情報を使用する方法です。Azure 発行設定ファイルを取得するには、Azure PowerShell コマンドレットをインストールし、Get-AzurePublishSettingsFile コマンドを実行するのが簡単です。この操作で、Azure 発行設定のダウンロード用 URL が表示されます。

webjobs.props ファイルを編集する

1 つ目の方法は、Base64 でエンコードされた管理証明書の文字列の値を手動で入力することです。管理証明書のエンコード済みの形式は、*.publishsettings ファイルから webjobs.props ファイルに直接コピーすることができます。証明書の値と Azure サブスクリプション ID が存在することで、WebJob の発行プロセスで、(有効期限切れまたは存在しない可能性のある) AAD トークンを使用した既定の認証の代わりに、管理証明書を使用した認証が行われます。

WebJob の発行プロセスで認証情報を使用する 2 つ目の方法は、webjobs.props ファイルで *.publishsettings ファイル自体を使用することです。これにより、Azure API への認証に使用できる認証情報を含む発行設定ファイルが MSBuild に対して指定されます。注: 以下のスクリーンショットでは、2 つの認証方法を示しています。実行する場合は、両方ではなく、いずれか一方を使用してください。

3 つ目の方法は、発行プロセスに対して、以前に Azure にアップロードした CER ファイルと対になる PFX ファイルを指定することです。PFX ファイルをビルド サーバーのユーザーが使用できるように設定するか、webjobs.props ファイルに証明書のパスワードを直接入力します。

webjobs.props ファイルにいずれかの認証方法を記述したら、ビルドをコマンド ラインから実行することができます。

コマンド ラインから WebJob を発行する

お客様の環境を反映するように webjobs.props ファイルを設定したら、コマンド ラインから以下のような MSBuild スクリプトを実行して、WebJob と共にアプリケーションを作成してデプロイすることができます。発行プロセスにスケジュールが設定された WebJob が含まれる場合、WebJob のスケジュールを設定する Azure Scheduler のジョブも作成されます。以下のコードをコピーして Visual Studio 2013 の開発者コマンド プロンプトの実行中のインスタンスに貼り付けると、ビルドを実行して発行することができます。

 msbuild WebJobDemo.Web.csproj /p:DeployOnBuild=true /p:PublishProfile=WebJobDemo /p:VisualStudioVersion=12.0 /p:Password=asdfasdf

ビルドが完了すると、Web の発行が完了したこと、また WebJob のスケジュールを設定する Scheduler のジョブ コレクションおよびジョブが作成されたことを示すログが MSBuild によって出力されます。

矢印の箇所は、スケジュールが設定された WebJob を作成するエンドツーエンドのプロセスの主要なステップを示しています。

まとめとロードマップ

コマンド ラインを使用したシナリオを実行するために必要な唯一のツールである WebJobs Publish NuGet パッケージ 1.0.1 (英語) の更新プログラムがリリースされました。今すぐパッケージをアップデートしてご活用ください。今後も Azure API の機能が強化されたり、マイクロソフトのミドルウェアおよびコマンド ラインを使用したシナリオで Azure Management Libraries などのリソースが共有されたりすることで、反復的な発行の自動化を活用できる機会がさらに増加するでしょう。マイクロソフトでは、認証されていない AAD 認証の提供や、新しいリソース管理 API のサポートなど、その他の機能強化についても検討中です。これらの機能強化が提供されるたびに、AzureWeb 開発とツール (英語) に関するブログのコミュニティを更新してお知らせする予定ですので、引き続きご注目ください。またご意見、ご感想がありましたら、ぜひお知らせください。