이 튜토리얼에서는 Eventarc를 통해 이벤트를 수신하는 인증된 Cloud Run 서비스를 사용하여 컨테이너화된 애플리케이션을 배포하는 방법을 보여줍니다.
Eventarc 트리거에 필터를 지정하면 이벤트 소스 및 이벤트 대상을 포함하는 이벤트 라우팅을 구성할 수 있습니다. 이 경우 Cloud Storage 버킷을 업데이트하면 이벤트가 트리거되고 Cloud Run 서비스에 HTTP 요청 형식으로 요청이 전송됩니다.
Artifact Registry 표준 저장소 만들기
컨테이너 이미지를 저장할 Artifact Registry 표준 저장소를 만듭니다.
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
REPOSITORY
를 저장소의 고유한 이름으로 바꿉니다.
Cloud Storage 버킷 만들기
이벤트 소스로 사용할 Cloud Storage 버킷을 만듭니다.
gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1
이벤트 소스가 생성되면 Cloud Run에 이벤트 수신자 서비스를 배포할 수 있습니다.
Cloud Run에 이벤트 수신자 배포
이벤트를 수신하고 로깅하는 Cloud Run 서비스를 배포합니다.
GitHub 저장소를 클론합니다.
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 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.
자바
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.
Cloud Run 샘플 코드가 포함된 디렉터리로 변경합니다.
Node.js
cd nodejs-docs-samples/eventarc/audit-storage/
Python
cd python-docs-samples/eventarc/audit-storage/
Go
cd golang-samples/eventarc/audit_storage/
자바
cd java-docs-samples/eventarc/audit-storage/
C#
cd dotnet-docs-samples/eventarc/audit-storage/
Cloud Run 서비스의 컨테이너를 빌드합니다.
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=helloworld-events gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
컨테이너 이미지를 Cloud Run에 배포합니다.
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
helloworld-events에 공개 액세스 허용 (y/N)? 프롬프트에서 '아니요'를 의미하는
n
으로 응답합니다.
Cloud Run 서비스 URL이 표시되면 배포가 완료된 것입니다.
Eventarc 트리거 만들기
Eventarc 트리거는 Cloud Storage 버킷의 이벤트를 helloworld-events
Cloud Run 서비스로 전송합니다. 이 서비스에는 인증이 필요하고, 리소스를 사용하는 데 필요한 IAM 역할 및 권한이 있는 서비스 계정이 포함된 호출자가 이벤트를 트리거해야 합니다.
Cloud Storage 이벤트를 필터링하는 트리거를 만듭니다.
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
그러면
helloworld-events
라는 트리거가 생성됩니다.Google Cloud 프로젝트에서 처음으로 Eventarc 트리거를 만들 때는 Eventarc 서비스 에이전트를 프로비저닝하는 데 시간이 지연될 수 있습니다. 이 문제는 일반적으로 트리거를 다시 만들면 해결할 수 있습니다. 자세한 내용은 권한 거부 오류를 참조하세요.
트리거가 성공적으로 생성되었는지 확인하세요. 트리거가 즉시 생성되더라도 트리거가 완전히 작동하려면 최대 2분까지 걸릴 수 있습니다.
gcloud eventarc triggers list --location=${REGION}
출력은 다음과 비슷하게 표시됩니다.
NAME: helloworld-events TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: helloworld-events ACTIVE: Yes
이벤트 생성 및 확인
Cloud Storage 버킷에 텍스트 파일을 업로드하여 Cloud Run 서비스로 라우팅되는 이벤트를 생성합니다. Cloud Run 서비스가 서비스 로그에 이벤트를 로깅합니다.
이벤트를 생성하려면 다음 안내를 따르세요.
텍스트 파일을 Cloud Storage에 업로드합니다.
echo "Hello World" > random.txt gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
업로드 시 이벤트가 생성되고 Cloud Run 서비스에서 이벤트의 메시지를 로깅합니다.
로그 항목을 보려면 다음 안내를 따르세요.
로그 항목을 필터링하고 JSON 형식으로 출력을 반환합니다.
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
다음과 같은 로그 항목을 찾습니다.
"textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
로그가 나타나려면 시간이 약간 걸릴 수 있습니다. 즉시 표시되지 않으면 1분 후에 다시 확인하세요.