Cloud Tasks를 사용하여 Cloud Run 서비스에서 비동기적으로 처리할 태스크를 안전하게 큐에 추가할 수 있습니다. 일반적인 사용 사례는 다음과 같습니다.
- 예상치 못한 프로덕션 이슈가 발생하는 경우 요청을 보존합니다.
- 사용자에게 표시되지 않는 작업을 지연시켜 트래픽 급증을 완화합니다.
- 데이터베이스 업데이트 또는 일괄 처리와 같이 속도가 느린 백그라운드 작업을 다른 서비스에서 처리하도록 위임하여 사용자 응답 속도를 높입니다.
- 데이터베이스 및 타사 API와 같은 지원 서비스로 호출률을 제한합니다.
이 페이지에서는 HTTPS 프로토콜을 통해 비공개 Cloud Run 서비스로 안전하게 푸시된 태스크를 큐에 추가하는 방법을 보여줍니다. 또한 비공개 Cloud Run 서비스의 필수 동작, 필수 서비스 계정 권한, 태스크 큐 만들기, 태스크 만들기를 설명합니다.
시작하기 전에
사용 중인 프로젝트에서 Cloud Tasks API를 사용 설정합니다.
Cloud Run 서비스를 배포하여 태스크 처리
태스크 큐로 전송된 태스크를 허용하는 서비스를 배포하려면 다른 Cloud Run 서비스와 동일한 방식으로 서비스를 배포하세요. Cloud Run 서비스는 태스크 처리가 완료된 후 성공 여부를 확인하기 위해 HTTP 200
코드를 반환해야 합니다.
태스크는 Cloud Tasks의 HTTPS 요청으로 이 Cloud Run 서비스에 푸시됩니다.
Cloud Tasks 응답은 구성된 제한 시간 내에 발생해야 합니다. 최대 Cloud Tasks 제한 시간보다 오래 실행해야 하는 워크로드의 경우에는 Cloud Run 작업을 사용하세요.
Terraform을 사용하여 배포
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
서비스를 만들려면 다음을 .tf
파일에 추가합니다.
태스크 큐 만들기
명령줄
태스크 큐를 만들려면 다음 명령어를 사용하세요.
gcloud tasks queues create QUEUE-ID
여기서 QUEUE-ID를 태스크 큐에 부여할 이름으로 바꿉니다. 이 이름은 프로젝트에서 고유해야 합니다. 프로젝트에서 App Engine 앱을 만들라는 메시지가 표시되면 y
로 응답하고 프로젝트를 만듭니다. Cloud Tasks는 큐에 이 앱을 사용합니다. Cloud Run 서비스에 사용할 위치와 동일한 위치를 선택해야 합니다.
대부분의 경우 기본 태스크 큐 구성이 작동합니다. 원하는 경우 다른 비율 제한과 재시도 매개변수를 설정할 수 있습니다.
Terraform
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
태스크 큐를 만들려면 다음을 .tf
파일에 추가합니다.
terraform apply
를 입력하여 변경사항을 적용합니다.
태스크와 연결할 서비스 계정 만들기
큐에 추가된 태스크와 연결할 서비스 계정을 만들어야 합니다. 태스크 큐에서 태스크를 Cloud Run 서비스로 푸시하도록 허용하려면 이 서비스 계정에 Cloud Run 호출자 IAM 역할이 있어야 합니다. .
Console
Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.
프로젝트를 선택합니다.
Google Cloud 콘솔에 표시할 서비스 계정 이름을 입력합니다.
Google Cloud 콘솔에서 이 이름을 기반으로 서비스 계정 ID가 생성됩니다. 필요한 경우 ID를 수정합니다. 나중에 이 ID를 변경할 수 없습니다.
선택사항: 서비스 계정에 대한 설명을 입력합니다.
만들고 계속하기를 클릭합니다.
선택사항: 역할 선택 필드를 클릭합니다.
Cloud Run > Cloud Run Invoker를 선택합니다.
완료를 클릭합니다.
명령줄
서비스 계정을 만듭니다.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
바꾸기
- SERVICE_ACCOUNT_NAME을 Google Cloud 프로젝트 내에서 고유한 소문자 이름으로 바꿉니다(예:
my-invoker-service-account-name
). - DISPLAYED_SERVICE_ACCOUNT_NAME을 Console에서 이 서비스 계정에 표시하려는 이름으로 바꿉니다(예:
My Invoker Service Account
).
- SERVICE_ACCOUNT_NAME을 Google Cloud 프로젝트 내에서 고유한 소문자 이름으로 바꿉니다(예:
Cloud Run의 경우 서비스를 호출할 수 있는 서비스 계정 권한을 부여합니다.
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
바꾸기
- SERVICE를 Cloud Tasks에서 호출할 서비스 이름으로 바꿉니다.
- SERVICE_ACCOUNT_NAME을 서비스 계정의 이름으로 바꿉니다.
- PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.
프로젝트의 리소스에 대한 특정 작업을 완료할 수 있는 권한을 갖도록 이 서비스 계정에 프로젝트에 대한 액세스 권한을 부여합니다.
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
바꾸기
RESOURCE_ID: Google Cloud 프로젝트 ID
PRINCIPAL: 일반적으로 PRINCIPAL_TYPE:ID 형식을 사용하는 주 구성원 또는 구성원의 식별자입니다. 예를 들면
user:my-user@example.com
입니다. PRINCIPAL가 가질 수 있는 값의 전체 목록은 정책 binding 참조를 확인하세요.
Terraform
Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.
.tf
파일에 다음을 추가합니다.
서비스 계정을 만듭니다.
Cloud Run의 경우 서비스를 호출할 수 있는 서비스 계정 권한을 부여합니다.
terraform apply
를 입력하여 변경사항을 적용합니다.
인증 토큰으로 HTTP 태스크 만들기
태스크 큐로 전송할 태스크를 만들 때 프로젝트, 위치, 큐 이름, 태스크와 연결하기 위해 이전에 만든 서비스 계정의 이메일, 태스크를 실행할 비공개 Cloud Run 서비스의 URL, 전송해야 하는 기타 데이터를 지정합니다. 프로젝트 ID, 위치, 서비스 계정 이메일과 같은 값을 Cloud Run 메타데이터 서버에서 동적으로 검색할 수 있지만, 이러한 값을 하드코딩하도록 선택할 수 있습니다.
태스크 요청 본문에 대한 자세한 내용은 Cloud Tasks API 문서를 참조하세요.
데이터 페이로드가 포함된 요청은 HTTP PUT
또는 POST
메서드를 사용해야 합니다.
태스크를 큐에 추가하는 코드에는 Cloud Tasks 큐 추가자 역할과 같이 필요한 IAM 권한이 있어야 합니다. Cloud Run에서 기본 서비스 계정을 사용하는 경우 코드에 필요한 IAM 권한이 있습니다.
다음 예에서는 태스크 요청을 만들며, 헤더 토큰 생성도 포함됩니다. 여기에서는 OIDC 토큰을 사용합니다. OAuth 토큰을 사용하려면 요청을 작성할 때 OIDC 매개변수를 언어에 적합한 OAuth 매개변수로 바꾸세요.
Python
requirements.txt
파일을 확인합니다.
Java
pom.xml
파일을 확인합니다.
Go
Node.js
package.json
파일을 확인합니다.