使用 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. 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. 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. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

  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:要执行的 Workflows 代码。如需了解文件大小限制,请参阅资源限制

其他可选参数包括:

  • crypto_key_name:Cloud Key Management Service 密钥的资源 ID,格式如下:

    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. 输入值提示符处,输入 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

后续步骤