AWS ECS 中的 DjangoDisallowedHost

DjangoDisallowedHost in AWS ECS

我正在尝试使用 AWS Fargate 将示例 Django 应用程序部署到 AWS ECS 中。我还没有 URL,但我读到您可以将容器的 public ip 附加到 Django 的 ALLOWED_HOSTS 设置配置中。所以我更改了我的配置以使用此 link 作为指南添加它

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 实例。有人可以告诉我如何添加我的 public ip 吗?

我正在使用达芙妮,使用以下命令

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

在 ecs 任务中,我的日志之间甚至没有得到这些打印语句。 但我得到了达芙妮日志

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

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

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

这是示例 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