DjangoDisallowedHost в AWS ECS - PullRequest
       0

DjangoDisallowedHost в AWS ECS

0 голосов
/ 23 декабря 2018

Я пытаюсь развернуть пример приложения django в ECS, используя fargate.У меня еще нет домена, и я прочитал, что вы можете добавить свой публичный ip в ALLOWED_HOSTS.Поэтому я изменил свою конфигурацию, чтобы добавить ее, используя эту ссылку в качестве руководства

ALLOWED_HOSTS = ['localhost', '127.0.0.1', '.example.com']

PUBLIC_IP = None

try:
    response = requests.get('http://169.254.169.254/latest/meta-data/public-ipv4', timeout=3)
    print('Response')
    PUBLIC_IP = response.text
    ALLOWED_HOSTS += [PUBLIC_IP]
except requests.exceptions.RequestException as e:
    print('Exception on getting public ip ', e)

print(ALLOWED_HOSTS)

К сожалению, она не работает для меня, возможно, потому что я не использую экземпляр ec2.Может кто-нибудь показать мне, как добавить мой публичный ip?

Я использую daphne, с помощью следующей команды

daphne -b 0.0.0.0 -p 80 my_project.asgi:application

Я даже не получаю эти операторы печати между моими журналами, вЗадача ECS.Но я получаю журналы Дафни

1 Ответ

0 голосов
/ 24 декабря 2018

Для AWS Fargate правильная конечная точка метаданных: http://169.254.170.2/v2/metadata.

Ссылка - Конечная точка метаданных задачи версия 2 - Доступно для задач, использующих тип запуска Fargate на платформе версии v1.1.0 или новее, и задач, которые используюттип запуска EC2, который также использует сетевой режим awsvpc и запускается в инфраструктуре Amazon EC2, работающей как минимум с версией 1.17.0 агента-контейнера Amazon ECS.https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v2.html

Однако эта конечная точка возвращает только частную часть задачи, но не публичную.Поскольку вы используете python, вы можете использовать модуль boto3 для получения publicIp, выполняя запрос с privateIp из приведенного выше результата метаданных.

Вот пример кода Python, который я только что протестировал с моим собственным privateIp задачи.

import boto3
client = boto3.client('ec2')
response = client.describe_network_interfaces(
    Filters=[
        {
            'Name': 'addresses.private-ip-address',
            'Values': [
                '172.31.6.195',
            ]
        },
    ]
)
response ['NetworkInterfaces'][0]['Association']['PublicIp']
//100.x.x.x
...