Я пытаюсь получить реальный регион, в котором находится экземпляр, выполняющий задачу ECS в контейнере. Контейнер запускает сценарий python, первая задача которого - получить регион, чтобы я мог использовать методы boto3, такие как sqs.get_queue_by_name()
, для которых нужно установить регион. Для этого я пытаюсь получить регион с помощью
meta = requests.get('http://169.254.169.254/latest/dynamic/instance-identity/document', timeout=1).json()
os.environ["AWS_DEFAULT_REGION"] = meta.get("region")
, но у меня возникает ошибка подключения.
Когда я собираю свой стек вручную, проблем нет, но когда стек развертывается CDK (те же группы безопасности, роли и т. д. c), я получил ошибку
requests.exceptions.ConnectionError: HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /latest/dynamic/instance-identity/document (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fe3d62491f0>: Failed to establish a new connection: [Errno 22] Invalid argument'))
Я вижу два разных пути решения этой проблемы:
Установите переменную среды 'AWS_DEFAULT_REGION' при развертывании с помощью CDK, но с
taskDefinition.addContainer ('DSPTContainer', {image: ecrImage, memoryLimitMiB: 30000, environment: {AWS_DEFAULT_REGION? Props. .region}) существует проблема с Property 'AWS_DEFAULT_REGION' is incompatible with index signature.
Изменение роли задачи (но как) или чего-то еще (например, группы безопасности), чтобы разрешить соединение. Обратите внимание, что в экземпляре я могу установить sh соединение ....
[РЕДАКТИРОВАТЬ]
Внутри контейнера (Я могу войти в контейнер, когда экземпляр запущен), я могу пинговать, скажем, google.com, но не URI метаданных экземпляра:
import requests
requests.get("https://www.google.com", timeout=1) ---> Response200
requests.get("http://169.254.169.254/latest/meta-data/", timeout=1) ---> ConnectTimeout Exception
[РЕШЕНИЕ]
Проблема связана с дубликатом?