快速入门:使用 PHP 创建和部署 HTTP Cloud Functions 函数

使用 PHP 创建和部署 HTTP Cloud Functions 函数

本指南将引导您完成用 PHP 运行时编写 Cloud Functions 函数的过程。Cloud Functions 函数有两种类型:

  • HTTP 函数,通过标准 HTTP 请求调用。
  • 事件驱动函数,用于处理来自云基础架构的事件,例如 Cloud Pub/Sub 主题中收到消息或 Cloud Storage 存储分区发生更改。

本指南中的示例演示了如何创建简单的 HTTP 函数。

指南结构

  1. 使用 gcloud CLI 创建 Google Cloud 项目
  2. 创建函数
  3. 指定依赖项
  4. 在本地构建和测试
  5. 部署函数
  6. 测试已部署的函数

使用 gcloud CLI 创建 Google Cloud 项目

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

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Cloud Functions and Cloud Build API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 Cloud Functions and Cloud Build API。

    启用 API

  8. 安装并初始化 gcloud CLI
  9. 更新并安装 gcloud 组件:
    gcloud components update
  10. 准备开发环境。

    在 Google Cloud 上使用 PHP

创建函数

  1. 在本地系统上为函数代码创建一个目录:

    Linux 或 Mac OS X

    mkdir ~/helloworld_http
    cd ~/helloworld_http
    

    Windows

    mkdir %HOMEPATH%\helloworld_http
    cd %HOMEPATH%\helloworld_http
    
  2. helloworld_http 目录中创建一个 index.php 文件,其中包含以下内容:

    <?php
    
    use Google\CloudFunctions\FunctionsFramework;
    use Psr\Http\Message\ServerRequestInterface;
    
    // Register the function with Functions Framework.
    // This enables omitting the `FUNCTIONS_SIGNATURE_TYPE=http` environment
    // variable when deploying. The `FUNCTION_TARGET` environment variable should
    // match the first parameter.
    FunctionsFramework::http('helloHttp', 'helloHttp');
    
    function helloHttp(ServerRequestInterface $request): string
    {
        $name = 'World';
        $body = $request->getBody()->getContents();
        if (!empty($body)) {
            $json = json_decode($body, true);
            if (json_last_error() != JSON_ERROR_NONE) {
                throw new RuntimeException(sprintf(
                    'Could not parse body: %s',
                    json_last_error_msg()
                ));
            }
            $name = $json['name'] ?? $name;
        }
        $queryString = $request->getQueryParams();
        $name = $queryString['name'] ?? $name;
    
        return sprintf('Hello, %s!', htmlspecialchars($name));
    }
    

    此示例函数会获取 HTTP 请求中提供的姓名并返回问候语;或者,如果没有提供姓名,则返回“Hello World!”。

指定依赖项

您可以使用 Composer 管理 PHP 依赖项。如果您尚未安装 Composer,则可以按照以下步骤操作:

  1. 下载 Composer 至任何目标位置。

  2. 下载完成后,将 composer.phar 文件移动到系统路径中的目录,例如:

    mv composer.phar /usr/local/bin/composer
    

接下来,指定函数的依赖项:

  1. 将包含依赖项的 composer.json 文件添加到您的函数代码目录中,其中 FUNCTION_TARGET=FUNCTION_NAME 表示函数的名称。在此示例中,FUNCTION_NAMEhelloHttp

    {
        "require": {
            "php": ">= 7.4",
            "google/cloud-functions-framework": "^1.1"
        },
        "scripts": {
            "start": [
               "Composer\\Config::disableProcessTimeout",
               "FUNCTION_TARGET=helloHttp php -S localhost:${PORT:-8080} vendor/google/cloud-functions-framework/router.php"
            ]
        }
    }
    
  2. 在包含函数代码的目录中(其中还必须包含您刚创建的 composer.json 文件),运行以下命令:

    composer require google/cloud-functions-framework
    

    系统随即会将 Cloud Functions 框架添加到您的 composer.json。此外,它还会在包含依赖项的函数代码目录中创建一个 vendor/ 目录。

在本地构建和测试

完成指定依赖项中的步骤后,您就可以在本地构建和测试函数。

以下命令会创建一个运行 helloHttp 函数的本地 Web 服务器:

export FUNCTION_TARGET=helloHttp
php -S localhost:8080 vendor/bin/router.php

如果函数成功构建,它会显示一个网址。您可以通过使用网络浏览器访问以下网址:http://localhost:8080/。您应该会看到 Hello World! 消息。

或者,您也可以从另一个终端窗口使用 curl 向此函数发送请求:

curl localhost:8080
# Output: Hello World!

部署函数

如需使用 HTTP 触发器部署函数,请在 helloworld_http 目录中运行以下命令:

gcloud functions deploy helloHttp --runtime php82 --trigger-http --allow-unauthenticated

通过 --allow-unauthenticated 标志,您可以在不进行身份验证的情况下访问函数。如需进行身份验证,请省略此标志。

测试已部署的函数

  1. 当函数完成部署时,请记下 httpsTrigger.url 属性,或使用以下命令查找该属性:

    gcloud functions describe helloHttp
    

    该属性应如下所示:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloHttp
  2. 在浏览器中访问此网址。您应该会看到一条“Hello World!”消息。

    请尝试通过 HTTP 请求传递姓名,如以下示例所示:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloHttp?name=NAME

    您应该会看到一条“Hello NAME!”消息。

查看日志

使用命令行工具

您可以在 Cloud Logging 界面中查看 Cloud Functions 的日志,也可以通过 Google Cloud CLI 查看。

如需使用 gcloud CLI 查看函数的日志,请使用 gcloud logs read 命令,后跟函数名称:

gcloud functions logs read helloHttp

输出应类似于以下内容:

LEVEL  NAME       EXECUTION_ID  TIME_UTC                 LOG
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:25.983  Function execution started
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:26.001  Function execution took 19 ms, finished with status code: 200

使用日志记录信息中心

您还可以通过 Google Cloud 控制台查看 Cloud Functions 函数的日志。