从 aws ec2-flask 实例获取元数据

问题描述 投票:0回答:1

我需要构建一个具有特定标题、我的名字以及实例本身的以下元数据的 html:实例 ID、可用区、私有 IPv4 地址和子网 ID。

我必须通过 ssh 到实例来将该程序托管在 docker 存储库中。

我认为一切正常,但是在 bash 中执行一些命令并最终运行程序后,它被卡住了。

这是Python程序:

from flask import Flask
from ec2_metadata import ec2_metadata

app = Flask(__name__)

@app.route('/')
def get_instance_metadata():
    instance_id = ec2_metadata.instance_id
    availability_zone = ec2_metadata.availability_zone
    private_ip = ec2_metadata.private_ipv4
    subnet_id = ec2_metadata.network_interfaces[ec2_metadata.mac]['subnet-id']
    
    return f"""
    <html>
        <body>
            <h1>EC2 Metadata</h1>
            <p><strong>Instance ID:</strong> {instance_id}</p>
            <p><strong>Availability Zone:</strong> {availability_zone}</p>
            <p><strong>Private IP:</strong> {private_ip}</p>
            <p><strong>Subnet ID:</strong> {subnet_id}</p>
        </body>
    </html>
    """


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

这是我在 bash 中遵循的步骤,直到出现上述错误为止

sudo yum update

sudo yum install docker

sudo systemctl start docker

sudo systemctl enable docker

sudo systemctl status docker

mkdir flask_docker

nano flask_docker/app.py

nano flask_docker/requirements.txt
# the requirements are:
# Flask==1.1.2
# Werkzeug==1.0.1
# Jinja2==2.11.3
# MarkupSafe==1.1.1
# itsdangerous==1.1.0
# click==7.1.2
# ec2-metadata==0.13
# requests==2.26.0

nano flask_docker/Dockerfile
# inside this file I did this:
# syntax=docker/dockerfile:1.4
# FROM python:3.8-alpine

# WORKDIR /app

# COPY requirements.txt requirements.txt

# RUN pip3 install -r requirements.txt

# COPY . .

# CMD ["python3", "app.py"]

sudo docker build -t flask_container .

sudo docker images

sudo docker run -p 5000:5000 -d flask_container

sudo docker ps

netstat -tulnp

curl http://127.0.0.1:5000
# HERE IS WHERE I FOUND THE PROBLEM
python amazon-web-services bash amazon-ec2
1个回答
0
投票

您可以分享 ec2_metadata 代码吗? 根据该问题,可能存在核心逻辑错误,或者您的 EC2 实例正在使用 IMDSv2,而代码可能尝试使用 IMDSv1 方法获取元数据。

© www.soinside.com 2019 - 2024. All rights reserved.