このページでは、外部のイベント ドリブン指標を使用して Cloud Run ワーカープールを自動スケーリングする方法について説明します。Cloud Run 外部指標自動スケーリング(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 ランナーや 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 ランナーの指標を使用して 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: CREMA が外部サービスを認証する方法を決定します。たとえば、Secret Manager に保存されているトークンを使用します。scaledObjects: Cloud Run ワーカープールと外部指標リソースのマッピングを定義します。このパラメータには以下が含まれます。scaleTargetRef: スケーリングする Cloud Run サービスまたはワーカープール。triggers: スケーリングに使用される特定の外部指標。外部指標ソースで認証が必要な場合は、authenticationRefフィールドを設定して、認証情報のTriggerAuthenticationsオブジェクトのいずれかを指定します。
pollingInterval: CREMA が指標を更新する間隔(秒単位)を制御します。このパラメータを省略すると、CREMA は自動的にポーリングしません。サービスに POST リクエストを送信して、スケーリング チェックを手動でトリガーする必要があります。
基本構成指標と高度な構成指標の定義の詳細については、 Google Cloud GitHub ドキュメントの構成リファレンスをご覧ください。
互換性のあるスケーラーの構成定義の完全なリストについては、KEDA ドキュメントのスケーラーをご覧ください。
CREMA 構成を Parameter Manager に保存する
CREMA オートスケーラー サービスのパラメータ バージョンを保存する手順は次のとおりです。
Parameter Manager でパラメータを作成します。
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 サービス アカウントの名前。
CREMA サービス アカウントに、ワーカープールの
roles/run.developerロールを付与します。これにより、CREMA サービスは指標の変化に応じてワーカープールのインスタンス数を変更できます。WORKER_POOL_NAME=WORKER_POOL_NAME WORKER_POOL_REGION=WORKER_POOL_REGION gcloud 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 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: Parameter Manager に保存した値。
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 ワーカープールの詳細を確認する。