快速入门:使用 Terraform 创建工作流

本快速入门介绍了如何使用 Terraform 创建、部署和执行第一个工作流。Terraform 是一种 HashiCorp 开源工具,可让您使用代码以可预测的方式创建、更改和改进您的云基础架构。在本快速入门中,工作流会向示例 API 发送请求,然后使用响应创建请求并将其发送至公共 API。然后,工作流会返回公共 API 的响应。

在本文档中,您将使用 Terraform 执行以下操作:

  1. 启用 Workflows API。
  2. 为工作流创建服务帐号
  3. 使用 Terraform 定义和部署工作流。
  4. 使用 gcloud 命令行工具执行工作流。

如需了解有关如何使用 Terraform 的资源和指导信息,请参阅将 Terraform 与 Google Cloud 搭配使用

准备工作

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

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 安装并初始化 Cloud SDK
  5. 在 Cloud Console 中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Cloud Console 的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Cloud SDK 的 Shell 环境,其中包括 gcloud 命令行工具以及已为当前项目设置的值。该会话可能需要几秒钟时间来完成初始化。

  6. Cloud Shell 已集成 Terraform。

创建 Terraform 配置文件

创建一个名为 main.tf 的 terraform 配置文件,以包含此项目中使用的 Google Cloud 资源。

  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:
      resource "google_project_service" "workflows" {
        service            = "workflows.googleapis.com"
        disable_on_destroy = false
      }
    3. 为工作流创建服务帐号:
      resource "google_service_account" "workflows_service_account" {
        account_id   = "sample-workflows-sa"
        display_name = "Sample Workflows Service Account"
      }
    4. 定义和部署工作流,并将 var.region 替换为 "us-central1"
      resource "google_workflows_workflow" "workflows_example" {
        name            = "sample-workflow"
        region          = var.region
        description     = "A sample workflow"
        service_account = google_service_account.workflows_service_account.id
        source_contents = <<-EOF
        # This is a sample workflow, feel free to replace it with your source code
        #
        # This workflow does the following:
        # - reads current time and date information from an external API and stores
        #   the response in CurrentDateTime variable
        # - retrieves a list of Wikipedia articles related to the day of the week
        #   from CurrentDateTime
        # - returns the list of articles as an output of the workflow
        # FYI, In terraform you need to escape the $$ or it will cause errors.
      
        - getCurrentTime:
            call: http.get
            args:
                url: https://us-central1-workflowsample.cloudfunctions.net/datetime
            result: CurrentDateTime
        - readWikipedia:
            call: http.get
            args:
                url: https://en.wikipedia.org/w/api.php
                query:
                    action: opensearch
                    search: $${CurrentDateTime.body.dayOfTheWeek}
            result: WikiResult
        - returnOutput:
            return: $${WikiResult.body[1]}
      EOF
      
        depends_on = [google_project_service.workflows]
      }

部署和执行工作流

使用 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   2021-06-24T13:38:58.353765906Z
    

  6. (可选)您可以执行工作流:
    gcloud workflows execute sample-workflow
    

清理

为避免系统因本页中使用的资源向您的 Google Cloud 帐号收取费用,请按照以下步骤操作。

您可以使用以下命令删除使用 Terraform 创建的所有资源:

terraform destroy

您还可以删除您创建的工作流。

  1. 删除您创建的工作流:
    gcloud workflows delete sample-workflow
  2. 当系统询问您是否要继续时,请输入 y

工作流已删除。

后续步骤