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
我正在尝试使用 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