はじめに
AWSにデプロイしたアプリでは問題ないのですが、ローカル環境でAWSSDK.Extensions.NETCore.Setupで構成したAWSの各種クライアントを初期化するときに数秒から数十秒かかる現象に遭遇しました。
この問題はAWSSDK.Extensions.NETCore.Setup 3.7.2で行われた改善が原因で、現在プレビュー版の4.xで改善されるらしいですが、現時点では最新版の3.7.400でも同様に発生しています。
現時点の対応としては、appsettings.jsonでAWS:DefaultsMode
をStandard
にすると回避できます。AWSSDK V4ではStandard
がデフォルトになるようなので、問題が出ている場合は先行して変更するということですね。
3.7.2 以降で初期化に時間がかかる
.NETでAWSSDKを利用する場合、GenericHost下であればAWSSDK.Extensions.NETCore.Setupを使って次のように初期化することがほとんどでしょう。
services.AddDefaultAWSOptions(configuration.GetAWSOptions()!);
services.AddAWSService<IAmazonS3>();
AWSSDK.Extensions.NETCore.Setup のバージョン 3.7.2 以降では、DIでAddAWSServiceに登録したサービスを受け取ったり、ServiceProviderからインスタンスを取得したりする場合、ローカル環境では初回のインスタンスの解決に数秒から数十秒時間がかかります。
原因
AWSSDK.Extensions.NETCore.Setup 3.7.2 で入った、インスタンスの遅延初期化に関する問題で、ローカル環境実行時に存在しないIMDS(インスタンスメタデータサービス)と通信を行おうとして失敗し、数回のリトライを待機することが原因のようです。
対処
4.xで解消されているということですが、現在(2025/02/28)時点ではプレビュー状態でまだ利用できないため、appsettings.jsonを次のように修正します。
{
"AWS": {
"Region": "ap-northeast-1",
- "Profile": "myprofile"
+ "Profile": "myprofile",
+ "DefaultsMode": "Standard"
}
}
DefaultMode
はスマート設定デフォルト
という機能で利用される設定値です。下記のページに概要が示されていますが、AWS SDKを利用する際の再試行の方法や回数などに影響するようです。
おわりに
DefaultMode
が各サービスに与える影響が確実につかめたわけではありませんが、設定後、ローカルおよびAWSかんで動作させてみた感じ問題なさそうなのでとりあえず様子見にしようと思います。