Terraform으로 트리거 만들기

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 문서에서는 Terraform에서 Google Cloud 리소스를 사용하여 Eventarc 트리거를 만드는 방법을 설명합니다.

이 문서에서는 Terraform을 사용하여 다음을 수행합니다.

  1. Cloud Run 및 Eventarc API를 사용 설정합니다.
  2. 공개적으로 액세스할 수 있는 Cloud Run 서비스를 이벤트 대상으로 배포합니다.
  3. Cloud Run 서비스의 이벤트 수신자 서비스에 이벤트를 전송하는 Eventarc Pub/Sub 트리거를 만듭니다.
  4. Eventarc 트리거를 만들어 감사 로그를 필터링하고 Cloud Storage 이벤트를 Cloud Run 서비스로 전송합니다.

Terraform 사용에 대한 리소스와 안내는 Google Cloud에서 Terraform 사용을 참조하세요.

시작하기 전에

  1. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  3. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  4. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  5. Google Cloud CLI를 설치하고 초기화합니다.
  6. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  7. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  8. Google Cloud CLI를 설치하고 초기화합니다.
  9. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  10. Cloud Shell은 Terraform이 이미 통합된 셸 환경입니다.

  11. Git 소스 코드 관리 도구를 다운로드하여 설치합니다.

Eventarc 트리거 만들기

Cloud Shell을 사용하여 Terraform으로 리소스를 배포하여 Eventarc 트리거를 만듭니다.

Eventarc 및 Cloud Run API 사용 설정

Eventarc API 및 Cloud Run API를 사용 설정하려면 다음 코드를 사용합니다.

# Used to retrieve project_number later
data "google_project" "project" {
  provider = google-beta
}

# Enable Cloud Run API
resource "google_project_service" "run" {
  provider = google-beta
  service            = "run.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  provider = google-beta
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

Cloud Run 서비스를 이벤트 대상으로 정의

Cloud Run 서비스를 트리거의 이벤트 대상으로 만듭니다. google_cloud_run_service 리소스를 사용하여 Cloud Run 서비스를 정의합니다.


# Deploy Cloud Run service
resource "google_cloud_run_service" "default" {
  provider = google-beta
  name     = "cloudrun-hello-tf"
  location = "us-east1"

  template {
    spec {
      containers {
        image = "gcr.io/cloudrun/hello"
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }

  depends_on = [google_project_service.run]
}

# Make Cloud Run service publicly accessible
resource "google_cloud_run_service_iam_member" "allUsers" {
  provider = google-beta
  service  = google_cloud_run_service.default.name
  location = google_cloud_run_service.default.location
  role     = "roles/run.invoker"
  member   = "allUsers"
}

Pub/Sub 트리거 정의

Pub/Sub 트리거는 Pub/Sub 주제를 Cloud Run 서비스에 연결합니다. google_eventarc_trigger 리소스를 사용하여 Pub/Sub 트리거 리소스를 정의합니다.


# Create a Pub/Sub trigger
resource "google_eventarc_trigger" "trigger-pubsub-tf" {
  provider = google-beta
  name     = "trigger-pubsub-tf"
  location = google_cloud_run_service.default.location
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.pubsub.topic.v1.messagePublished"
  }
  destination {
    cloud_run_service {
      service = google_cloud_run_service.default.name
      region  = google_cloud_run_service.default.location
    }
  }

  depends_on = [google_project_service.eventarc]
}

Cloud 감사 로그 트리거 정의

Cloud 감사 로그 트리거는 감사 로그가 있는 Google Cloud 서비스를 Cloud Run 서비스에 연결합니다. 기본 Compute Engine 서비스 계정에 eventarc.eventReceiver 역할을 부여하고 google_eventarc_trigger 리소스를 사용하여 Cloud Storage 이벤트의 Cloud 감사 로그 트리거를 정의합니다.


# Give default Compute service account eventarc.eventReceiver role
resource "google_project_iam_binding" "project" {
  provider = google-beta
  project = data.google_project.project.id
  role    = "roles/eventarc.eventReceiver"

  members = [
    "serviceAccount:${data.google_project.project.number}-compute@developer.gserviceaccount.com"
  ]
}

# Create an AuditLog for Cloud Storage trigger
resource "google_eventarc_trigger" "trigger-auditlog-tf" {
  provider = google-beta
  name     = "trigger-auditlog-tf"
  location = google_cloud_run_service.default.location
  project  = data.google_project.project.id
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.audit.log.v1.written"
  }
  matching_criteria {
    attribute = "serviceName"
    value     = "storage.googleapis.com"
  }
  matching_criteria {
    attribute = "methodName"
    value     = "storage.objects.create"
  }
  destination {
    cloud_run_service {
      service = google_cloud_run_service.default.name
      region  = google_cloud_run_service.default.location
    }
  }
  service_account = "${data.google_project.project.number}-compute@developer.gserviceaccount.com"

  depends_on = [google_project_service.eventarc]
}

트리거 생성 확인

Cloud Run 서비스와 두 개의 트리거가 생성되었는지 확인하려면 다음을 실행합니다.

gcloud eventarc triggers list --location DESTINATION-RUN-REGION

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

NAME: trigger-auditlog-tf
TYPE: google.cloud.audit.log.v1.written
DESTINATION: Cloud Run service: cloudrun-hello-tf
ACTIVE: By 16:29:08

NAME: trigger-pubsub-tf
TYPE: google.cloud.pubsub.topic.v1.messagePublished
DESTINATION: Cloud Run service: cloudrun-hello-tf
ACTIVE: Yes

삭제

다음을 사용하여 Terraform으로 만든 모든 리소스를 삭제할 수 있습니다.

terraform destroy -var="project_id=PROJECT-ID" -var="region=DESTINATION-RUN-REGION"

비용이 청구되지 않도록 Google Cloud 프로젝트를 삭제할 수도 있습니다. 클라우드 프로젝트를 삭제하면 해당 프로젝트 내에서 사용되는 모든 리소스에 대한 청구가 중단됩니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계