Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

WebJobsのスケジュール実行を一時停止する

WebJobs のスケジュール実行を一時的に止めたかったので、調べた結果の備忘録です。

github.com

上記のURLより、Azure WebAppsのアプリ設定から特定の変数を定義することで実現できるようです。

スケジュール実行の一時停止は以下の環境変数に1を定義しておくとよい感じです。

  • WEBJOBS_DISABLE_SCHEDULE

Set this to 1 to turn off all scheduled triggering. Unlike with WEBJOBS_STOPPED, WebJobs can still be manually invoked.

とのことですので、スケジュール実行は停止されても、ポータルからはマニュアル実行可能なので、一時的に停止して、デバッグしたいときとか有効かと思います。

以上

WebJobsにデプロイするときMSDeployPublish が見つかりませんでエラーが発生する

ちょっとはまったので備忘録。

Visual Studio の ProjectをPackage Reference形式にしているときに、WebJobsへデプロイしようとすると、MSDeployPublishが見つかりません的なエラーが表示されます。

ググってたら、Issueがありました。

Make WebJobs.Publish compatible with NuGet v3 protocol (PackageReference) · Issue #1109 · Azure/azure-webjobs-sdk · GitHub

当面の回避策としては、以下をcsprojに追加すればOKです。

<Import Project="$(NuGetPackageRoot)Microsoft.Web.WebJobs.Publish\1.1.0\tools\webjobs.targets" Condition="Exists('$(NuGetPackageRoot)Microsoft.Web.WebJobs.Publish\1.1.0\tools\webjobs.targets')" />

Azure Batchのリソースファイルをより簡単にアップロードする

前回の記事で、UploadFileToContainer を使って手動でBLOBにリソースファイルをアップロードしていましたが、SDKにそういう機能をもったAPIが定義されていました。

関連するのは以下のクラス

  • IFileStagingProvider
  • FileToStage
  • StagingStorageAccount

です。FileToStageが、IFileStagingProviderを実装した具象クラスで、StagingStorageAccountは、ストレージアカウント情報を保持するクラス。

MSDN的には以下をたどればよいでしょう。

FileToStage Class (Microsoft.Azure.Batch.FileStaging) | Microsoft Docs

具体的なコードとしては、

var filesToStage = new List<IFileStagingProvider>();
...
fileToStage.Add(ファイルのフルパス);
..
task.FilesToStage = fileToStage;

とすれば、勝手に指定したストレージアカウントに任意のコンテナ作成して、Uploadしてくれます。めっちゃ便利ですね。

またこのままだと、不要なリソースファイルが蓄積されてしまいますので、削除したくなると思います。そういうときは、

    var artifacts = batchClient.JobOperations.AddTask(jobId, task);

Taskを投入するときに、IFileStagingArtifact が格納されたDictionaryが返ってきますので、中身を除くとUpload時につかったコンテナが格納されていると思います。

と長々書きましたが、以下のコードを読んだほうが早いと思います。

github.com

サンプルコード読むの大事ですね。