如何在 GCE 启动脚本中获取当前区域和项目 ID?
How to get the current Zone & Project ID in a GCE startup script?
长话短说;博士。我想要一个实例来描述自己,而 运行 一个启动脚本。
我有一个 startup.sh
shell script (which I can reference with --metadata startup-script-url=gs://bucketname/startup.sh
), which depends on a steam.exp
expect 脚本。因此,我想知道使用过的桶的名称;例如。来自元数据 startup-script-url
。假定这两个文件都位于同一个存储桶中,但只能引用其中一个。
我正在尝试获取元数据 startup-script-url
,然后在 shell 脚本中提取存储桶名称(将添加到 startup.sh
,以便获取 gs://bucketname/steam.exp
在 运行 之前)。
到目前为止我尝试过的:
gcloud compute instances describe $HOSTNAME \
--zone=europe-west3-c \
--project=some-project \
--flatten="metadata[startup-script-url]"
但这不可移植,因为它需要是当前项目 ID 和当前区域。
如何在启动脚本中获取这些值?我还没试过printenv
。
可以像这样得到 project
:
PROJECT_ID=`gcloud config get-value project`
然后通过以下方式获得 zone
:
gcloud compute instances list \
--project=$PROJECT_ID \
--filter=name:$HOSTNAME \
--format="table[csv,no-heading](zone)"
这需要权限 gcloud.compute.instances.list
,角色 roles/compute.viewer
拥有。
同时我还发现了 Google Cloud
游戏服务器(测试版)。
您可以使用 curl 获取 VM 元数据:
STARTUP_SCRIPT_URL=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/my-startup-script-url" -H "Metadata-Flavor: Google"`
您还可以从元数据服务器获取其他值,例如 GCP 项目 ID 和 VM 的区域。 Curl 似乎比 gcloud 更快:
GCP_PROJECT_ID=`curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google"`
GCP_ZONE=$(basename `curl -s "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google"`)
GCP_REGION="${GCP_ZONE::-2}"
https://cloud.google.com/compute/docs/metadata/default-metadata-values
长话短说;博士。我想要一个实例来描述自己,而 运行 一个启动脚本。
我有一个 startup.sh
shell script (which I can reference with --metadata startup-script-url=gs://bucketname/startup.sh
), which depends on a steam.exp
expect 脚本。因此,我想知道使用过的桶的名称;例如。来自元数据 startup-script-url
。假定这两个文件都位于同一个存储桶中,但只能引用其中一个。
我正在尝试获取元数据 startup-script-url
,然后在 shell 脚本中提取存储桶名称(将添加到 startup.sh
,以便获取 gs://bucketname/steam.exp
在 运行 之前)。
到目前为止我尝试过的:
gcloud compute instances describe $HOSTNAME \
--zone=europe-west3-c \
--project=some-project \
--flatten="metadata[startup-script-url]"
但这不可移植,因为它需要是当前项目 ID 和当前区域。
如何在启动脚本中获取这些值?我还没试过printenv
。
可以像这样得到 project
:
PROJECT_ID=`gcloud config get-value project`
然后通过以下方式获得 zone
:
gcloud compute instances list \
--project=$PROJECT_ID \
--filter=name:$HOSTNAME \
--format="table[csv,no-heading](zone)"
这需要权限 gcloud.compute.instances.list
,角色 roles/compute.viewer
拥有。
同时我还发现了 Google Cloud 游戏服务器(测试版)。
您可以使用 curl 获取 VM 元数据:
STARTUP_SCRIPT_URL=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/my-startup-script-url" -H "Metadata-Flavor: Google"`
您还可以从元数据服务器获取其他值,例如 GCP 项目 ID 和 VM 的区域。 Curl 似乎比 gcloud 更快:
GCP_PROJECT_ID=`curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google"`
GCP_ZONE=$(basename `curl -s "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google"`)
GCP_REGION="${GCP_ZONE::-2}"
https://cloud.google.com/compute/docs/metadata/default-metadata-values