0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M1 Mac で Azure Durable Functions の分離ワーカーモデルが Grpc.Core: Error loading native library. エラー

Posted at

インプロセスモデルが延命されたとは言え、方針は分離ワーカーモデル一本のようなので、これから Azure Functions を新規に作成するなら分離ワーカーモデルで作成しておくのが良い選択だと信じています。そこで、自宅の M1 Mac で Durable Functions を検証がてら試してみました。ところが .NET6 でも .NET 8 でも同じエラーが発生しました。

.NET 8 で分離ワーカーの Durable Functions 作成

zsh
func init mnrdf8 --worker-runtime=dotnet-isolated --target-framework=net8.0

cd mnrdf8

func new --name Example --template DurableFunctionsOrchestration

func start

下記のように Grpc.Core: Error loading native library. エラーが発生

[2024-09-21T11:51:37.936Z] Found /Users/mnr/work/test/mnrdf8/mnrdf8.csproj. Using for user secrets file configuration.
[2024-09-21T11:51:39.288Z] A host error has occurred during startup operation '28c4f96b-c3da-4601-9747-f689dcbce0ad'.
[2024-09-21T11:51:39.288Z] Grpc.Core: Error loading native library. Not found in any of the possible locations: /Users/mnr/work/test/mnrdf8/bin/output/.azurefunctions/libgrpc_csharp_ext.arm64.dylib,/Users/mnr/work/test/mnrdf8/bin/output/.azurefunctions/runtimes/osx-arm64/native/libgrpc_csharp_ext.arm64.dylib,/Users/mnr/work/test/mnrdf8/bin/output/.azurefunctions/../../runtimes/osx-arm64/native/libgrpc_csharp_ext.arm64.dylib.
Value cannot be null. (Parameter 'provider')
[2024-09-21T11:51:39.322Z] Host startup operation has been canceled

mnrdf8.csproj に追記

Contrib.Grpc.Core.M1 パッケージの 2.41.0 を追加

xml
    <PackageReference Include="Contrib.Grpc.Core.M1" Version="2.41.0" />

Mac の時だけ libgrpc_csharp_ext.arm64.dylib をコピー

xml
  <Target Name="CopyGrpcNativeAssetsToOutDir" AfterTargets="Build">
    <ItemGroup>
      <NativeAssetToCopy Condition="$([MSBuild]::IsOSPlatform('OSX'))" Include="$(OutDir)runtimes/osx-arm64/native/*" />
    </ItemGroup>
    <Copy SourceFiles="@(NativeAssetToCopy)" DestinationFolder="$(OutDir).azurefunctions/runtimes/osx-arm64/native" />
  </Target>

mnrdf8.csproj 全体

mnrdf8.csproj
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.1" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.0" />
    <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
    <PackageReference Include="Contrib.Grpc.Core.M1" Version="2.41.0" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext" />
  </ItemGroup>
  <Target Name="CopyGrpcNativeAssetsToOutDir" AfterTargets="Build">
    <ItemGroup>
      <NativeAssetToCopy Condition="$([MSBuild]::IsOSPlatform('OSX'))" Include="$(OutDir)runtimes/osx-arm64/native/*" />
    </ItemGroup>
    <Copy SourceFiles="@(NativeAssetToCopy)" DestinationFolder="$(OutDir).azurefunctions/runtimes/osx-arm64/native" />
  </Target>
</Project>

Functions を再実行

zsh
func start
[2024-09-21T11:54:12.637Z] Found /Users/mnr/work/test/mnrdf8/mnrdf8.csproj. Using for user secrets file configuration.
[2024-09-21T11:54:15.249Z] Worker process started and initialized.

Functions:

        Example_HttpStart: [GET,POST] http://localhost:7071/api/Example_HttpStart

        Example: orchestrationTrigger

        SayHello: activityTrigger

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?