인증된 Cloud Run 서비스를 사용하여 Pub/Sub 이벤트 수신

이 튜토리얼에서는 Pub/Sub를 사용하여 이벤트를 수신하는 인증된 Cloud Run 서비스를 사용하여 컨테이너화된 애플리케이션을 배포하는 방법을 보여줍니다. Pub/Sub는 독립적인 애플리케이션이 서로 메시지를 주고받게 해주는 완전 관리형 실시간 메시징 서비스입니다.

Artifact Registry 표준 저장소 만들기

컨테이너 이미지를 저장할 Artifact Registry 표준 저장소를 만듭니다.

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

REPOSITORY를 저장소의 고유한 이름으로 바꿉니다.

Cloud Run에 이벤트 수신자 배포

이벤트 콘텐츠를 로깅하는 Cloud Run 서비스를 배포합니다.

  1. 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 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

    또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    또는 zip 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.

  2. Cloud Run 샘플 코드가 포함된 디렉터리로 변경합니다.

    Node.js

    cd nodejs-docs-samples/eventarc/pubsub/

    Python

    cd python-docs-samples/eventarc/pubsub/

    Go

    cd golang-samples/eventarc/pubsub/

    Java

    cd java-docs-samples/eventarc/pubsub/

    Ruby

    cd ruby-docs-samples/eventarc/pubsub/

    C#

    cd dotnet-docs-samples/eventarc/pubsub/
  3. 컨테이너를 빌드하고 Cloud Build에 업로드합니다.

    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  4. 컨테이너 이미지를 Cloud Run에 배포합니다.

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  5. Pub/Sub 트리거에 인증되지 않은 호출 허용(Y/N)? 프롬프트에서 '아니요'의 경우 n으로 응답합니다.

Cloud Run 서비스 URL이 표시되면 배포가 완료된 것입니다.

Eventarc 트리거 만들기

Pub/Sub 주제에 메시지가 게시되면 이벤트가 Cloud Run 서비스를 트리거합니다.

  1. Pub/Sub 메시지를 리슨하는 트리거를 만듭니다.

    새 Pub/Sub 주제

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    이렇게 하면 새 Pub/Sub 주제와 trigger-pubsub라는 트리거가 생성됩니다.

    기존 Pub/Sub 주제

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID
    • TOPIC_ID: 기존 Pub/Sub 주제의 ID입니다.

    기존 Pub/Sub 주제에 대한 trigger-pubsub라는 이름의 트리거를 만듭니다.

    Google Cloud 프로젝트에서 처음으로 Eventarc 트리거를 만들 때는 Eventarc 서비스 에이전트를 프로비저닝하는 데 시간이 지연될 수 있습니다. 이 문제는 일반적으로 트리거를 다시 만들면 해결할 수 있습니다. 자세한 내용은 권한 거부 오류를 참조하세요.

  2. 트리거가 성공적으로 생성되었는지 확인하세요. 트리거가 즉시 생성되더라도 트리거가 완전히 작동하려면 최대 2분까지 걸릴 수 있습니다.

    gcloud eventarc triggers list --location=${REGION}

    반환된 트리거 상태는 ACTIVE: Yes여야 합니다.

이벤트 생성 및 확인

이벤트를 생성하고 Cloud Run 서비스를 트리거하도록 Pub/Sub 주제에 메시지를 게시합니다. Cloud Run 서비스가 서비스 로그에 메시지를 로깅합니다.

  1. Pub/Sub 주제를 환경 변수로 찾아서 설정합니다.

    export TOPIC_ID=$(gcloud eventarc triggers describe ${SERVICE_NAME} \
        --format='value(transport.pubsub.topic)')
  2. Pub/Sub 주제에 메시지를 보내 이벤트를 생성합니다.

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"

    이벤트는 Cloud Run 서비스로 전송되어 이벤트 메시지를 로깅합니다.

  3. 서비스에서 만든 이벤트 관련 로그 항목을 확인합니다.

    gcloud logging read 'textPayload: "Hello there!"'

    로그 항목은 다음과 비슷하게 표시됩니다.

    textPayload: 'Hello, Hello there!'

로그가 나타나려면 시간이 약간 걸릴 수 있습니다. 즉시 표시되지 않으면 1분 후에 다시 확인하세요.