App Engine 柔性环境中的 Node.js 快速入门

地区 ID

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

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

详细了解区域 ID

本快速入门介绍了如何创建一个显示简短消息的小型 App Engine 应用。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Cloud Build API。

    启用 API

  5. 安装并初始化 Cloud SDK

其他前提条件

  1. 初始化您的项目的 App Engine 应用并选择应用的区域:

    gcloud app create --project=[YOUR_PROJECT_ID]
    

    系统提示时,选择您希望自己的 App Engine 应用所在的区域

  2. 安装以下必备组件:

App Engine 位置

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

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

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

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

  • 运行 gcloud app describe 命令。

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

本快速入门演示了一个使用 Express.js 框架编写的简单 Node.js 应用。

下载 Hello World 应用

我们创建了一个简单的 Node.js 版 Hello World 应用,以便您快速了解如何将应用部署到 Google Cloud。

  1. 将 Hello World 示例应用代码库克隆到本地机器。

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
    

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

  2. 切换到包含示例代码的目录。

    cd nodejs-docs-samples/appengine/hello-world/flexible
    

在本地机器上运行 Hello World

  1. 安装此项目的依赖项。

    npm install
    

    或者,如果您使用的是 Yarn,请运行以下命令:

    yarn install
    
  2. 运行启动脚本。

    npm start
    

    或者,如果您使用的是 Yarn,请运行以下命令:

    yarn start
    
  3. 在网络浏览器中查看您的应用。

    • 如果您使用的是 Cloud Shell,请点击工具栏中的网页预览,并改为选择在端口 8080 上预览

    • 如果您没有使用 Cloud Shell,请输入以下地址:

    http://localhost:8080

页面中随即显示示例应用发出的 Hello World 消息。在终端窗口中,按 Ctrl+C 退出 Web 服务器。

在 App Engine 上部署并运行 Hello World

如需将应用部署到 App Engine 柔性环境,请执行以下操作:

  1. hello-world/flexible 目录运行以下命令来部署 Hello World 应用:

    gcloud app deploy

    了解可选标志

    常见的 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 参考。

  2. 启动浏览器,然后访问 https://PROJECT_ID.REGION_ID.r.appspot.com 以查看此应用

    gcloud app browse
    其中 PROJECT_ID 表示您的 Google Cloud 项目 ID。

此时,在 App Engine 实例上运行的 Web 服务器提供显示 Hello World 消息的页面。

恭喜!您已将第一个 Node.js 应用部署到 App Engine 柔性环境!

如果您在部署应用时遇到任何错误,请查看问题排查提示

如需了解有关清理的信息以及可执行的后续步骤的链接,请参阅以下部分。

清理

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

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

    转到“管理资源”

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

后续步骤

了解整个平台

现在,您已了解如何开发和部署 App Engine 应用,接下来您可以探索 Google Cloud 的其余部分。您已经安装了 Cloud SDK,它可为您提供与 Cloud SQL、Cloud Storage、Firestore 等产品交互的工具。

如需查看如何创建使用整个平台(而不仅仅是 App Engine)的应用的操作指南,请参阅我们的有关创建 Bookshelf 应用快速入门。

了解 App Engine 柔性环境

以下主题有助于您继续了解 App Engine。

Hello World 代码讨论

Hello World 是最简单的 App Engine 应用,因为它只包含一项服务,只有一个版本,并且所有代码都位于应用的根目录中。本部分详细介绍各应用文件。

app.js

app.js 文件包含用于启动服务器和响应请求的 JavaScript 代码。

以下代码会通过在端口 8080 上运行的服务器来响应来自网络客户端的请求,响应方法是显示“Hello World”消息。

const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.status(200).send('Hello, world!').end();
});

// Start the server
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});

app.yaml

app.yaml 文件描述应用的部署配置:

runtime: nodejs
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

在以上示例中,app.yaml 指定了该应用使用的运行时,并设置了 env: flex 以指定该应用使用柔性环境

package.json

package.json 用于指定应用依赖项、节点版本和应用启动。

{
  "name": "appengine-hello-world",
  "description": "Simple Hello World Node.js sample for Google App Engine Flexible Environment.",
  "version": "0.0.2",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git"
  },
  "engines": {
    "node": ">= 12.20.0"
  },
  "scripts": {
    "start": "node app.js",
    "test": "mocha --exit test/*.test.js"
  },
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "mocha": "^9.0.0",
    "supertest": "^6.0.0"
  }
}

在前面的示例中,package.json 文件指定应用使用 Node.js v12.20.0 或更高版本,具体取决于 express,并且 node app.js 用于启动应用。您在应用中指定的 Node.js 版本可以使用指定版本或更高版本。如需详细了解如何安装和运行应用,请参阅 Node.js 运行时文档