Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google compute engine 如何知道机器是否是Google计算引擎实例_Google Compute Engine_Google Cloud Platform - Fatal编程技术网

Google compute engine 如何知道机器是否是Google计算引擎实例

Google compute engine 如何知道机器是否是Google计算引擎实例,google-compute-engine,google-cloud-platform,Google Compute Engine,Google Cloud Platform,有没有办法从命令行shell知道我当前是在Google计算引擎机器上还是在其他地方(开发机器)?根据: 通过使用元数据服务器,您可以轻松检测应用程序或脚本是否在计算引擎实例中运行。当您向服务器发出请求时,元数据服务器的任何响应都将包含metadata-Flavor:Google标题。您可以查找此标头以可靠地检测您是否正在计算引擎中运行 例如,下面的curl请求返回一个元数据风格:Google头,指示该请求是从计算引擎实例中发出的 me@my-inst:~$ curl metadata.googl

有没有办法从命令行shell知道我当前是在Google计算引擎机器上还是在其他地方(开发机器)?

根据:

通过使用元数据服务器,您可以轻松检测应用程序或脚本是否在计算引擎实例中运行。当您向服务器发出请求时,元数据服务器的任何响应都将包含
metadata-Flavor:Google
标题。您可以查找此标头以可靠地检测您是否正在计算引擎中运行

例如,下面的curl请求返回一个
元数据风格:Google
头,指示该请求是从计算引擎实例中发出的

me@my-inst:~$ curl metadata.google.internal -i
HTTP/1.1 200 OK
Metadata-Flavor: Google
Content-Type: application/text
Date: Thu, 10 Apr 2014 19:24:27 GMT
Server: Metadata Server for VM
Content-Length: 22
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

0.1/
computeMetadata/
如果您不想打网络电话,也可以:

my@myinst:~$ sudo dmidecode -s bios-vendor | grep Google
Google

您还可以为元数据服务器执行DNS查找,而不是实际调用它

例如,在google Compute实例中执行
dig+short metadata.google.internal
,将输出如下内容:

[root@vm-1]# dig +short metadata.google.internal
169.254.169.254
但是,如果在标准服务器中,在谷歌云之外执行相同的命令(
dig+short metadata.google.internal
),您可能会得到一个空响应

因此,要检查,您需要做的(例如在
bash
中)是:


下面是通过

导入套接字
def是_gce_实例():
“”“通过对元数据服务器的DNS查找检查它是否是GCE实例。
"""
尝试:
socket.getaddrinfo('metadata.google.internal',80)
除socket.gai错误外:
返回错误
返回真值

这避免了网络呼叫,因此更加可靠和快速。此外,
dmidecode
方法适用于其他云提供商,例如Digital Ocean。非常感谢!
GMETADATA_ADDR=`dig +short metadata.google.internal`
if [[ "${GMETADATA_ADDR}" == "" ]]; then
    echo "I am NOT in a Google VM!"
else
    echo "I AM INSIDE a Google VM! Whoohoo!"
fi