이 튜토리얼에서는 Cloud 감사 로그 트리거로 이벤트 기반 Cloud 함수를 작성, 배포, 트리거하는 방법을 설명합니다.
Cloud Functions(2세대)의 고유 기능 중 하나는 Cloud 감사 로그 항목에 따라 함수를 트리거할 수 있다는 점입니다. 많은 Google Cloud 제품이 중요한 제품 내 작업이 수행될 때 Cloud 감사 로그에 기록됩니다. 이러한 로그 항목은 사용자가 자동으로 처리 또는 작업할 수 있도록 Cloud Functions 실행을 실시간으로 트리거할 수 있습니다.
이러한 로그는 Google Cloud에서 여러 다양한 이벤트에서 생성되며 대부분의 Google Cloud 제품을 포함합니다. 따라서 Cloud 감사 로그 트리거를 사용 설정하면 Google Cloud에 대부분의 상태 변경에 반응하는 함수를 만들 수 있습니다.
이 튜토리얼에서는 Cloud 감사 로그 트리거를 사용해서 새로 생성된 Compute Engine 인스턴스에 이를 생성한 항목(사용자 또는 서비스 계정)의 이름을 라벨로 지정하는 방법을 보여줍니다.
Cloud 감사 로그를 처음 사용하거나 자세히 알아보려는 경우 Cloud 감사 로그 문서를 참조하세요.
목표
- Compute Engine VM 인스턴스가 생성될 때 Cloud 감사 로그 이벤트를 검색하는 이벤트 기반 Cloud 함수를 작성합니다.
- 인스턴스를 생성한 항목(사용자 또는 서비스 계정)의 이름으로 인스턴스에 라벨이 지정되는 시점에 Compute Engine VM 인스턴스를 만들어 함수를 트리거합니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- Cloud Functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
- Compute Engine
For details, see Cloud Functions pricing.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
- Cloud SDK를 설치하고 초기화합니다.
gcloud
구성요소를 업데이트합니다.- 개발 환경을 준비합니다.
gcloud components update
명령 프롬프트가 필요하신가요? Google Cloud Shell을 사용해보세요. Google Cloud Shell 명령줄 환경에는 Google Cloud SDK가 이미 포함되어 있으므로 별도로 설치할 필요가 없습니다. Google Cloud SDK는 Google Compute Engine 가상 머신에도 사전 설치되어 있습니다.
기본 요건
Google Cloud 콘솔에서 IAM 및 관리자 > 감사 로그 페이지를 엽니다.
Compute Engine API에 대해 Cloud 감사 로그 관리자 읽기, 데이터 읽기, 데이터 쓰기 로그 유형을 사용 설정합니다.
Compute Engine 서비스 계정에
Editor
역할이 있는지 확인합니다. 이 서비스 계정은 Cloud Functions의 서비스 ID로 사용됩니다.테이블에서
PROJECT_NUMBER-compute@developer.gserviceaccount.com
항목을 찾고Roles
열을 확인합니다. 열에Editor
가 포함되어 있으면 다음 단계를 건너뛸 수 있습니다. 그렇지 않으면 다음 단계로 이동하여 서비스 계정에 필요한 역할을 할당합니다.프로젝트의 Compute Engine 서비스 계정에
eventarc.eventReceiver
역할을 부여합니다.PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver
Pub/Sub 트리거가 함수를 실행할 수 있도록 프로젝트의 Compute Engine 서비스 계정에
run.invoker
역할을 부여합니다.PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/run.invoker
함수 코드가 VM 인스턴스를 사용하고 라벨을 설정하는 데 필요한 권한을 갖을 수 있도록
compute.instanceAdmin
역할을 프로젝트의 Compute Engine 서비스 계정에 부여합니다.PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/compute.instanceAdmin
애플리케이션 준비
샘플 앱 저장소를 로컬 머신에 클론합니다.
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.
Cloud 감사 로그에 액세스하기 위해 Cloud Functions 샘플 코드가 포함된 디렉터리로 변경합니다.
Node.js
cd nodejs-docs-samples/functions/v2/autoLabelInstance/
Python
cd python-docs-samples/functions/v2/label_gce_instance/
Go
cd golang-samples/functions/functionsv2/label_gce_instance/
자바
cd java-docs-samples/functions/v2/label-compute-instance/
다음 샘플 코드를 살펴봅니다.
Node.js
Python
Go
자바
함수 배포
Cloud 감사 로그 트리거를 사용하여 함수를 배포하려면 샘플 코드(또는 자바의 경우 pom.xml
파일)가 포함된 디렉터리에서 다음 명령어를 실행합니다.
Node.js
gcloud functions deploy nodejs-cal-function \ --gen2 \ --runtime=nodejs20 \ --region=REGION
\ --source=. \ --entry-point=autoLabelInstance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
--runtime
플래그를 사용하여 함수를 실행할 지원되는 Node.js 버전의 런타임 ID를 지정합니다.
Python
gcloud functions deploy python-cal-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=label_gce_instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
--runtime
플래그를 사용하여 함수를 실행할 지원되는 Python 버전의 런타임 ID를 지정합니다.
Go
gcloud functions deploy go-cal-function \ --gen2 \ --runtime=go121 \ --region=REGION
\ --source=. \ --entry-point=label-gce-instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
--runtime
플래그를 사용하여 함수를 실행할 지원되는 Go 버전의 런타임 ID를 지정합니다.
Java
gcloud functions deploy java-cal-function \ --gen2 \ --runtime=java17 \ --region=REGION
\ --source=. \ --entry-point=functions.AutoLabelInstance \ --memory=512MB \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
--runtime
플래그를 사용하여 함수를 실행할 지원되는 Java 버전의 런타임 ID를 지정합니다.
위 배포 명령어는 VM 만들기에 해당하는 다음 이벤트 필터 매개변수를 지정합니다.
type
: Cloud 감사 로그 이벤트 유형(google.cloud.audit.log.v1.written
)입니다.serviceName
: 로그 항목을 생성한 Google Cloud 서비스의 이름입니다. 여기에서는compute.googleapis.com
입니다.methodName
: 로그 항목을 생성한 API 메서드의 이름입니다. 여기에서는v1.compute.instances.insert
입니다.
함수 트리거
함수가 배포된 다음 작동을 확인할 수 있습니다.
Compute Engine VM 인스턴스를 만듭니다.
gcloud compute instances create
YOUR_INSTANCE_NAME
--zoneYOUR_ZONE
또는 Google Cloud 콘솔로 이동하여 VM 만들기를 클릭합니다.
다음 명령어를 실행하여 인스턴스에 라벨이 올바르게 지정되었는지 확인합니다.
gcloud compute instances describe
YOUR_INSTANCE_NAME
\ --zoneYOUR_ZONE \ --format 'value(labels)'
creator=YOURNAMEYOUR_DOMAIN
형식의 라벨이 표시됩니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.
프로젝트를 삭제하려면 다음 안내를 따르세요.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Cloud 함수 삭제
Cloud Functions를 삭제해도 Cloud Storage에 저장된 리소스는 삭제되지 않습니다.
이 튜토리얼에서 만든 Cloud Function을 삭제하려면 다음 명령어를 실행합니다.
Node.js
gcloud functions delete nodejs-cal-function --gen2 --region REGION
Python
gcloud functions delete python-cal-function --gen2 --region REGION
Go
gcloud functions delete go-cal-function --gen2 --region REGION
Java
gcloud functions delete java-cal-function --gen2 --region REGION
Google Cloud Console에서 Cloud Functions를 삭제할 수도 있습니다.
Compute Engine VM 인스턴스 삭제
이 튜토리얼에서 만든 Compute Engine VM 인스턴스를 삭제하려면 다음 명령어를 실행합니다.
gcloud compute instances deleteYOUR_INSTANCE_NAME
--zoneYOUR_ZONE