App Engine 柔性环境中的自定义运行时快速入门

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的地区分配的缩写代码。此代码不对应于国家/地区或省,尽管某些地区 ID 可能类似于常用国家/地区代码和省代码。在 App Engine 网址中包含 REGION_ID.r 对于现有应用是可选项,但在不久后将成为所有新应用的必要项。

为了确保顺利过渡,我们正在逐步更新 App Engine 以使用地区 ID。如果我们尚未更新您的 Google Cloud 项目,则您不会看到应用的地区 ID。由于该 ID 对于现有应用是可选的,因此您在现有应用可以使用地区 ID 后无需更新网址或进行其他更改。

借助自定义运行时,您可以构建在 Dockerfile 定义的环境中运行的应用。通过使用 Dockerfile,您不仅可以使用 Google Cloud 以外的语言和软件包,还可以使用 App Engine 柔性环境中所用的资源和工具。

在本快速入门中,我们会面向使用自定义运行时的 App Engine 启动 nginx Web 服务器。

准备工作

您需要先设置环境并为 App Engine 创建一个新的 Cloud 项目,然后才能运行此快速入门中的示例应用:

  1. 通过使用 Cloud Console 创建新的 Cloud 项目:

    1. 打开 Cloud Console:

      转到“项目”页面

    2. 点击创建项目,然后对新的 Cloud 项目进行命名。

    3. 创建新的结算帐号或设置现有结算帐号,在新的 Cloud 项目中启用结算功能:

      转到“结算”页面

  2. 下载并安装 Google Cloud SDK,然后初始化 gcloud 工具:

    下载 SDK

  3. 运行以下 gcloud 命令以创建 App Engine 应用,并指定您希望在哪个地理区域运行应用:

    gcloud app create
    

App Engine 位置

App Engine 是区域级的,这意味着运行您的应用的基础架构位于特定区域并由 Google 代管,以使其在该区域内的所有可用区以冗余方式提供。

选择要在哪个区域运行应用时,首先要考虑该区域是否能满足您的延迟时间、可用性或耐用性要求。通常,您可以选择距离应用的用户最近的区域,但也要考虑提供 App Engine 的位置以及应用使用的其他 Google Cloud 产品和服务的位置。跨多个位置使用服务可能会影响应用的延迟时间及其价格

应用的区域一经设置,便无法更改。

如果您已创建 App Engine 应用,则可以通过执行以下任一操作来查看其地区:

  • 运行 gcloud app describe 命令。

  • 在 Cloud Console 中打开 App Engine 信息中心。该地区会显示在页面顶部附近。

下载 Hello World 应用

  1. 从下列选项中选择一个,将 Hello World 示例应用从 GitHub 复制到本地机器上:

    • 从下列代码库中克隆 Hello World 示例应用:

      git clone https://github.com/GoogleCloudPlatform/appengine-custom-runtimes-samples
      
    • 以 zip 文件的形式下载该示例,然后将其解压缩到本地目录。

  2. 导航到示例代码所在的 nginx 目录,例如:

    cd appengine-custom-runtimes-samples/nginx
    

在本地机器上运行 Hello World

您可以下载并安装 Docker,然后在本地计算机上运行 Hello World 容器,籍此测试示例应用。

目前没有 App Engine 专用步骤,因此您可以使用您喜欢的工具和方法测试示例应用。

将 Hello World 部署到 App Engine 上

做好将示例应用部署到 App Engine 的准备后,请执行以下步骤:

  1. app.yamlDockerfile 所在的目录中,运行以下命令:

    gcloud app deploy
    

    了解可选标志

  2. 要查看您运行在 https://PROJECT_ID.REGION_ID.r.appspot.com 上的应用,请运行以下命令启动浏览器:

    gcloud app browse
    

常见的 gcloud 命令标志

  • 添加 --version 标志,可以指定用来唯一标识应用版本的 ID,否则系统会为您生成一个 ID。示例:--version [YOUR_VERSION_ID]
  • 添加 --project 标志,可以为您在 gcloud 工具中初始化为默认值的 Cloud 项目 ID 指定一个备用 Cloud 项目。示例:--project [YOUR_PROJECT_ID]

例如:

gcloud app deploy --version pre-prod-5 --project my-sample-app

如需详细了解如何从命令行部署应用,请参阅测试和部署应用。如需查看所有命令标志的列表,请参阅 gcloud app deploy 参考。

清理

为避免产生费用,您可以删除 Cloud 项目,以停止对该项目中使用的所有资源计费。

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

代码审核

Hello World 是最简单的 App Engine 应用,因为它只创建一个容器,该容器只运行一项服务和一个版本。本节详细介绍每个应用的文件。

app.yaml

指定应用的配置。app.yaml 文件必须与 Dockerfile 文件位于同一目录中。

runtime: custom
env: flex

runtime: custom 条目告知 App Engine 查找定义运行时环境映像的 Dockerfile 和说明您正部署到柔性环境中的 env: flex

如需了解详情,请参阅app.yaml参考文档。

Dockerfile

定义用于为示例应用容器创建 Docker 映像的指令集。Dockerfile 文件必须与 app.yaml 文件位于同一目录中。此 Dockerfile 安装 nginx 网络服务器并复制一些基本配置:

# The standard nginx container just runs nginx. The configuration file added
# below will be used by nginx.
FROM nginx

# Copy the nginx configuration file. This sets up the behavior of nginx, most
# importantly, it ensure nginx listens on port 8080. Google App Engine expects
# the runtime to respond to HTTP requests at port 8080.
COPY nginx.conf /etc/nginx/nginx.conf

# create log dir configured in nginx.conf
RUN mkdir -p /var/log/app_engine

# Create a simple file to handle heath checks. Health checking can be disabled
# in app.yaml, but is highly recommended. Google App Engine will send an HTTP
# request to /_ah/health and any 2xx or 404 response is considered healthy.
# Because 404 responses are considered healthy, this could actually be left
# out as nginx will return 404 if the file isn't found. However, it is better
# to be explicit.
RUN mkdir -p /usr/share/nginx/www/_ah && \
    echo "healthy" > /usr/share/nginx/www/_ah/health

# Finally, all static assets.
ADD www/ /usr/share/nginx/www/
RUN chmod -R a+r /usr/share/nginx/www

FROM 命令使用 nginx 网络服务器的官方 docker 映像构建基本映像。

如果使用此 Dockerfile,容器映像将包含 nginx,同时您的应用可以使用 www/ 目录中的所有内容。

Hello World 示例应用还包含 nginx.conf 文件和 index.html 文件,前者包含基本的 nginx 配置信息,后者用作 nginx 网络服务器的根网页。

了解详情

如需详细了解 Dockerfiles,请参看 Dockerfile 参考

如需了解如何创建自定义运行时,请参阅构建自定义运行时