У меня есть служба. NET Core Worker, использующая AWS SQS для чтения сообщений из очереди. Для локальной разработки я использую профиль по умолчанию, в котором хранится секретный ключ доступа. Мои appSettings. json настроены следующим образом:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
},
"TargetCloudWatchGroup": "/aws/insite/workers"
},
"App": {
"TaskProcessDelay": 10000,
"Environment": "NA",
"WorkerType": "INCOMING"
},
"AWS": {
"Region": "ap-southeast-2",
"Profile": "default",
"ProfilesLocation": "C:\\Users\\JMatson\\.aws\\credentials",
"AwsQueueLongPollTimeSeconds": 5,
"QueueUrl": "https://sqs.ap-southeast-2.amazonaws.com/712510509017/insite-incoming-dev"
}
}
Я использую DI для настройки служб:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
//var options = hostContext.Configuration.GetAWSOptions();
services.AddDefaultAWSOptions(hostContext.Configuration.GetAWSOptions());
services.AddHostedService<Worker>();
services.AddSingleton<ILogger, Logger>(); // Using my own basic wrapper around NLog for the moment, pumped to CloudWatch.
services.AddAWSService<IAmazonSQS>();
});
Но когда я запускаю программу в режиме отладки, он не может прочитать сообщение из очереди в Worker.cs со следующей ошибкой:
Исключение типа 'Amazon.Runtime.AmazonServiceException' произошло в System.Private.CoreLib.dll, но не было обработано в коде пользователя: «Невозможно получить учетные данные безопасности IAM из службы метаданных экземпляра EC2».
При запуске кажется, что после нескольких попыток в цепочке учетных данных он находит мои учетные данные?
[40m[32minfo[39m[22m[49m: AWSSDK[0]
Failed to find AWS credentials for the profile default
AWSSDK: Information: Failed to find AWS credentials for the profile default
[40m[32minfo[39m[22m[49m: AWSSDK[0]
Found credentials using the AWS SDK's default credential search
AWSSDK: Information: Found credentials using the AWS SDK's default credential search
Так почему же он не работает? Если я проверяю ближайшее окно, я вижу, что оно собирает мои расчеты:
?hostContext.Configuration.GetAWSOptions().Profile
"default"
?hostContext.Configuration.GetAWSOptions().ProfilesLocation
"C:\\Users\\JMatson\\.aws\\credentials"