Terraform을 사용하여 크론 작업 생성 및 예약

이 빠른 시작에서는 Terraform을 사용하여 Cloud Scheduler 크론 작업을 만드는 방법을 설명합니다. Terraform은 코드를 사용하여 클라우드 인프라를 예측적으로 생성, 변경, 개선할 수 있게 해주는 코드형 인프라(IaC) 도구입니다. Terraform을 사용하여 Google Cloud에서 인프라를 프로비저닝하는 방법을 자세히 알아볼 수 있습니다.

Cloud Scheduler에는 무료 등급이 있으므로 이 빠른 시작을 실행해도 비용이 발생하지 않습니다. 자세한 내용은 가격 책정을 참조하세요.

이 빠른 시작에서는 다음을 수행합니다.

  1. Terraform을 사용하여 Cloud Scheduler의 크론 작업을 만듭니다.
  2. 작업에 반복 일정을 설정합니다.
  3. Pub/Sub 주제를 작업 대상으로 지정합니다.
  4. 작업을 실행합니다.
  5. 작업이 성공적으로 실행되었는지 확인합니다.

시작하기 전에

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  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 CLI를 설치합니다.
  6. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  7. 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 프로젝트 이름으로 바꿉니다.

  8. Cloud Shell에는 Terraform이 이미 통합되어 있습니다. Terraform을 설치해야 하는 경우 HashiCorp Terraform 문서를 참조하세요.

Terraform 구성 파일 만들기

Cloud Scheduler에서 Terraform을 사용하려면 인프라를 설명하는 구성 파일을 만들고 실행 계획을 만들어야 합니다. 그런 다음 구성 파일을 플랫폼이나 서비스에 적용하여 인프라를 프로비저닝하는 작업을 수행합니다.

다음 단계를 완료하여 main.tf라는 Terraform 구성 파일을 만듭니다.

  1. 터미널을 열고 디렉터리를 만듭니다.

    mkdir terraform
  2. terraform 디렉터리로 이동합니다.

    cd terraform
  3. 새 파일 main.tf를 디렉터리에 추가합니다.

    nano main.tf
  4. 다음 Google Cloud용 Terraform 제공업체 리소스를 main.tf 파일에 추가합니다.

    1. Cloud Scheduler 및 Pub/Sub API를 사용 설정합니다.

      # Enable Cloud Scheduler API
      resource "google_project_service" "scheduler" {
        service            = "cloudscheduler.googleapis.com"
        disable_on_destroy = false
      }
      # Enable Pub/Sub API
      resource "google_project_service" "pubsub" {
        service            = "pubsub.googleapis.com"
        disable_on_destroy = false
      }
    2. Pub/Sub 주제를 게시자가 메시지를 보낼 수 있는 리소스로 만듭니다.

      # Create Pub/Sub topic
      resource "google_pubsub_topic" "default" {
        name = "pubsub_topic"
      }

      이렇게 하면 pubsub_topic이라는 주제가 생성됩니다.

    3. 구독을 만들어 Pub/Sub 주제에 게시된 메시지를 수신합니다.

      # Create Pub/Sub subscription
      resource "google_pubsub_subscription" "default" {
        name  = "pubsub_subscription"
        topic = google_pubsub_topic.default.name
      }
    4. google_cloud_scheduler_job 리소스를 사용하여 크론 작업을 만듭니다.

      # Create a cron job using Cloud Scheduler
      resource "google_cloud_scheduler_job" "default" {
        name        = "test-job"
        description = "test job"
        schedule    = "30 16 * * 7"
        region      = "us-central1"
      
        pubsub_target {
          topic_name = google_pubsub_topic.default.id
          data       = base64encode("Hello world!")
        }
      }

      샘플에서는 다음 인수가 사용됩니다.

      • name: 작업의 이름입니다.
      • description: 작업에 대한 설명입니다.
      • schedule: unix-cron을 기반으로 하는 형식을 사용하는 작업 빈도입니다.

        이 샘플에서 30 16 * * 7은 작업이 일요일 오후 4시 30분에 실행됨을 의미합니다. 자세한 내용은 크론 작업 형식 및 시간대를 참조하세요.

      • region: 작업이 있는 리전입니다.

      • pubsub_target: 작업이 실행될 때 메시지 페이로드(data)가 게시되는 주제의 전체 리소스 이름(topic_name)이 포함된 Pub/Sub 주제 대상입니다.

      다른 인수가 지원됩니다. 자세한 내용은 Terraform 레지스트리 인수 참조를 확인하세요.

크론 작업 만들기

Terraform 리소스를 배포하여 크론 작업을 만듭니다.

  1. 터미널을 열고 terraform 디렉터리에서 Terraform을 초기화합니다.

    terraform init
    
  2. Terraform으로 제안한 변경사항이 예상 계획과 일치하는지 확인합니다.

    terraform plan
    

    -out 옵션을 사용하지 않는 것에 관한 참고 사항은 무시해도 됩니다.

  3. 크론 작업을 만듭니다.

    terraform apply
    
  4. 값 입력 프롬프트에서 yes를 입력하여 리소스 생성을 진행합니다.

  5. 작업이 생성되었는지 확인합니다.

    gcloud scheduler jobs describe test-job --location=us-central1
    

    출력은 다음과 비슷하게 표시됩니다.

    description: test job
    lastAttemptTime: '2024-04-04T13:56:00.669530Z'
    name: projects/PROJECT_ID/locations/us-central1/jobs/test-job
    pubsubTarget:
    data: dGVzdA==
    topicName: projects/PROJECT_ID/topics/pubsub_topic
    schedule: '30 16 * * 7'
    scheduleTime: '2024-04-04T13:58:00.737907Z'
    state: ENABLED
    

일요일 오후 4시 30분에 Pub/Sub 주제에 메시지를 전송하는 작업을 만들었습니다. 이제 작업을 실행할 수 있습니다.

작업 실행

지정된 일정에 따라 실행하는 것 외에도 다음 명령어를 실행하면 작업을 강제로 즉시 실행할 수 있습니다.

gcloud scheduler jobs run test-job --location=us-central1

초기 구성때문에 프로젝트에서 만든 첫 번째 작업을 실행하는 데 몇 분 정도 걸릴 수 있습니다.

결과 확인

Pub/Sub 주제가 해당 작업의 메시지를 수신하는지 확인하세요.

  1. 구독에서 Pub/Sub 메시지 가져오기:

    gcloud pubsub subscriptions pull pubsub_subscription --limit 5
    

    처음에 가져온 메시지가 없으면 명령어를 다시 실행합니다.

  2. 작업 실행 결과를 봅니다. 출력은 다음과 비슷하게 표시됩니다.

    DATA: Hello world!
    MESSAGE_ID: 5028933846601543
    ORDERING_KEY:
    ATTRIBUTES:
    DELIVERY_ATTEMPT:
    ACK_ID: RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQAgVPAihdeTFXLkFacGhRDRlyfWB9[...]
    

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 Google Cloud 프로젝트를 삭제하면 됩니다.

  1. Google Cloud 프로젝트를 삭제하면 프로젝트 내에서 사용되는 모든 리소스에 대한 비용 청구가 중지됩니다. 기본적으로 Cloud Shell 홈 디렉터리의 모든 파일(예: Terraform 파일)은 세션 간에 유지됩니다.

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

    gcloud projects delete PROJECT_ID
  2. 또는 Terraform으로 만든 모든 리소스를 삭제할 수 있습니다.

    terraform destroy 명령어는 Terraform 상태에 지정된 모든 리소스를 종료합니다. 현재 Terraform 프로젝트에서 관리하지 않는 리소스는 삭제되지 않습니다. Terraform 구성 파일은 삭제되지 않습니다. 자세한 내용은 인프라 폐기를 참조하세요.

    terraform destroy

다음 단계