Я новичок в AWS и прохожу курс .NET Workloads on APS Runner на веб -сайте AWS. Я нахожусь в модуле 3 и на шаге, где вы тестируете приложение локально (шаг 5), расположенную по адресу https://aws.amazon.com/developer/langua ... ule-three/. На этом шаге «3. Проверьте действие прогноза погоды для Далласа», я получил Amazon.Runtime.Runtime.AmazonServiceException в окне приложения, в котором говорится: «Невозможно получить учетные данные IAM от EC2 Metadata Service», а JSON возвращает пустой ответ в браузере после добавления «/pheateforcast? Трассировка стека из консоли: < /p>
fail: HelloAppRunnerVpc.Controllers.WeatherForecastController[0]
90 Exception
Amazon.Runtime.AmazonServiceException: Unable to get IAM security credentials from EC2 Instance Metadata Service.
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.FetchCredentials()
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentials()
at Amazon.Runtime.Internal.Util.SdkCache.CacheKey.Create(AmazonServiceClient client, Object cacheType)
at Amazon.Runtime.Internal.Util.SdkCache.GetCache[TKey,TValue](AmazonServiceClient client, Object cacheIdentifier, IEqualityComparer`1 keyComparer)
at Amazon.DynamoDBv2.DocumentModel.Table.GetTableDescriptionCache()
at Amazon.DynamoDBv2.DocumentModel.Table.LoadTable(IAmazonDynamoDB ddbClient, TableConfig config)
at HelloAppRunnerVpc.Controllers.WeatherForecastController.GetWeatherForecast(String location) in \HelloAppRunnerVpc\Controllers\WeatherForecastController.cs:line 37
< /code>
Я настроил CLI AWS и могу успешно войти в профиль AWS, который я сделал через Центр IAM Identity. В моем файле /.aws/config у меня есть следующие учетные данные (некоторые отредактированы): < /p>
[profile Kevin]
sso_session = MySession
sso_account_id = MyId
sso_role_name = AdministratorAccess
region = us-east-1
output = json
[sso-session MySession]
sso_start_url = MyUrl
sso_region = us-east-1
sso_registration_scopes = sso:account:access
< /code>
Для хорошей меры я также установил переменные AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY и AWS_SESSION_TOKE (WeathforeCastController.cs): < /p>
using Amazon;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DocumentModel;
using Microsoft.AspNetCore.Mvc;
namespace HelloAppRunnerVpc.Controllers;
[ApiController]
[Route("")]
public class WeatherForecastController : ControllerBase
{
static readonly RegionEndpoint region = RegionEndpoint.USEast1;
private readonly ILogger _logger;
public WeatherForecastController(ILogger logger)
{
_logger = logger;
}
[HttpGet("")]
public string GetHealthcheck()
{
return "Healthcheck: Healthy";
}
[HttpGet("WeatherForecast")]
public async Task GetWeatherForecast(string location = "Dallas")
{
List forecasts = new List();
try
{
_logger.LogInformation($"00 enter GET, location = {location}");
var client = new AmazonDynamoDBClient(region);
Table table = Table.LoadTable(client, "Weather");
var filter = new ScanFilter();
filter.AddCondition("Location", ScanOperator.Equal, location);
var scanConfig = new ScanOperationConfig()
{
Filter = filter,
Select = SelectValues.SpecificAttributes,
AttributesToGet = new List { "Location", "Timestamp", "TempC", "TempF", "Summary" }
};
_logger.LogInformation($"10 table.Scan");
Search search = table.Scan(scanConfig);
List matches;
do
{
_logger.LogInformation($"20 table.GetNextSetAsync");
matches = await search.GetNextSetAsync();
foreach (var match in matches)
{
forecasts.Add(new WeatherForecast
{
Date = Convert.ToDateTime(match["Timestamp"]),
TemperatureC = Convert.ToInt32(match["TempC"]),
TemperatureF = Convert.ToInt32(match["TempF"]),
Summary = Convert.ToString(match["Summary"])
});
}
} while (!search.IsDone);
_logger.LogInformation($"30 exited results loop");
}
catch (Exception ex)
{
_logger.LogError(ex, "90 Exception");
}
_logger.LogInformation($"99 returning {forecasts.Count} results");
return forecasts.ToArray();
}
}
< /code>
Я также внес необходимые изменения в класс WeatherForecast (также показан здесь для удобства): < /p>
namespace HelloAppRunnerVpc;
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF { get; set; }
public string? Summary { get; set; }
}
< /code>
Какие шаги (ы) я должен предпринять для разрешения этого исключения? Я понимаю, что учетные данные получаются автоматически после входа в ваш профиль AWS в CLI и что AWS .NET SDK использует профиль по умолчанию, если в коде нет ни одного. Смогу ли я использовать профиль по умолчанию, если я выйду из своего текущего профиля в CLI? Если нет, я должен добавить информацию о своем профиле в код, чтобы сделать лабораторию? Если нет, то что еще я мог бы попытаться успешно получить данные из созданной таблицы? Я проверил свою таблицу в Dynamodb, и она присутствует и сделана правильно.
Подробнее здесь: https://stackoverflow.com/questions/789 ... ty-credent
Рабочие нагрузки AWS- .NET на AWS Runner Course: Невозможно получить учетные данные IAM Security от службы метаданных эк ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно получить учетные данные IAM Security от службы метаданных экземпляров EC2
Anonymous » » в форуме C# - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Невозможно получить учетные данные безопасности IAM из службы метаданных экземпляра EC2.
Anonymous » » в форуме C# - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-