自定义运行时可让您使用任何受支持的柔性环境语言的替代实现,或自定义 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 插件)要求 Dockerfile
在 src/main/docker/Dockerfile
中,并且 app.yaml
文件在 src/main/appengine/app.yaml
中。有关详情,请参阅工具环境的文档。
代码结构
本部分介绍使用 Google 提供的基础映像或自己的基础映像时您的代码都必须实现的行为。
侦听端口 8080
App Engine 前端会将传入请求路由到端口 8080 上的相应模块。您必须确保应用代码在监听端口 8080。
处理生命周期事件
柔性环境会定期向您的应用发送某些生命周期事件。
应用关停
当需要关停某个实例时,新传入该实例的请求将被路由到其他实例(如果有),而对于当前正在处理的请求,系统则会等待其完成。在关停实例时,柔性环境通常会向应用容器发送 STOP
(SIGTERM
) 信号。您的应用无需响应此事件,但可以在容器关停之前使用该事件来执行所有必要的清理操作。在正常情况下,系统最多会等待 30 秒时间让应用停止运行,之后便会发送 KILL
(SIGKILL
) 信号,立即关停实例。
在极少数情况下,服务中断可能会阻止 App Engine 提供 30 秒的关闭时间,这意味着系统可能不会在实例终止之前发送 STOP
和 KILL
信号。为降低这种可能性,您应该定期给实例的状态设置检查点,主要将其用作内存中的缓存,而不是可靠的数据存储区。
健康检查请求
您可以通过定期健康检查请求确认虚拟机实例是否已成功部署,并检查正在运行的实例是否保持正常运行状态。
构建和部署自定义运行时
配置 app.yaml
和 DOCKER
文件后,您可以构建该容器映像并将其部署到 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 控制台日志浏览器中查看这些详细信息。
当应用处理请求时,它还可以将自己的日志消息写入 stdout
和 stderr
。系统会自动收集这些文件,您可以在日志浏览器中查看它们。系统仅会保留 stdout
和 stderr
的最新条目以限制其大小。
您还可以使用以 .log
或 .json
结尾的文件将自定义日志写入 /var/log/app_engine/custom_logs
。
如果应用容器中包含任何第三方代理,请确保将代理配置为记录到 stdout
和 stderr
或自定义日志。这可确保这些代理产生的任何错误都显示在 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 容器之外的虚拟机系统日志。 |