使用 Terraform 创建工作流

本快速入门介绍了如何使用 Terraform 创建、部署和执行第一个工作流。Terraform 是一种基础设施即代码工具 以可预测的方式创建、更改和改进您的云基础架构。 了解如何使用 Terraform 在 Google Cloud 上预配基础架构。

在本快速入门中,示例工作流会向公共 API 发送请求,然后 返回 API 的响应。

您将完成以下操作:

  1. 使用 Terraform 启用 Workflows API。
  2. 使用 Terraform 为工作流创建服务账号。
  3. 使用 Terraform 定义和部署工作流。
  4. 使用 Google Cloud CLI 执行工作流。

准备工作

您的组织定义的安全限制条件可能会导致您无法完成以下步骤。如需了解相关问题排查信息,请参阅在受限的 Google Cloud 环境中开发应用

请注意,Cloud Shell 已集成 Terraform。如果您需要安装 Terraform,请参阅 HashiCorp Terraform 文档

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  6. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs:

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  11. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs:

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com

创建 Terraform 配置文件

创建一个名为 main.tf 的 Terraform 配置文件,并在该文件中添加 用于 Terraform 的 Google 提供程序资源 本快速入门。

请注意,您可以使用插值来替换引用变量、资源属性和调用函数等。

  1. 创建目录:

    mkdir terraform
  2. 转到 terraform 目录:

    cd terraform
  3. 向该目录添加一个新文件 main.tf

    nano main.tf
  4. 将以下资源添加到 main.tf 文件中:

    1. 分配项目的 ID:

      provider "google" {
      project = "PROJECT_ID"
      }

      PROJECT_ID 替换为您的项目 ID。

    2. 启用 Workflows API:

      # Enable Workflows API
      resource "google_project_service" "default" {
        service            = "workflows.googleapis.com"
        disable_on_destroy = false
      }

    3. 为工作流创建服务账号:

      # Create a dedicated service account
      resource "google_service_account" "default" {
        account_id   = "sample-workflows-sa"
        display_name = "Sample Workflows Service Account"
      }

    4. 使用 google_workflows_workflow 资源定义工作流:

      # Create a workflow
      resource "google_workflows_workflow" "default" {
        name            = "sample-workflow"
        region          = "us-central1"
        description     = "A sample workflow"
        service_account = google_service_account.default.id
        labels = {
          env = "test"
        }
        user_env_vars = {
          url = "https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam"
        }
        source_contents = <<-EOF
        # This is a sample workflow that you can replace with your source code
        #
        # The workflow does the following:
        # - Retrieves the current date from a public API and stores the
        #   response in `currentDate`
        # - Retrieves a list of Wikipedia articles from a public API related
        #   to the day of the week stored in `currentDate`
        # - Returns the list of articles in the workflow output
        #
        # Note that when you define workflows in Terraform, variables must be
        # escaped with two dollar signs ($$) and not a single sign ($)
      
        - getCurrentDate:
            call: http.get
            args:
                url: $${sys.get_env("url")}
            result: currentDate
        - readWikipedia:
            call: http.get
            args:
                url: https://en.wikipedia.org/w/api.php
                query:
                    action: opensearch
                    search: $${currentDate.body.dayOfWeek}
            result: wikiResult
        - returnOutput:
            return: $${wikiResult.body[1]}
      EOF
      
        depends_on = [google_project_service.default]
      } 对变量进行转义
      

示例工作流中使用了以下参数:

  • name:工作流的名称。
  • region位置 工作流
  • description:工作流的说明。
  • service_account:与最新的工作流版本关联的服务账号的电子邮件地址或唯一 ID。此服���账号 代表工作流的身份,并确定工作流的 工作流。如果您未在迁移期间指定服务账号 该工作流将使用默认的 Compute Engine 服务账号的身份。如需了解详情,请参阅向工作流授予访问 Google Cloud 资源的权限
  • labels:要分配给此工作流的键值对标签列表,可帮助您整理 Google Cloud 实例。有关 请参阅 什么是标签?
  • user_env_vars:与此关联的用户定义的环境变量 工作流修订。如需了解详情,请参阅 使用环境变量
  • source_contents:要执行的工作流代码。如需了解文件大小限制,请参阅资源限制

其他可选参数包括:

  • crypto_key_name:Cloud Key Management Service 密钥在 以下格式:

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

    如需了解详情,请参阅使用客户管理的加密密钥

  • call_log_level:要应用于调用和调用的日志记录级别 响应。可能的值包括:

    • CALL_LOG_LEVEL_UNSPECIFIED
    • LOG_ALL_CALLS
    • LOG_ERRORS_ONLY
    • LOG_NONE

    如需了解详情,请参阅通话记录

  • project:资源所属项目的 ID。如果未提供,系统会使用提供方项目。

  • name_prefix:创建以指定前缀开头的唯一名称。如果未指定此属性和 name,系统会为名称选择一个随机值。

创建和执行工作流

部署您的 Terraform 资源以创建工作流,然后执行 工作流。

  1. 在目录中初始化 Terraform:

    terraform init
  2. 检查您向 Terraform 建议的更改是否与预期方案匹配:

    terraform plan

    您可以忽略有关不使用 -out 选项的备注。

  3. 创建工作流:

    terraform apply
  4. Enter a value 提示符处,输入 yes 以继续创建 资源。

  5. 确认已创建工作流:

    gcloud workflows list --location us-central1

    输出应类似如下所示:

    NAME                                                                    STATE   REVISION_ID  UPDATE_TIME
    projects/project-name/locations/us-central1/workflows/sample-workflow   ACTIVE  000001-f9a   2024-02-24T13:38:58.353765906Z
  6. 您也可以选择执行工作流:

    gcloud workflows execute sample-workflow

清理

为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。

  1. 删除您使用 Terraform 创建的所有资源:
    terraform destroy
  2. 删除您创建的工作流:
    gcloud workflows delete sample-workflow
    当系统询问您是否要继续时,请输入 y
  3. 或者,您也可以删除 Google Cloud 项目,以避免产生费用。删除 Google Cloud 项目后,所有 该项目中使用的资源。

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

后续步骤