AWS ECS中的DjangoDisallowedHost

时间:2018-12-23 18:36:52

标签: django amazon-web-services amazon-ecs

我正在尝试使用fargate将示例Django应用程序部署到was ecs中。我还没有域,我读到您可以将您的公共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 :(得分:3)

对于AWS Fargate,正确的元数据终结点是http://169.254.170.2/v2/metadata

参考- 任务元数据终端节点版本2 –适用于在平台版本v1.1.0或更高版本上使用Fargate启动类型的任务,以及在至少运行版本1.17的Amazon EC2基础设施上启动的使用EC2启动类型的任务(也使用awsvpc网络模式)的任务.0的Amazon ECS容器代理。 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v2.html

但是,此端点仅返回任务的privateIp部分,而不返回publicIp。由于您使用的是python,因此可以使用boto3模块通过从上述元数​​据结果中查询privateIp来获取publicIp。

这是我刚刚用自己的任务的privateIp测试的示例python代码。

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