Pub/Sub 메시지를 사용하여 이벤트 수신 (Terraform)
이 빠른 시작에서는 Terraform을 사용하여 Pub/Sub에서 직접 이벤트를 수신하고 이벤트를 Cloud Run 서비스로 라우팅하는 Eventarc 트리거를 만드는 방법을 보여줍니다. Terraform을 사용하여 Eventarc 트리거를 만드는 방법에 관한 자세한 내용은 Terraform을 사용하여 트리거 만들기를 참고하세요.
이 빠른 시작에서는 다음을 수행합니다.
Terraform 배포를 준비합니다.
다음을 실행하는 Terraform 구성을 정의합니다.
- API 사용 설정
- 서비스 계정을 만들고 필요한 Identity and Access Management (IAM) 역할을 부여합니다.
- Cloud Run에 서비스를 이벤트 대상으로 배포합니다.
- Pub/Sub 주제를 이벤트 제공업체로 만듭니다.
- Eventarc 트리거를 만듭니다.
Terraform 구성을 적용합니다.
Pub/Sub 주제에 메시지를 게시하여 이벤트를 생성하고 Cloud Run 로그에서 확인합니다.
시작하기 전에
조직에서 정의한 보안 제약조건으로 인해 다음 단계를 완료하지 못할 수 있습니다. 문제 해결 정보는 제한된 Google Cloud 환경에서 애플리케이션 개발을 참고하세요.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager and IAM APIs:
gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager and IAM APIs:
gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
-
프로젝트 생성자에게는 기본 소유자 역할(
roles/owner
)이 부여됩니다. 기본적으로 Identity and Access Management (IAM) 역할에는 대부분의 Google Cloud리소스에 대한 전체 액세스에 필요한 권한이 포함되며, 이 단계를 건너뛸 수 있습니다.프로젝트 생성자가 아니면 프로젝트에서 적합한 주 구성원에 대해 필수 권한을 부여해야 합니다. 예를 들어 주 구성원은 Google 계정(최종 사용자)이거나 서비스 계정(애플리케이션 및 컴퓨팅 워크로드)일 수 있습니다. 자세한 내용은 이벤트 대상의 역할 및 권한 페이지를 참조하세요.
필수 권한
빠른 시작을 완료하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Cloud Run 관리자(
roles/run.admin
) -
Eventarc 관리자(
roles/eventarc.admin
) -
로그 뷰 접근자 (
roles/logging.viewAccessor
) -
프로젝트 IAM 관리자(
roles/resourcemanager.projectIamAdmin
) -
Pub/Sub 게시자(
roles/pubsub.publisher
) -
서비스 계정 관리자(
roles/iam.serviceAccountAdmin
) -
서비스 계정 사용자(
roles/iam.serviceAccountUser
) -
서비스 사용량 관리자(
roles/serviceusage.serviceUsageAdmin
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
-
Cloud Run 관리자(
Terraform 배포 준비
Terraform 구성 파일을 만들어 Terraform 리소스 배포를 준비합니다. Terraform 구성 파일을 사용하면 Terraform 문법을 사용하여 인프라의 기본 최종 상태를 정의할 수 있습니다.
로컬 셸을 사용하는 경우 Terraform을 설치하고 구성합니다.
Terraform은 이미 Cloud Shell 환경에 통합되어 있으며 Terraform을 설치하지 않고도 Cloud Shell을 사용하여 Terraform 리소스를 배포할 수 있습니다.
Cloud Shell 또는 로컬 셸에서 Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다. 이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.
Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.
디렉터리 준비
각 Terraform 구성 파일에는 자체 디렉터리 (루트 모듈이라고도 함)가 있어야 합니다. 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만듭니다.
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
파일 이름에는 .tf
확장자가 있어야 합니다. 예를 들어 이 빠른 시작에서는 파일을 main.tf
이라고 합니다.
Terraform 구성 정의
다음 Terraform 코드 스니펫을 새로 만든 main.tf
파일에 복사합니다. 원하는 경우 GitHub에서 코드를 복사할 수 있습니다. 코드 스니펫의 오른쪽 상단에서 >
GitHub에서 보기를 클릭합니다.
API 사용 설정
Terraform 샘플은 일반적으로 필요한 API가Google Cloud 프로젝트에서 사용 설정되었다고 가정합니다. 다음 코드 스니펫을 사용하여 이 빠른 시작에 필요한 API를 사용 설정합니다.
서비스 계정 만들기 및 액세스 구성
모든 Eventarc 트리거는 IAM 서비스 계정과 연결됩니다. 이 빠른 시작을 완료하려면 사용자 관리 서비스 계정에 다음 IAM 역할을 부여해야 합니다.
-
Cloud Run 호출자 역할 (
roles/run.invoker
) -
Pub/Sub 게시자 역할 (
roles/pubsub.publisher
)
다음 코드 스니펫을 사용하여 전용 서비스 계정을 만들고 이벤트를 관리할 수 있는 특정 IAM 역할을 부여합니다.
2021년 4월 8일 이전에 Pub/Sub 서비스 에이전트를 사용 설정한 경우 서비스 에이전트에 서비스 계정 토큰 생성자 역할 (roles/iam.serviceAccountTokenCreator
)을 부여합니다.
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
Cloud Run에 이벤트 수신자 배포
google_cloud_run_v2_service
Terraform 리소스를 사용하여 Cloud Run 서비스를 Eventarc 트리거의 이벤트 대상으로 만듭니다.
Pub/Sub 주제를 이벤트 제공자로 만들기
google_pubsub_topic
Terraform 리소스를 사용하여 Pub/Sub 주제를 만듭니다.
Eventarc 트리거 만들기
google_eventarc_trigger
Terraform 리소스를 사용하여 Pub/Sub 메시지를 리슨하는 Eventarc 트리거를 만듭니다.
Terraform 적용
Terraform CLI를 사용하여 구성 파일을 기반으로 인프라를 프로비저닝합니다.
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
terraform init
원하는 경우 최신 Google 공급업체 버전을 사용하려면
-upgrade
옵션을 포함합니다.terraform init -upgrade
구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
terraform plan
필요에 따라 구성을 수정합니다.
다음 명령어를 실행하고 프롬프트에
yes
를 입력하여 Terraform 구성을 적용합니다.terraform apply
일반적으로 전체 구성을 한 번에 적용합니다. 하지만 특정 리소스를 타겟팅할 수도 있습니다. 예를 들면 다음과 같습니다.
terraform apply -target="google_eventarc_trigger.default"
API를 사용 설정한 후 작업이 전파되고 추가 리소스를 배포할 수 있기까지 몇 분 정도 걸릴 수 있습니다. 문제가 발생하면 Terraform 구성을 다시 적용해 보세요.
Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.
리소스 생성 확인
Cloud Run 서비스가 생성되었는지 확인합니다.
gcloud run services list --region us-central1
출력은 다음과 비슷하게 표시됩니다.
SERVICE: hello-events REGION: us-central1 URL: https://hello-events-13335919645.us-central1.run.app LAST DEPLOYED BY: ... LAST DEPLOYED AT: 2024-12-16T15:00:52.606160Z
Eventarc 트리거가 생성되었는지 확인합니다.
gcloud eventarc triggers list --location us-central1
출력은 다음과 비슷하게 표시됩니다.
NAME: trigger-pubsub-cloudrun-tf TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
Pub/Sub 주제 이벤트 생성 및 확인
메시지를 Pub/Sub 주제에 게시하면 이벤트를 생성할 수 있습니다. Eventarc 트리거는 메시지를 Cloud Run에 배포된 이벤트 수신자 서비스로 라우팅하고 서비스는 이벤트 메시지를 로깅합니다.
Pub/Sub 주제를 환경 변수로 찾아서 설정합니다.
gcloud config set eventarc/location us-central1 export RUN_TOPIC=$(gcloud eventarc triggers describe trigger-pubsub-cloudrun-tf \ --format='value(transport.pubsub.topic)')
Pub/Sub 주제에 메시지를 게시하여 이벤트를 생성합니다.
gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"
이벤트는 Cloud Run 서비스로 라우팅되어 이벤트 메시지를 로깅합니다.
서비스에서 만든 이벤트 관련 로그 항목을 보려면 다음 명령어를 실행하세요.
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
다음과 같은 로그 항목을 찾습니다.
jsonPayload: ... message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World!'
Terraform을 사용하여 Cloud Run에 이벤트 수신자 서비스를 배포하고 Eventarc 트리거를 만들었습니다. Pub/Sub에서 이벤트를 생성하면 Cloud Run 로그에서 이벤트를 볼 수 있습니다.
삭제
이 빠른 시작에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다.
다음 명령어를 실행하고 프롬프트에 yes
를 입력하여 이전에 Terraform 구성에 적용된 리소스를 삭제합니다.
terraform destroy
또는 Google Cloud 프로젝트를 삭제하여 비용 청구를 방지할 수 있습니다. Google Cloud 프로젝트를 삭제하면 프로젝트 내에서 사용되는 모든 리소스에 대한 비용 청구가 중지됩니다.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
여러 튜토리얼과 빠른 시작을 살펴보려는 경우 프로젝트를 재사용하면 프로젝트 할당량 한도 초과를 방지할 수 있습니다.