AWS ECS EC2: TaskCanceledException при вызове AWS API (истекло время ожидания соединения) - PullRequest
0 голосов
/ 19 июня 2019

Я настроил кластер AWS ECS с экземплярами контейнеров типа EC2.В определении задачи есть переменная окружения "SECRETS", значение которой соответствует определенному секретному имени.В определении задачи используется сетевой режим awsvpc.

Для доступа к значению секретов из кода (.net) используется следующий код (из фрагмент aws ):

IAmazonSecretsManager client = new AmazonSecretsManagerClient(region);
GetSecretValueRequest request = new GetSecretValueRequest
{
  SecretId = secretName,
  VersionStage = "AWSCURRENT" // VersionStage defaults to AWSCURRENT if unspecified.
};
GetSecretValueResponse response = Task.Run(async () => await client.GetSecretValueAsync(request)).Result;

Это прекрасно работает с Fargate типом экземпляра.При переключении на EC2 экземпляр контейнера GetSecretValueAsync () завершается с AggregateException: TaskCanceledException .

Я пытался получить роль IAMучетные данные изнутри контейнера с успехом:

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Я также попытался указать полученные учетные данные напрямую, но не повезло:

AmazonSecretsManagerClient(awsAccessKeyId, awsSecretAccessKey, region)

Кроме того, у меня естьпробовал выпекать aws cli внутри контейнера, а изнутри я пробовал aws secretsmanager, aws iam get-user и aws sts get-caller-identity - все еще зависает без ответа.Я предоставил полный доступ администратора к роли выполнения задач - все еще безуспешно.Я могу получить секреты из экземпляра контейнера EC2, но не из смонтированного контейнера.

1 Ответ

0 голосов
/ 27 июня 2019

Благодаря поддержке AWS решение найдено. Ключевой проблемой моей конфигурации была комбинация awsvpc сетевой режим и тип запуска EC2 для контейнеров:

Режим сети awsvpc не предоставляет ENI задач с публичным IP адреса для задач, которые используют тип запуска EC2. Чтобы получить доступ к Интернет, задачи, которые используют тип запуска EC2 должны быть запущены в частная подсеть, настроенная на использование шлюза NAT

Вместо этого я перешел на мостовую сеть с помощью динамического сопоставления портов (достигается с помощью Application Load Balancer). Я также использовал режим сетевого хоста для некоторых конкретных задач - это тоже сработало.

...