Google Cloud Shell:如何找到您的 Web 预览 URL

Google Cloud Shell: How to find your web preview URL

在 Google Cloud Platform 控制台上使用 Google Cloud Shell 时,单击“网络预览”按钮会将您重定向到正在服务的 URL您的应用在端口 8080.

因此,例如,您的实例的 URL 可能类似于:

https://8080-1234abcd-abcd-1234-abcd-1234abcd.europe-west1.cloudshell.dev/?authuser=0

有没有一种方法可以从终端确定这个 URL 是什么,而不必单击“网络预览”按钮?

注意: 对于那些想知道它的用例是什么的人。我正在使用 SSH cloud shell access 功能,它允许您从任何终端仿真器通过 SSH 远程访问您的云 shell 实例。 不幸的是,这样做意味着您无法再访问“网络预览”按钮(因为您使用的是自己的终端而不是基于网络的终端),因此无法知道网络预览的 URL 是什么即将定位。

Cloud Shell 是一种工具,主要用于提供管理 GCP 资源的环境,而不是用作开发环境(但可用于测试代码片段)

从命令行(通过 non-web 终端上的 ssh)访问云 Shell 处于 alpha 版本,如本 document.

中所述

这个功能非常有用,但目前无法在 GCP 控制台(网络 UI)之外生成 preview url,我的建议是打开一个功能请求到允许在 Web 终端之外创建 preview URL

要创建功能请求,您必须在此 page 上填写 public 问题跟踪器。

作为解决方法,您可以使用 ngrok 的免费帐户在任何云或 on-premise 服务器上生成预览 URL,这是一个软件它允许您以与 Cloud Shell 网络预览工作相同的方式在任何端口(演示端点)上生成指向本地主机服务的临时 HTTPS URL。

生成url主机名的规则是不确定的,有时它是[端口]-[guid]-[区域].cloudshell...,而有时它有一个固定的名称[ port]-[host]-... ,“host”是你的云 shell vm

的主机名

Is there a way to determine what this URL is going to be from the terminal, without having to click on the "web preview" button?

是的,有可能。

例如:

PORT="8080"
cd `mktemp -d` \
    && echo '<html><body>Hello World</body></html>' >./index.html \
    && python -m SimpleHTTPServer $PORT &
AUTHUSER="0"
ADDPATH=""
echo "https://shell.cloud.google.com/devshell/proxy?authuser=$AUTHUSER&port=$PORT&environment_id=default$ADDPATH"

点击 link 后,代理端点将验证 GCP 用户并重定向到最终目的地(例如 https://8080-cs-215311858653-default.cs-us-east1-vpcf.cloudshell.dev/?authuser=0)。

尽管可以使用以下命令生成最终的 URL,但使用它并不是一个好主意,因为只有在代理端点对用户进行身份验证后才能访问该端口。

ZONE=$(curl -s -H "Metadata-Flavor: Google" metadata/computeMetadata/v1/instance/zone)
ZONE="${ZONE##*/}"
REGION=${ZONE%-*}
MACHINE=$(hostname)
MACHINE="${MACHINE%-default*}-default"
PORT="8080"
echo "https://${PORT}-${MACHINE}.cs-${REGION}-vpcf.cloudshell.dev/?authuser=0"

您可以使用环境变量 WEB_HOST 从终端确定 URL 是什么,该变量已在 Cloud Shell.

中预先配置

格式化预览 URL 将如下所示:
https://$PORT-$WEB_HOST