构建自定义运行时

自定义运行时可让您使用任何受支持的柔性环境语言的替代实现,或自定义 Google 提供的语言。它还允许您使用能够处理传入 HTTP 请求的任何其他语言编写代码(示例)。借助自定义运行时,柔性环境可以为提供和管理您的扩缩,监控和负载平衡基础架构,让您可以专注于构建应用。

要创建自定义运行时,您必须:

提供 app.yaml 文件

您的 app.yaml 配置文件必须至少包含以下设置:

runtime: custom
env: flex

如需了解您可以为应用设置的其他信息,请参阅使用 app.yaml 配置应用

创建 Dockerfile

有关创建 Dockerfile 的全面文档,请访问Docker 网站。如果您使用自定义运行时,则无论提供自己的基础映像,还是要使用 Google 的基础映像之一,都必须提供 Dockerfile。

指定基础映像

Dockerfile 中的第一个命令通常是用于指定基础映像的 FROM 命令。基础映像用于创建容器和构建应用。您可以编写自己的基础映像,也可以从 DockerHub 等容器注册表中选择基础映像。

查找 Dockerfile

通常,Dockerfile 的名称始终为 Dockerfile,并且与相应的 app.yaml 文件位于同一目录中。但在某些情况下,工具环境可能有不同的要求。例如,基于 Cloud SDK 的 Java 工具(如 Maven、Gradle、Eclipse 和 IntelliJ 插件)要求 Dockerfilesrc/main/docker/Dockerfile 中,并且 app.yaml 文件在 src/main/appengine/app.yaml 中。有关详情,请参阅工具环境的文档

代码结构

本部分介绍使用 Google 提供的基础映像或自己的基础映像时您的代码都必须实现的行为。

侦听端口 8080

App Engine 前端会将传入请求路由到端口 8080 上的相应模块。您必须确保应用代码在监听端口 8080。

处理生命周期事件

柔性环境会定期向您的应用发送某些生命周期事件。

应用关停

当需要关停某个实例时,新传入该实例的请求将被路由到其他实例(如果有),而对于当前正在处理的请求,系统则会等待其完成。在关停实例时,柔性环境通常会向应用容器发送 STOP (SIGTERM) 信号。您的应用无需响应此事件,但可以在容器关停之前使用该事件来执行所有必要的清理操作。在正常情况下,系统最多会等待 30 秒时间让应用停止运行,之后便会发送 KILL (SIGKILL) 信号,立即关停实例。

在极少数情况下,服务中断可能会阻止 App Engine 提供 30 秒的关闭时间,这意味着系统可能不会在实例终止之前发送 STOPKILL 信号。为降低这种可能性,您应该定期给实例的状态设置检查点,主要将其用作内存中的缓存,而不是可靠的数据存储区。

健康检查请求

您可以通过定期健康检查请求确认虚拟机实例是否已成功部署,并检查正在运行的实例是否保持正常运行状态。

构建和部署自定义运行时

配置 app.yamlDOCKER 文件后,您可以构建该容器映像并将其部署到 App Engine。

或者,您也可以部署存储在 Artifact Registry 中的自定义运行时的预构建容器映像。例如,您可以使用 Cloud Build 单独构建映像,然后将这些映像存储在 Artifact Registry 中。如需了解详情,请参阅推送和拉取映像

将您的应用与 Google Cloud 集成

在自定义运行时中运行的应用可以使用 Google Cloud 客户端库来访问 Google Clou 服务。在自定义运行时中的应用还可以通过标准 API 使用任何第三方服务。

向 Google Cloud 服务进行身份验证

应用默认凭据提供了最简单的方法来对 Google API 进行身份验证和调用。

如果您的应用使用 Cloud Build 编译 Docker 映像,则 cloudbuild 网络会托管应用默认凭据,使关联的 Google Cloud 服务能够自动查找您的凭据。

如需详细了解身份验证,请参阅 Google 身份验证

日志记录

向 App Engine 中运行的应用发送请求时,系统会自动记录请求和响应详细信息。您可以在 Google Cloud 控制台日志浏览器中查看这些详细信息。

当应用处理请求时,它还可以将自己的日志消息写入 stdoutstderr。系统会自动收集这些文件,您可以在日志浏览器中查看它们。系统仅会保留 stdoutstderr 的最新条目以限制其大小。

您还可以使用以 .log.json 结尾的文件将自定义日志写入 /var/log/app_engine/custom_logs

如果应用容器中包含任何第三方代理,请确保将代理配置为记录到 stdoutstderr 或自定义日志。这可确保这些代理产生的任何错误都显示在 Cloud Logging 中。

您的应用的请求和应用日志由 Cloud Logging 代理收集,最多保留 90 天,大小上限为 1 GB。如果您想长期存储日志或存储大小超过 1 GB 的日志,则可以将日志导出到 Cloud Storage。您还可以将日志导出到 BigQuery 和 Pub/Sub,以供进一步处理。

其他日志也可供您使用。以下是默认配置的一些日志:

日志名称 载荷类型 用途
crash.log text 安装失败时记录的信息。如果您的应用无法运行,请检查此日志。
monitoring.* text Docker 容器将数据发布到 Cloud Monitoring 时的信息。
shutdown.log text 关停时记录的信息。
stdout text 应用的标准输出。
stderr text 容器的标准错误。
syslog text 位于 Docker 容器之外的虚拟机系统日志。