在 App Engine 上构建 Go 应用

区域 ID

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

详细了解区域 ID

本指南可帮助您开始使用 App Engine 并熟悉 Go 应用的开发、部署和管理。

费用

运行本指南不会产生任何相关费用。单独运行此示例应用不会超出您的免费配额

设置开发环境

您可以使用您的本地机器,也可以使用您熟悉的工具或 Cloud Shell。Cloud Shell 已经安装 Google Cloud CLI 并设置好您的环境,同时还提供了许多其他功能

本地机器

安装 Go 并设置 gcloud CLI。

Cloud Shell

启动 Cloud Shell,其中包含所有需要预安装的工具:

打开 Cloud Shell

创建 Google Cloud 项目

项目是使用 Google Cloud 的必要条件,也是使用所有 Google Cloud 服务的基础。

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Build API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. 创建 App Engine 应用及其相关资源。您必须选择一个位置,并且该位置以后无法更改。
    gcloud app create

为 App Engine 编写基本 Web 服务

了解如何编写 Web 服务并声明运行时设置。

设计文件的结构

您的服务将具有以下文件结构:

  • go-app/:Go 1.11 服务的目录。
    • app.yaml:服务的配置设置。
    • main.go:您的应用代码。

创建 app.yaml 文件

每个 App Engine 项目都有一个 app.yaml 配置文件,用于指定服务的运行时环境设置。必须具有此文件才能部署服务。

  1. 为您的 Go 1.11 服务创建名为 go-app 的新文件夹:

    mkdir go-app

  2. go-app/ 文件夹中,创建一个名为 app.yaml 的文件,并添加以下内容:

    # Copyright 2019 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     https://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    runtime: go121
    

    这是 App Engine 应用的最简单配置。它向 App Engine 指明您使用的是 Go 1.11 运行时。app.yaml 文件还可以指定网络设置、扩缩设置等。如需了解详情,请参阅 app.yaml 参考文档

创建 main.go 文件

此示例使用 net/http 软件包来创建打印“Hello,World!”的 HTTP 服务器。

要设置您的 main.go 文件,请执行以下操作:

  1. 在您的 go-app/ 文件夹中,创建一个 main.go 文件。

  2. 添加 package main 语句,以将代码视为可执行程序:

    package main
    

    要在 Go 1.11 运行时中成功部署服务,必须在与服务的 app.yaml 文件位于同一目录中的至少一个 Go 源文件的开头定义 package main 语句。

  3. 导入以下软件包:

    import (
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    )
    
  4. 定义 HTTP 处理程序:

    
    // indexHandler responds to requests with our greeting.
    func indexHandler(w http.ResponseWriter, r *http.Request) {
    	if r.URL.Path != "/" {
    		http.NotFound(w, r)
    		return
    	}
    	fmt.Fprint(w, "Hello, World!")
    }
    

    http.ResponseWriter 对象会组建 HTTP 服务器响应;通过向其写入数据,您可以将数据发送到浏览器。http.Request 对象是一种表示传入 HTTP 请求的数据结构。

  5. 注册 HTTP 处理程序:

    
    func main() {
    	http.HandleFunc("/", indexHandler)
    
    	port := os.Getenv("PORT")
    	if port == "" {
    		port = "8080"
    		log.Printf("Defaulting to port %s", port)
    	}
    
    	log.Printf("Listening on port %s", port)
    	if err := http.ListenAndServe(":"+port, nil); err != nil {
    		log.Fatal(err)
    	}
    }
    

    main 函数是可执行程序的入口点,因此它会启动应用。它首先会调用 http.HandleFunc 函数,该函数会指示 http 包使用 indexHandler 函数处理对网络根目录 ("/") 的所有请求。

    如果您未设置 PORT 环境变量,则会使用默认端口 8080。当您的应用在 App Engine 上运行时,系统会为您设置 PORT 环境变量,但在本地测试您的应用时,您可以将 PORT 设置为任何首选值。

在 App Engine 上部署 Web 服务

  1. app.yaml 文件所在的 go-app 目录中,使用以下命令将您的 Web 服务部署到 App Engine:

    gcloud app deploy

  2. 如需启动浏览器并在 https://PROJECT_ID.REGION_ID.r.appspot.com 查看您的 Web 服务,请运行以下命令:

    gcloud app browse

恭喜!您刚刚在 App Engine 上创建并部署了一项服务。

服务和版本

您为应用部署的第一项服务将是默认服务。您可以在 app.yaml 文件中指定服务名称,但如果省略名称,则系统会将其视为 default。您可以部署除默认服务之外的多项服务

您可以通过运行 gcloud app deploy 命令随时更新服务。每次部署时,系统都会创建一个新版本,并自动将流量路由到最新版本。

要确认服务创建和版本部署,请执行以下操作:

  1. 在 Google Cloud 控制台中查看您的 App Engine 服务:

    查看服务

    您应该看到,其中列出了一项名为 default 的服务。您可以通过以下网址公开访问默认服务:

    https://PROJECT_ID.REGION_ID.r.appspot.com

  2. 查看您的版本:

    查看版本

    您应该会看到,系统列出了一个与您的部署相对应的带时间戳的版本。

如需了解如何将请求发送至特定服务和版本,请参阅请求的路由方式

后续步骤

恭喜!您刚刚对网络应用进行了设置并将其部署到了 App Engine!

请浏览以下页面,了解如何向应用添加其他功能: