Cloud Tasks キューに App Engine タスクを追加する
Cloud Tasks を使用すると、非同期タスクを App Engine サービスにディスパッチして、バックグラウンド ワークロードを処理できます。このクイックスタートでは、Cloud Tasks API を使用して App Engine タスクを作成し、Cloud Tasks キューに追加します。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分も差し上げます。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Google Cloud プロジェクトを作成または選択します。
プロジェクトの選択または作成に必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクト名に置き換えます。
Cloud Resource Manager API と Cloud Tasks API がまだ有効になっていない場合は、有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable cloudresourcemanager.googleapis.com tasks.googleapis.com
-
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ(IdP)を使用している場合は、 フェデレーション ID を使用して gcloud CLI にログインしていることを確認します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Google Cloud プロジェクトを作成または選択します。
プロジェクトの選択または作成に必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
-
Google Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクト名に置き換えます。
Cloud Resource Manager API と Cloud Tasks API がまだ有効になっていない場合は、有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable cloudresourcemanager.googleapis.com tasks.googleapis.com
-
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ(IdP)を使用している場合は、 フェデレーション ID を使用して gcloud CLI にログインしていることを確認します。
- App Engine を使用すると、App Engine のデフォルトのサービス アカウントが自動的に作成されます。このクイックスタートを試す場合は、このサービス アカウントを使用できます。ただし、組織のポリシーの構成によっては、デフォルトのサービス アカウントにプロジェクトの
Editorロールが自動的に付与されない場合があります。その場合、次のロールをサービス アカウントに付与する必要があります。- Artifact Registry 管理者(
roles/artifactregistry.admin) - Artifact Registry の Create-on-Push ライター(
roles/artifactregistry.createOnPushWriter) - Compute 管理者(
roles/compute.admin) - ログ ライター(
roles/logging.logWriter) - Storage オブジェクト閲覧者(
roles/storage.objectViewer)
- Artifact Registry 管理者(
App Engine アプリケーションを追加する
App Engine タスクをターゲットにする場合、App Engine スタンダード環境にアプリをデプロイする前に、App Engine アプリケーションをプロジェクトに追加する必要があります。
Google Cloud コンソールで、[App Engine] ページに移動します。
[App Engine へようこそ] ダイアログで、次のいずれかを行います。
App Engine アプリケーションをすでに作成していて、[App Engine アプリケーションが作成されました] というメッセージが表示されている場合は、このセクションの残りの手順をスキップして、サンプルをインストールしてデプロイするセクションの手順に進みます。
または
App Engine アプリケーションをまだ作成していない場合は、[アプリケーションを作成] をクリックして、このセクションの残りの手順に進みます。
アプリケーションのリージョンを選択してメモします。
Cloud Tasks コマンドでは、
europe-westとus-centralはそれぞれeurope-west1とus-central1と呼ばれます。サービス アカウントを選択しないでください。デフォルトの App Engine サービス アカウントが使用されます。
[次へ] をクリックします。
アプリケーションが構成され、作成されます。完了まで数分かかる場合があります。
Cloud SDK はダウンロードせずに、[後で行う] をクリックします。
[App Engine アプリケーションが作成されました] というメッセージが表示されます。
サンプルをインストールしてデプロイする
このクイックスタートで使用する Node.js サンプルは、2 つのファイルで構成されています。createTask.js は、タスクを作成してタスクキューに追加するコマンドライン ツールとしてローカルで実行されます。server.js は、タスクを処理するワーカー サービスとして App Engine にデプロイされます。
ターミナルで、ローカルマシンにサンプル アプリケーション リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.gitサンプルコードが含まれるディレクトリに移動します。
cd nodejs-docs-samples/cloud-tasks/snippetsNode.js パッケージ管理システムを使用してすべての依存関係をインストールします。
NPM を使用できます。
npm installまたは、Yarn を使用することもできます。
yarn installワーカー サービス(
server.js)を App Engine スタンダード環境にデプロイします。gcloud app deploy app.yamlサービスを含むアプリが実行されていることを確認します。
gcloud app browseブラウザで、提供されたリンクにアクセスします。次に例を示します。
https://PROJECT_ID.uc.r.appspot.com/Hello, World!が表示されます。
Cloud Tasks キューを作成する
gcloud tasks queues create コマンドを使用して、準備した環境にキューを作成します。
ターミナルで、すべてのオペレーションをロギングするキューを作成します。
gcloud tasks queues create QUEUE_NAME \ --log-sampling-ratio=1.0 \ --location=REGION以下を置き換えます。
QUEUE_NAME: Cloud Tasks キューの名前REGION: アプリをデプロイしたリージョン
キューが初期化されるまで待ってから、キューが正常に作成されたことを確認します。
gcloud tasks queues describe QUEUE_NAME \ --location=REGION出力例を以下に示します。
name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_NAME rateLimits: maxBurstSize: 100 maxConcurrentDispatches: 1000 maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Cloud Tasks キューにタスクを追加する
タスクを作成して作成したキューに追加し、そのタスクをワーカー サービスに配信します。
次の環境変数を設定します。クライアントは、この情報を使用してリクエストを作成します。
export PROJECT_ID=PROJECT_ID export LOCATION_ID=REGION export QUEUE_ID=QUEUE_NAMEペイロードとして
helloを含めたタスクを作成して、キューに追加します。 ペイロードは、ワーカー サービスがタスクを処理するために必要とするリクエストの任意のデータです。node createTask.js $PROJECT_ID $QUEUE_ID $LOCATION_ID helloワーカー サービスのログを表示して、タスクが実行されたことを確認します。
gcloud app logs readログは次のようになります。
2024-06-20 15:00:00 default[20240620t143852] "POST /log_payload HTTP/1.1" 200 2024-06-20 15:00:00 default[20240620t143852] App listening on port 8081 2024-06-20 15:00:00 default[20240620t143852] Press Ctrl+C to quit. 2024-06-20 15:00:00 default[20240620t143852] Received task with payload: hello
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含む Google Cloud プロジェクトを削除します。
Google Cloud プロジェクトを削除する:
gcloud projects delete PROJECT_ID
また、作成したリソースを削除することもできます。
以下のように、Cloud Tasks キューを削除します。
gcloud tasks queues delete QUEUE_NAME \ --location=REGION