使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

编写 Cloud Functions 函数

Cloud Functions 支持以多种编程语言编写源代码。您选择的语言运行时和您要编写的函数类型决定了如何设计代码结构并实现函数。本页面简要介绍了 Cloud Functions 函数的类型以及对源代码的预期。

Cloud Functions 函数的类型

Cloud Functions 函数有两种类型:

如果您需要函数具有网址端点并响应 HTTP 请求(例如针对 webhook),可使用 HTTP 函数。如果函数应直接触发以响应 Google Cloud 项目中的事件(例如 Pub/Sub 主题中收到消息或 Cloud Storage 存储桶发生更改),可使用事件驱动型函数。

源目录结构

为了让 Cloud Functions 找到您的函数定义,每种语言运行时都对设计源代码结构有要求。每个运行时中函数的基本目录结构如下所示。

Node.js

Node.js 函数的基本目录结构如下:

.
├── index.js
└── package.json

默认情况下,Cloud Functions 会尝试从函数目录的根目录中名为 index.js 的文件加载源代码。如需指定其他主源文件,请在 package.json 文件中使用 main 字段。

package.json 文件还必须包含 Node.js 版 Functions 框架作为依赖项:

{
  "main": "index.js",
  "dependencies": {
    "@google-cloud/functions-framework": "^3.0.0"
  }
}

主文件中的代码必须定义函数入口点,并且可以照常导入其他代码和 Node.js 模块。主文件还可以定义多个函数入口点,可单独进行部署。

Python

Python 函数的基本目录结构如下:

.
├── main.py
└── requirements.txt

Cloud Functions 会从函数目录的根目录中名为 main.py 的文件加载源代码。主文件必须命名为 main.py

requirements.txt 文件必须包含 Python 版 Functions 框架作为依赖项:

functions-framework==3.*

main.py 文件中的代码必须定义函数入口点,并且可以照常导入其他代码和外部依赖项。main.py 文件还可以定义多个函数入口点,可单独进行部署。

Go

Go 函数的基本目录结构如下:

.
├── myfunction.go
└── go.mod

您的函数必须位于项目根目录下的 Go 软件包中,该软件包及其源文件可以采用任何名称,但函数不能位于 package main 中。如果您需要 main 软件包(例如,用于本地测试),可以在子目录中创建一个:

.
├── myfunction.go
├── go.mod
└── cmd/
    └── main.go

go.mod 文件必须包含 Go 版 Functions 框架作为依赖项:

module example.com/my-module

require (
  github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)

根软件包中的代码必须定义函数入口点,并且可以照常从子软件包和依赖项导入其他代码。软件包还可以定义多个函数入口点,可单独进行部署。

Java

Java 函数的基本目录结构如下:

.
├── pom.xml
└── src/
    └── main/
        └── java/
            └── MyFunction.java

Java 源文件必须位于 src/main/java/ 目录下,且可以采用任何名称。如果源文件声明了软件包,请在 src/main/java 下添加一个额外的目录,其中包含软件包名称:

.
├── pom.xml
└── src/
    └── main/
        └── java/
            └── mypackage/
                └── MyFunction.java

我们建议将关联的测试放在 src/test/java/ 子目录下。

pom.xml 文件必须包含 Java 版 Functions 框架作为依赖项:

...
    <dependency>
      <groupId>com.google.cloud.functions</groupId>
      <artifactId>functions-framework-api</artifactId>
      <version>1.0.4</version>
    </dependency>
...

源文件中的代码必须定义函数入口点,并且可以照常导入其他代码和外部依赖项。源文件还可以定义多个函数入口点,可单独进行部署。

C#

.NET 函数的基本目录结构如下:

.
├── MyFunction.cs
└── MyProject.csproj

您可以像设计任何其他 .NET 源代码结构一样设计您的项目的结构。源文件可以采用任何名称。

您的项目文件必须包含 .NET 版 Functions 框架作为依赖项:

...
    <PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...

源文件中的代码必须定义函数入口点,并且可以照常导入其他代码和外部依赖项。源文件还可以定义多个函数入口点,可单独进行部署。

您还可以使用 .NET 版 Cloud Functions 模板软件包生成所需的文件。

Ruby

Ruby 函数的基本目录结构如下:

.
├── app.rb
├── Gemfile
└── Gemfile.lock

Cloud Functions 会从函数目录的根目录中名为 app.rb 的文件加载源代码。主文件必须命名为 app.rb

Gemfile 文件必须包含 Ruby 版 Functions 框架作为依赖项:

source "https://rubygems.org"
gem "functions_framework", "~> 1.0"

app.rb 文件中的代码必须定义函数入口点,并且可以照常导入其他代码和外部依赖项。app.rb 文件还可以定义多个函数入口点,可单独进行部署。

PHP

PHP 函数的基本目录结构如下:

.
├── index.php
└── composer.json

Cloud Functions 会从函数目录的根目录中名为 index.php 的文件加载源代码。主文件必须命名为 index.php

composer.json 文件必须包含 PHP 版 Functions 框架作为依赖项:

{
  "require": {
    "google/cloud-functions-framework": "^1.1"
  }
}

index.php 文件中的代码必须定义函数入口点,并且可以照常导入其他代码和外部依赖项。index.php 文件还可以定义多个函数入口点,可单独进行部署。

如果您打算将多个函数分组到单个项目中,请注意每个函数最终可能共享同一组依赖项。 但是,某些函数可能并不需要所有依赖项。

我们建议您尽可能拆分大型多函数代码库,并将每个函数放入各自的顶层目录中(如上所示),其中包含各自的源文件和项目配置文件。此方法可最大限度地减少特定函数所需的依赖项数量,进而减少函数所需的内存量。

函数入口点

源代码必须定义函数的入口点,即调用 Cloud Functions 函数时执行的特定代码。您可以在部署函数时指定此入口点。

如何定义入口点取决于您所使用的语言运行时。对于某些语言,入口点是一个函数,而对于其他语言,入口点是一个类。如需详细了解如何定义入口点以及以不同语言实现 Cloud Functions 函数,请参阅编写 HTTP 函数编写事件驱动型函数

依赖项

您可以使用每个运行时的标准工具管理依赖项。如需了解详情,请参阅相应页面:

后续步骤