【GCP】Google Cloud Functions で NetworkInformationException が発生したときの対処法

C#

はじめに

Google Cloud Functions で以下のエラー文の NetworkInformationException が発生したのでその対処法をメモしておきます。

System.Net.NetworkInformation.NetworkInformationException (13): Permission denied
at System.Net.NetworkInformation.NetworkChange.CreateSocket()
at System.Net.NetworkInformation.NetworkChange.add_NetworkAddressChanged(NetworkAddressChangedEventHandler value)
at System.Net.Http.HttpConnectionPoolManager.StartMonitoringNetworkChanges()
at System.Net.Http.HttpConnectionPool.HandleAltSvc(IEnumerable`1 altSvcHeaderValues, Nullable`1 responseAge)
at System.Net.Http.HttpConnectionPool.ProcessAltSvc(HttpResponseMessage response)
at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at SampleNameSpace.SampleClass.SampleFunction() in /workspace/SampleClass.cs:line 101

原因と対処法

このエラーはネットワークインターフェースの変更を検知する機能を .NET Core アプリケーションが使おうとしたときに Google Cloud Functions の実行環境で必要な権限が無いことが原因で発生します。

このエラーに対しては Google Cloud Functions で実行する関数の冒頭に以下のコードを追加して HTTP/3 を動的に無効化することで解決しました。
(このコードは C# の場合のコードです)

AppContext.SetSwitch("System.Net.SocketsHttpHandler.Http3Support", false);

最後に

参考記事

お問い合わせ

    タイトルとURLをコピーしました