【问题标题】:Get the name or ID of the current Google Compute Instance获取当前 Google Compute Instance 的名称或 ID
【发布时间】:2015-10-19 17:41:42
【问题描述】:

我正在运行许多运行 Python 代码的 Google Compute Engine 实例,我想从实例中查找每个实例的名称或 ID。

我发现的一个解决方案是使用以下方法获取实例的内部 IP:

import socket
internal_ip = socket.gethostbyname(socket.gethostname())

然后我列出所有实例:

from oauth2client.client import GoogleCredentials
from googleapiclient.discovery import build

credentials = GoogleCredentials.get_application_default()
self.compute = build('compute', 'v1', credentials=credentials)
result = self.compute.instances().list(project=project, zone=zone).execute()

然后我遍历所有实例以检查内部 IP 是否与实例的 IP 匹配:

for instance in result["items"]:
    if instance["networkInterfaces"][0]["networkIP"] == internal_ip:
        internal_id = instance["id"]

这可行,但有点复杂,是否有更直接的方法来实现相同的目标,例如使用 Google 的 Python 客户端库或 gcloud 命令行工具?

【问题讨论】:

    标签: python google-compute-engine google-cloud-platform


    【解决方案1】:

    实例名称:

    socket.gethostname()platform.node() 应该返回实例的名称。根据您的操作系统,您可能需要进行一些解析。

    这在 Debian 和 Ubuntu 系统上对我有用:

    import socket
    gce_name = socket.gethostname()
    

    但是,在 CoreOS 实例上,hostname 命令给出了实例名称和区域信息,因此您必须进行一些解析。

    实例 ID/名称/更多(推荐):

    更好的方法是使用Metadata server。这是获取实例信息的最简单方法,并且基本上适用于任何编程语言或直接 CURL。这是一个使用 Requests 的 Python 示例。

    import requests
    metadata_server = "http://metadata/computeMetadata/v1/instance/"
    metadata_flavor = {'Metadata-Flavor' : 'Google'}
    gce_id = requests.get(metadata_server + 'id', headers = metadata_flavor).text
    gce_name = requests.get(metadata_server + 'hostname', headers = metadata_flavor).text
    gce_machine_type = requests.get(metadata_server + 'machine-type', headers = metadata_flavor).text
    

    同样,您可能需要在这里进行一些解析,但这真的很简单!

    参考资料: How can I use Python to get the system hostname?

    【讨论】:

    • 太棒了,这正是我想要的。
    • 优秀的答案 - 谢谢。如果需要该区域,则(使用此答案)可以使用requests.get(metadata_server + 'zone', headers = metadata_flavor).text
    【解决方案2】:

    要获取您的实例名称,请从您的 VM 中执行以下操作:

    curl http://metadata.google.internal/computeMetadata/v1/instance/hostname -H Metadata-Flavor:Google
    

    并获取您的实例 ID:

    curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
    

    查看其他可用参数的文档:https://cloud.google.com/compute/docs/storing-retrieving-metadata#project_and_instance_metadata

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 2011-01-04
      • 2018-12-12
      相关资源
      最近更新 更多