6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure Functions v2.0 の Breaking Change 対応

Posted at

今日 Azure Functions V2 を起動すると次のエラーが出てFunctions が認識されなくなった。

Capture.JPG

エラーの詳細は次の感じ

[04/09/2018 00:12:14] Error indexing method 'StrikesRepository.CreatePackage'
[04/09/2018 00:12:14] Microsoft.Azure.WebJobs.Host: Error indexing method 'StrikesRepository.CreatePackage'. Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'packages' to type IAsyncCollector`1. Make sure the parameter Type is supported by the binding. If you're using binding extensions (e.g. ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. config.UseServiceBus(), config.UseTimers(), etc.).
[04/09/2018 00:12:14] Function 'StrikesRepository.CreatePackage' failed indexing and will be disabled.

VSのコンソールでバージョンを確認するとBreaking Change 対象のバージョンにバージョンアップしてた。

Azure Functions Core Tools (2.0.1-beta.36)
Function Runtime Version: 2.0.12050.0

予想通りだけど、先日 Breaking Change が発表されていたので、その実施内容を書いておきたい。

しばらく不安定かもしれないのでこの Issue を Subscribe しておくとよさげ。

Breaking Change の内容

Storage が Extensions 化した

今回の Breaking Change の内容は、もともと、Azure Functions のランタイムに含まれていた Storage のコードが、Extensions として外だしされることになった。メリットとしては、自分でExtensionsのバージョンを変えることができるので、Extensions で使われているSDKのバージョンを選択できる。これはいい感じだ。

コンフィグが変わった

host.json に `"version": "2.0" が必要になった。

Function App のシークレットのストレージの変更

下はファイルシステムにストアされていたのを、Blobにストアするように変更。これは自動でマイグレートしてくれる様子。
ただ、自分で、直接ファイルアクセスとか、SCM APIで、シークレットを管理していると動かなくなる様子。

Single language functions in a Function App

1つの Function App で複数の言語を動かすことができなくなった。(理由の明記はなし)

対処のステップ

自分で実践したステップを書いておく

host.json の変更

{ "version": "2.0" }

AppSettings / local.settings.json

下記の追加だが、すでに追加されていた。

    "FUNCTIONS_WORKER_RUNTIME": "dotnet",

ローカル開発

Breaking Change に対応したNuget package に変更していく。少なくとも下記のもののバージョン以上に
しないと多分動かない。

NuGet Package Version
Microsoft.NET.Sdk.Functions 1.0.19
Microsoft.Azure.WebJobs.Extensions.CosmosDB 3.0.1-beta1
Microsoft.Azure.WebJobs.Extensions.DurableTask 1.6.0
Microsoft.Azure.WebJobs.Extensions.MicrosoftGraph 1.0.0-beta4
Microsoft.Azure.WebJobs.ServiceBus 3.0.0-beta8
Microsoft.Azure.WebJobs.Extensions.EventHubs 3.0.0-beta8
Microsoft.Azure.WebJobs.Extensions.SendGrid 3.0.0-beta8
Microsoft.Azure.WebJobs.Extensions.EventGrid 2.0.0-beta4
Microsoft.Azure.WebJobs.Extensions.Storage 3.0.0-beta8
Microsoft.Azure.WebJobs.Extensions.Twilio 3.0.0-beta8
Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator 1.0.0

実施した手順

  • Microsoft.NET.Sdk.Functions1.0.19 にする。Storage や、Http等も Extensionとして自動で入る様子。
  • Microsoft.Azure.WebJobs.Extensions.CosmosDBv3.0.0-beta7 から、v3.0.1-beta2
  • 関連ライブラリのバージョンを上記に合わせる

ここまでで、今まで作っていた、Azure Functions + CosmosDB Bindings の部分は動作したところが、自前で書いていた DIBinding が動作しなくなった。これは、このBreaking Change のためである。内部のライブラリも変わっている様子。
どのように、Custom Bindings を変えたらいいかは英語ですがブログにしておきました。

他に必要となる可能性のある手順

Durable Functions

Host.json の書き方の変更


{
  "version":"2.0",
  "extensions": {
    "durableTask": {
      "hubName": "MyTaskHubV2",
      "azureStorageConnectionStringName": "storagewestus12345"
    }
  }
}

REST API のURLの変更

GET /runtime/webhooks/DurableTaskExtension/instances/{instanceId}?code=XYZ

GET /runtime/webhooks/durabletask/instances/{instanceId}?code=XYZ

Storage Extension

新しくできたので、Queue Trigger などはこちらを入れる必要あり。

わかりにくいエラーメッセージ

アップグレード時のエラーに関してはこちらを見ろとのこと

バージョンアップしたくないケース

ランタイムをApp Settings で FUNCTIONS_EXTENSION_VERSION to 2.0.11961-alpha に固定する。ちなみに、私はラやないので試してないが、一番最初の Issue のページには Visual Studio のCore tools のバージョンを固定する方法も書かれていますので、必要な人はご参照ください。

まとめ

Custom Bindings のところは多少苦労しましたが、そうでなければ基本的に設定の変更と、host.json の変更だけで事住みました。VS のAzure Functions Core Tools は知らない間にアップデートされていた様子です。よい Azure Functions の開発を。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?