代码之家  ›  专栏  ›  技术社区  ›  WisdomPill

AWS ECS中不允许的主机

  •  0
  • WisdomPill  · 技术社区  · 6 年前

    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)
    

    我在用daphne,用下面的命令

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

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   Imran    6 年前

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

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

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

    下面是我刚刚用自己的任务私有IP测试的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