このチュートリアルでは、App Engine アプリケーション内で Cloud Tasks を使用して Cloud Functions の関数をトリガーし、スケジュールされたメールを送信する方法について説明します。
目標
- 各コンポーネントのコードを理解する。
- SendGrid アカウントを作成する。
- ソースコードをダウンロードする。
- Cloud Tasks リクエストを受信し、SendGrid API を介してメールを送信する Cloud Function をデプロイする。
- Cloud Tasks キューを作成する。
- Cloud Tasks リクエストを認証するためのサービスアカウントを作成する。
- ユーザーがメールを送信できるようにクライアントコードをデプロイする。
料金
Cloud Tasks、Cloud Functions、App Engine には無料枠があるため、無料枠でチュートリアルを実行する限り、追加の費用は発生しません。詳細については、料金をご覧ください。
始める前に
Google Cloud プロジェクトを選択または作成します。
プロジェクトで App Engine アプリケーションを初期化します。
[App Engine へようこそ] ページで [アプリケーションを作成] をクリックします。
アプリケーションのリージョンを選択します。このロケーションは、Cloud Tasks リクエストの
LOCATION_ID
パラメータとして使用するため、メモしておいてください。App Engine コマンドで europe-west および us-central と呼ばれる 2 つのロケーションは、Cloud Tasks コマンドではそれぞれ europe-west1 および us-central1 と呼ばれます。言語として [Node.js] を選択し、環境として [Standard] を選択します。
[課金を有効にする] ポップアップが表示されたら、請求先アカウントを選択します。まだ請求先アカウントがない場合は、[請求先アカウントの作成] をクリックしてウィザードの手順を行います。
[開始] ページで [次へ] をクリックします。他のことは後で対応します。
Cloud Functions と Cloud Tasks APIs を有効にします。
gcloud CLI をインストールして初期化する
コードについて
このセクションでは、アプリのコードとその動作を順を追って説明します。
タスクの作成
インデックス ページは、app.yaml
のハンドラを使用して提供されます。タスクの作成に必要な変数が、環境変数として渡されます。
このコードにより、エンドポイント /send-email
が作成されます。このエンドポイントは、インデックス ページからのフォーム送信を処理し、そのデータをタスク作成コードに渡します。
このコードでは実際にタスクが作成され、Cloud Tasks キューに送信されます。コードは、次の方法でタスクを構築します。
ターゲット タイプを
HTTP Request
に指定します。使用する
HTTP method
とターゲットのURL
を指定します。ダウンストリーム アプリケーションが構造化ペイロードを解析できるように、
Content-Type
ヘッダーをapplication/json
に設定します。認証を要求しているリクエスト ターゲットに Cloud Tasks が認証情報を提供できるように、サービス アカウントのメールアドレスを追加します。サービス アカウントは個別に作成されます。
日付のユーザー入力が最大 30 日以内であることを確認し、フィールド
scheduleTime
としてリクエストに追加します。
メールの作成
このコードは、Cloud Tasks リクエストのターゲットである Cloud Functions の関数を作成します。リクエスト本文を使用してメールを作成し、SendGrid API を介して送信します。
アプリケーションの準備
SendGrid の設定
SendGrid アカウントを作成する。
- これは、SendGrid ウェブサイトから手動で行うこともできます。
- アカウントを作成し、課金データを統合する Google Cloud Launcher を使って行うことも可能です。Cloud Launcher を使って SendGrid アカウントを作成するをご覧ください。
SendGrid API キーを作成します。
SendGrid アカウントにログインします。
左側のナビゲーションで、[設定] を開き、[API キー] をクリックします。
[Create API Key] をクリックし、制限付きアクセスを選択します。[メール送信] ヘッダーで、[フルアクセス] を選択します。
表示された API キーをコピーします(このキーは 1 回だけ表示されます。後で使用できるように別の場所に貼り付けてください)。
ソースコードのダウンロード
ローカルマシンにサンプルアプリのレポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
サンプルコードが入っているディレクトリに移動します。
cd cloud-tasks/
Cloud 関数のデプロイ
function/
ディレクトリに移動します。cd function/
関数をデプロイします。
sendgrid_api_key
はキーで置き換えます。gcloud functions deploy sendEmail --runtime nodejs14 --trigger-http --set-env-vars SENDGRID_API_KEY=sendgrid_api_key
このコマンドでは、次のフラグを使用します。
--trigger-http
は Cloud Functions のトリガータイプを指定します。--set-env-var
は SendGrid 認証情報を設定します。
認証されたユーザーだけを許可するように、関数へのアクセス制御を設定します。
Cloud Functions UI で
sendEmail
関数を選択します。sendEmail
の権限情報が表示されない場合は、右上隅にある [情報パネルを表示] をクリックします。[Cloud Functions 起動元] ヘッダーで、プリンシパル
allUsers
を削除します。上の [プリンシパルを追加] ボタンをクリックします。
[新しいプリンシパル] を
allAuthenticatedUsers
に設定します。役割を
Cloud Function Invoker
に設定します。[保存] をクリックします。
Cloud Tasks キューの作成
次の
gcloud
コマンドを使用して、キューを作成します。gcloud tasks queues create my-queue
正常に作成されたことを確認します。
gcloud tasks queues describe my-queue
サービス アカウントの作成
Cloud Tasks リクエストでは、Cloud Function がリクエストを認証するための認証情報を Authorization
ヘッダーで指定する必要があります。このサービス アカウントで、その目的のために Cloud Tasks で OIDC トークンを作成して追加できます。
[IAM と管理] の [サービス アカウント] で、[+ サービス アカウントを作成] をクリックします。
サービス アカウント名(わかりやすい表示名)を追加し、[作成] を選択します。
[Cloud Functions 起動元] の役割を選択し、[続行] をクリックします。
[完了] を選択します。
エンドポイントとタスク作成者の App Engine へのデプロイ
app/
ディレクトリに移動します。cd ../app/
app.yaml
の変数を実際の値で更新します。キューのロケーションを探すには、次のコマンドを使用します。
gcloud tasks queues describe my-queue
関数の URL を探すには、次のコマンドを使用します。
gcloud functions describe sendEmail
次のコマンドを使用して、アプリケーションを App Engine スタンダード環境にデプロイします。
gcloud app deploy
アプリケーションを開き、ポストカードをメールで送信します。
gcloud app browse
クリーンアップ
チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。
リソースの削除
Google Cloud で作成したリソースをクリーンアップして、今後料金が発生しないようにします。次のセクションで、このようなリソースを削除または無効にする方法を説明します。
Cloud 関数の削除
Google Cloud コンソールの [Cloud Functions] ページに移動します。
関数の横にあるチェックボックスをクリックします。
ページの上部にある [削除] ボタンをクリックして、削除操作を確定します。
Cloud Tasks キューを削除する
Console で Cloud Tasks キューのページを開きます。
削除するキューの名前を選択し、[キューの削除] をクリックします。
処理を確認します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
次のステップ
- HTTP ターゲット タスクの作成の詳細を学習する。
- Cloud Tasks キューの詳細を学習する。