このページでは、外部イベント ドリブン指標を使用して Cloud Run ワーカープールを自動スケーリングする方法について説明します。Cloud Run External Metrics Autoscaling(CREMA)は、Kubernetes ベースのイベント ドリブン オートスケーリング(KEDA)を活用して、外部イベント ソースに基づいてワークロードをスケーリングすることで、この機能を有効にします。
サポートされているスケーラーと Cloud Run との互換性については、 Google Cloud GitHub ドキュメントの Cloud Run 外部指標の自動スケーリング(CREMA)をご覧ください。
オートスケーラー サービスについて
ワーカープールを自動スケーリングするには、CREMA オートスケーラー サービスを Cloud Run にデプロイします。このサービスは次のアクションを実行します。
Apache Kafka トピックや GitHub Runner Scaler などの外部イベント ソースをポーリングします。
YAML 構成に基づいて必要なインスタンス数を計算します。
ワーカープールのインスタンス数を自動的に更新します。
始める前に
設定ページの説明に従って、Cloud Run に新しいプロジェクトを設定したことを確認してください。
Artifact Registry、Cloud Build、Cloud Run Admin API、Secret Manager、Parameter Manager API を有効にします。
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com \ parametermanager.googleapis.comGitHub Runners や Apache Kafka などのイベント ドリブンまたはリクエスト ベースのワークロードを構成します。ワークロード ソースがサポートされていることを確認するには、 Google Cloud GitHub ドキュメントの CREMA 互換性リストをご覧ください。
料金計算ツールで費用を見積もります。Cloud Run スケーリング サービスの料金は、スケーリングをトリガーする頻度に基づいて発生します。
必要なロール
ワーカープールの自動スケーリングに必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Artifact Registry リポジトリ管理者(
roles/artifactregistry.repoAdmin) -
Cloud Build 編集者(
roles/cloudbuild.builds.editor) -
Cloud Run 管理者(
roles/run.admin) -
サービス アカウントの作成(
roles/iam.serviceAccountCreator) -
Secret Manager 管理者(
roles/secretmanager.admin) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser) -
Service Usage ユーザー(
roles/serviceusage.serviceUsageConsumer) - ストレージ管理者(
roles/storage.admin) -
Parameter Manager 管理者 (
roles/parametermanager.admin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
カスタム サービス アカウントを作成する
ワークロードに必要なプロビジョニングされたリソースを使用するために必要な最小権限を持つカスタム サービス アカウントを作成します。サービス アカウントを設定するには、次の操作を行います。
gcloud iam service-accounts create CREMA_SERVICE_ACCOUNT \
--display-name="CREMA Service Account"
CREMA_SERVICE_ACCOUNT は、カスタム サービス アカウントの名前に置き換えます(crema-service-account など)。このコマンドは、crema-service-account@example-project.iam.gserviceaccount.com という形式のサービス アカウントを作成します。
CREMA 構成ファイルを作成する
スケーリング ロジックを定義するには、ルート ディレクトリに YAML 構成ファイルを作成します。このファイルは、モニタリングする外部ソース、リソースに対する認証方法、スケーリングするワーカー プールを CREMA サービスに指示します。
YAML の例
次の例は、GitHub Runner 指標を使用して Cloud Run ワーカープール(example-workerpool)をスケーリングする構成ファイルを示しています。github_runner_token という名前の Secret Manager シークレットを使用して、指標を読み取るために GitHub で認証します。
apiVersion: crema/v1
kind: CremaConfig
metadata:
name: gh-demo
spec:
triggerAuthentications:
- metadata:
name: github-trigger-auth
spec:
gcpSecretManager:
secrets:
- parameter: personalAccessToken
id: github_runner_token
version: latest
scaledObjects:
- spec:
scaleTargetRef:
name: projects/example-project/locations/us-central1/workerpools/example-workerpool
triggers:
- type: github-runner
name: example-runner
metadata:
owner: repo-owner
runnerScope: repo
repos: repo-name
targetWorkflowQueueLength: 1
authenticationRef:
name: github-trigger-auth
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
stabilizationWindowSeconds: 10
policies:
- type: Pods
value: 100
periodSeconds: 10
scaleUp:
stabilizationWindowSeconds: 10
policies:
- type: Pods
value: 2
periodSeconds: 10
pollingInterval: 10
YAML 構成では、次の上位パラメータを使用します。
triggerAuthentications: Secret Manager に保存されているトークンを使用するなど、CREMA が外部サービスを認証する方法を決定します。scaledObjects: Cloud Run ワーカープールと外部指標リソース間のマッピングを定義します。このパラメータには次のものが含まれます。scaleTargetRef: スケールする Cloud Run サービスまたはワーカープール。triggers: スケーリングに使用される特定の外部指標。外部指標ソースで認証が必要な場合は、authenticationRefフィールドを設定して、認証情報のTriggerAuthenticationsオブジェクトのいずれかを指定します。
pollingInterval: CREMA が指標を更新する間隔(秒単位)を制御します。このパラメータを省略すると、CREMA は自動的にポーリングを行いません。サービスに POST リクエストを送信して、スケーリング チェックを手動でトリガーする必要があります。
基本構成指標と詳細構成指標の定義の詳細については、 Google Cloud GitHub ドキュメントの構成リファレンスをご覧ください。
互換性のあるスケーラーの構成定義の完全なリストについては、KEDA ドキュメントのスケーラーをご覧ください。
CREMA 構成を Parameter Manager に保存する
CREMA 自動スケーラー サービスのパラメータ バージョンを保存する手順は次のとおりです。
パラメータ マネージャーでパラメータを作成します。
gcloud parametermanager parameters create PARAMETER_ID --location=global --parameter-format=YAMLPARAMETER_ID は、パラメータの名前に置き換えます。
ローカルの YAML ファイルを新しいパラメータ バージョンとしてアップロードします。
gcloud parametermanager parameters versions create PARAMETER_VERSION \ --location=global \ --parameter=PARAMETER_ID \ --payload-data-from-file=LOCAL_YAML_CONFIG_FILE次のように置き換えます。
- PARAMETER_VERSION: パラメータ バージョンに割り当てる ID(
1など)。 - LOCAL_YAML_CONFIG_FILE: YAML 構成ファイルのパス。
- PARAMETER_VERSION: パラメータ バージョンに割り当てる ID(
詳細については、パラメータを作成するをご覧ください。
CREMA サービス アカウントに追加の権限を付与する
YAML 構成で指定したワーカープールをスケーリングするには、カスタム サービス アカウントに次の権限を付与します。
CREMA サービス アカウントに Parameter Manager から読み取る権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME \ --role="roles/parametermanager.parameterViewer"次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。
CREMA_SERVICE_ACCOUNT_NAME: CREMA サービス アカウントの名前。
ワーカープールに対する
roles/run.developerロールを CREMA サービス アカウントに付与します。これにより、CREMA サービスは、指標の変化に応じてワーカープールのインスタンス数を変更できます。WORKER_POOL_NAME=WORKER_POOL_NAME WORKER_POOL_REGION=WORKER_POOL_REGION gcloud beta run worker-pools add-iam-policy-binding $WORKER_POOL_NAME \ --region=$WORKER_POOL_REGION \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/run.developer"次のように置き換えます。
- WORKER_POOL_NAME: ワーカープールの名前。
- WORKER_POOL_REGION: ワーカープールのリージョン。
CREMA サービス アカウントに指標を書き込む権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/monitoring.metricWriter"CREMA サービス アカウントにサービス アカウント ユーザーのロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \ --role="roles/iam.serviceAccountUser"
ワークロードをスケーリングするサービスをデプロイする
ワーカープールをスケーリングするサービスをデプロイするには、次のコマンドを事前構築済みのコンテナ イメージで実行します。
gcloud beta run deploy SERVICE_NAME\
--image=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0 \
--region=SERVICE_REGION \
--service-account="CREMA_SERVICE_ACCOUNT_NAME" \
--no-allow-unauthenticated \
--no-cpu-throttling \
--base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/java25 \
--labels=created-by=crema \
--set-env-vars="CREMA_CONFIG=projects/PROJECT_ID/locations/PARAMETER_REGION/parameters/PARAMETER_ID/versions/PARAMETER_VERSION,OUTPUT_SCALER_METRICS=True"
次のように置き換えます。
SERVICE_NAME: オートスケーラー サービスの名前。
SERVICE_REGION: サービスのリージョン。
CREMA_SERVICE_ACCOUNT_NAME: CREMA サービス アカウントの名前。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。
PARAMETER_REGION、PARAMETER_ID、PARAMETER_VERSION: パラメータ マネージャーに保存した値。
Cloud Build でソースコードからビルドしたカスタム コンテナ イメージを使用して、CREMA サービスをデプロイすることもできます。
CREMA サービスをテストする
自動スケーリング サービスが正しく機能していることを確認するには、Cloud Run サービスの [ログ] タブを確認します。
指標が更新されるたびに、サービスのログに次のログが表示されます。
各ログ メッセージには、そのメッセージを出力したコンポーネントのラベルが付けられます。
[INFO] [METRIC-PROVIDER] Starting metric collection cycle
[INFO] [METRIC-PROVIDER] Successfully fetched scaled object metrics ...
[INFO] [METRIC-PROVIDER] Sending scale request ...
[INFO] [SCALER] Received ScaleRequest ...
[INFO] [SCALER] Current instances ...
[INFO] [SCALER] Recommended instances ...
次のステップ
ワーカープールでセルフホスト型 GitHub ランナーを使用して、GitHub リポジトリで定義されたワークフローを実行し、CREMA でワーカープールをスケーリングする方法について説明します。
Cloud Run ワーカープールの詳細を確認する。