我正在尝试使用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任务中,我什至没有在日志之间获得这些打印语句。 但是我得到了达芙妮的日志
答案 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