在 App Engine 柔性环境中创建自定义运行时应用

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

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

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

准备工作

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

  1. 使用 Google Cloud 控制台创建新的 Google Cloud 项目:

    1. 打开 Google Cloud 控制台:

      转到“项目”

    2. 点击创建项目,然后为新的 Google Cloud 项目指定一个名称。

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

      转到“结算”

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

    下载 SDK

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

    gcloud app create
    

App Engine 位置

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

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

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

如果您已创建 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 工具中初始化为默认值的 Google Cloud 项目 ID 指定一个备用 Google Cloud 项目 ID。示例:--project [YOUR_PROJECT_ID]

示例:

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

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

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

后续步骤

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

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

代码审核

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 health 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 网络服务器的根网页。