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를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud CLI를 설치합니다.
  3. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  4. Google Cloud 프로젝트를 만들거나 선택합니다.

    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID를 Google Cloud 프로젝트 이름으로 바꿉니다.

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  6. Cloud Resource Manager and Identity and Access Management (IAM) API를 사용 설정합니다.

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com
  7. Google Cloud CLI를 설치합니다.
  8. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  9. Google Cloud 프로젝트를 만들거나 선택합니다.

    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID를 Google Cloud 프로젝트 이름으로 바꿉니다.

  10. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  11. Cloud Resource Manager and Identity and Access Management (IAM) API를 사용 설정합니다.

    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입니다. 이 서비스 계정은 워크플로의 ID를 나타내며 워크플로에 포함된 권한을 확인합니다. 워크플로를 만들 때 서비스 계정을 지정하지 않으면 워크플로에 해당 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 프로젝트를 삭제하면 프로젝트 내에서 사용되는 모든 리소스에 대한 비용 청구가 중지됩니다.

      Google Cloud 프로젝트를 삭제합니다.

      gcloud projects delete PROJECT_ID

다음 단계