関数 URL AWS Lambda を使用してイベントを受信する - Amazon EventBridge

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

関数 URL AWS Lambda を使用してイベントを受信する

注記

パートナーがインバウンドWebhookにアクセスできるようにするため、サードパーティのパートナーから送信された認証署名を検証することで、Lambdaアプリケーションレベルで保護されたOpen AWS Lambdaをアカウント内に作成しています。この設定をセキュリティチームと確認してください。詳細については、「Security and auth model for Lambda function URLs」(Lambda 関数 URL におけるセキュリティと認証モデル) を参照してください。

Amazon EventBridge イベントバスはAWS LambdaAWS CloudFormation テンプレートによって作成された関数 URL を使用して、サポートされている SaaS プロバイダーからイベントを受け取ることができます。関数 URL を使用すると、イベントデータは Lambda 関数に送信されます。次に、この関数はこのデータをイベントに変換し、イベントバスに取り込み、 EventBridge イベントバスに送信して処理します。イベントがイベントバスに入ると、ルールを使用してイベントをフィルタリングし、設定済みの入力変換を適用して、正しいターゲットにルーティングできます。

注記

Lambda 関数 URL を作成すると、月額のコストが増加します。詳細については、AWS Lambda の料金を参照してください。

接続を設定するには EventBridge、まず、接続を設定する SaaS プロバイダーを選択します。次に、そのプロバイダーで作成した署名シークレットを入力し、 EventBridge イベントの送信先のイベントバスを選択します。最後に、 AWS CloudFormation テンプレートを使用して、接続を完了するために必要なリソースを作成します。

現在、Lambda 関数 URL EventBridge を使用して次の SaaS プロバイダーを使用できます。

  • GitHub

  • Stripe

  • Twilio

GitHub への接続をセットアップする

ステップ 1: スタックを作成する AWS CloudFormation

まず、Amazon EventBridge CloudFormation コンソールを使用してスタックを作成します。

  1. https://console.aws.amazon.com/events/ で Amazon EventBridge コンソールを開きます。

  2. ナビゲーションペインで、[Quick starts] (クイックスタート) を選択します。

  3. [Inbound webhooks using Lambda fURLs] (Lambda fURL を使用したインバウンドウェブフック) で、[Get started] (使用を開始する) を選択します。

  4. [GitHub] で、[Set up] (設定) を選択します。

  5. [Step 1: Select an event bus] (ステップ 1: イベントバスを選択する) で、ドロップダウンリストからイベントバスを選択します。このイベントバスは、GitHub に指定した Lambda 関数 URL からデータを受け取ります。[New event bus] (新しいイベントバス) を選択して、イベントバスを作成することもできます。

  6. ステップ 2: を使用してセットアップ」で CloudFormation、「新規 GitHub webhook」を選択します。

  7. [I acknowledge that the Inbound Webhook I create will be publicly accessible] (作成したインバウンドウェブフックが一般公開されることを承認します) を選択し、[Confirm] (確認) を選択します。

  8. スタックの名前を入力します。

  9. パラメータの下に正しいイベントバスが表示されていることを確認し、GitHubWebhookSecret の安全なトークンを指定します。安全なトークンの作成の詳細については、GitHub ドキュメントの「シークレットトークンを設定する」を参照してください。

  10. [Capabilities and transforms] (機能と変換) で、以下のそれぞれを選択します。

    • これにより IAM AWS CloudFormation リソースが作成される可能性があることは認めます。

    • そうなると、カスタム名で IAM AWS CloudFormation リソースが作成される可能性があることは認めます。

    • AWS CloudFormation そのためには以下の機能が必要になる可能性があることを認めます。CAPABILITY_AUTO_EXPAND

  11. [スタックの作成] を選択します。

ステップ 3: GitHub ウェブフックを作成する

次に、GitHub でウェブフックを作成します。このステップを完了するには、ステップ 2 で作成した安全なトークンと Lambda 関数 URL の両方が必要です。詳細については、GitHub ドキュメントの「ウェブフックの作成」を参照してください。

Stripe への接続をセットアップする

ステップ 1: Stripe エンドポイントを作成する

と Stripe EventBridge との接続を設定するには、まず Stripe エンドポイントを作成し、エンドポイントのシークレットを書き留めておきます。このエンドポイントシークレットは、ステップ 2 でスタックをセットアップするときに使用します。詳細については、Stripe ドキュメントの「インタラクティブな Webhook エンドポイントビルダー」を参照してください。

注記

Stripe でエンドポイントを設定するには、ダミー URL が必要です。例えば www.example.com です。

ステップ 2: スタックを作成する AWS CloudFormation

  1. https://console.aws.amazon.com/events/ で Amazon EventBridge コンソールを開きます。

  2. ナビゲーションペインで、[Quick starts] (クイックスタート) を選択します。

  3. [Inbound webhooks using Lambda fURLs] (Lambda fURL を使用したインバウンドウェブフック) で、[Get started] (使用を開始する) を選択します。

  4. [Stripe] で、[Set up] (設定) を選択します。

  5. [Step 1: Select an event bus] (ステップ 1: イベントバスを選択する) で、ドロップダウンリストからイベントバスを選択します。このイベントバスは、Stripe に指定した Lambda 関数 URL からデータを受け取ります。[New event bus] (新しいイベントバス) を選択して、イベントバスを作成することもできます。

  6. ステップ 2: を使用してセットアップ」で CloudFormation、「新規 Stripe webhook」を選択します。

  7. [I acknowledge that the Inbound Webhook I create will be publicly accessible] (作成したインバウンドウェブフックが一般公開されることを承認します) を選択し、[Confirm] (確認) を選択します。

  8. スタックの名前を入力します。

  9. パラメータの下に正しいイベントバスが表示されていることを確認し、ステップ 1 で作成した StripeWebhookSecret を入力します。

  10. [Capabilities and transforms] (機能と変換) で、以下のそれぞれを選択します。

    • これにより IAM AWS CloudFormation リソースが作成される可能性があることは認めます。

    • そうなると、カスタム名で IAM AWS CloudFormation リソースが作成される可能性があることは認めます。

    • AWS CloudFormation そのためには以下の機能が必要になる可能性があることを認めます。CAPABILITY_AUTO_EXPAND

  11. [スタックの作成] を選択します。

ステップ 3: Stripe エンドポイントを更新する

Lambda 関数 URL を作成したら、Lambda 関数 URL にイベントを送信するように Stripe エンドポイントを更新します。

Twilio への接続をセットアップする

ステップ 1: Twilio Auth トークンを見つける

との接続を設定するにはTwilio EventBridge、まず、Twilioアカウントの認証トークン、Twilioつまりシークレットを使用してへの接続を設定します。詳細については、Twilio ドキュメントで「Auth トークンとその変更方法」を参照してください。

ステップ 2: AWS CloudFormation スタックの作成

  1. https://console.aws.amazon.com/events/ で Amazon EventBridge コンソールを開きます。

  2. ナビゲーションペインで、[Quick starts] (クイックスタート) を選択します。

  3. [Inbound webhooks using Lambda fURLs] (Lambda fURL を使用したインバウンドウェブフック) で、[Get started] (使用を開始する) を選択します。

  4. [Twilio] で、[Set up] (設定) を選択します。

  5. [Step 1: Select an event bus] (ステップ 1: イベントバスを選択する) で、ドロップダウンリストからイベントバスを選択します。このイベントバスは、Twilio に指定した Lambda 関数 URL からデータを受け取ります。[New event bus] (新しいイベントバス) を選択して、イベントバスを作成することもできます。

  6. ステップ 2: を使用してセットアップ」で CloudFormation、「新規 Twilio webhook」を選択します。

  7. [I acknowledge that the Inbound Webhook I create will be publicly accessible] (作成したインバウンドウェブフックが一般公開されることを承認します) を選択し、[Confirm] (確認) を選択します。

  8. スタックの名前を入力します。

  9. パラメータの下に正しいイベントバスが表示されていることを確認し、ステップ 1 で作成した TwilioWebhookSecret を入力します。

  10. [Capabilities and transforms] (機能と変換) で、以下のそれぞれを選択します。

    • これにより IAM AWS CloudFormation リソースが作成される可能性があることは認めます。

    • そうなると、カスタム名で IAM AWS CloudFormation リソースが作成される可能性があることは認めます。

    • AWS CloudFormation そのためには以下の機能が必要になる可能性があることを認めます。CAPABILITY_AUTO_EXPAND

  11. [スタックの作成] を選択します。

ステップ 3: Twilio ウェブフックを作成する

Lambda 関数 URL を設定したら、それを Twilio に渡してイベントデータを送信できるようにする必要があります。詳細については、Twilio ドキュメントで「Twilio でパブリック URL を設定する」を参照してください。

ウェブフックまたは Auth トークンを更新する

GitHub シークレットを更新する

注記

GitHub では、2 つのシークレットを同時に持つことをサポートしていません。GitHubスタック内のシークレットとシークレットが同期していないと、リソースのダウンタイムが発生する可能性があります。 AWS CloudFormation GitHubシークレットが同期していないときに送信されたメッセージは、署名が正しくないため失敗します。GitHub CloudFormation とシークレットが同期するまで待ってから、もう一度試してください。

  1. 新しい GitHub シークレットを作成する 詳細については、GitHub ドキュメントの「暗号化されたシークレット」を参照してください。

  2. https://console.aws.amazon.com/cloudformation AWS CloudFormation でコンソールを開きます。

  3. ナビゲーションペインで [Stacks] (スタック) を選択します。

  4. 更新するシークレットが含まれているウェブフックでスタックを選択します。

  5. [更新] を選択します。

  6. [Use current template] (現在のテンプレートの使用) が選択されていることを確認し、[Next] (次へ) を選択します。

  7. で [GitHubWebhookSecret既存の値を使用] をクリアし、ステップ 1 GitHub で作成した新しいシークレットを入力して [次へ] を選択します。

  8. [次へ] をクリックします。

  9. [Update stack] (スタックの更新) を選択します。

シークレットが伝播されるまでに最大で 1 時間かかる場合があります。このダウンタイムを減らすには、Lambda 実行コンテキストを更新できます。

Stripe シークレットを更新する

  1. Stripe ダッシュボードの [Webhooks] (ウェブフック) セクションで、[Roll secret] (シークレットを更新する) を選択し、有効期限を少なくとも 2 時間遅らせます。詳細については、Stripe ドキュメントの「エンドポイントシークレットを更新する」を参照してください。

  2. https://console.aws.amazon.com/cloudformation AWS CloudFormation でコンソールを開きます。

  3. ナビゲーションペインで [Stacks] (スタック) を選択します。

  4. 更新するシークレットが含まれているウェブフックでスタックを選択します。

  5. [更新] を選択します。

  6. [Use current template] (現在のテンプレートの使用) が選択されていることを確認し、[Next] (次へ) を選択します。

  7. で [StripeWebhookSecret既存の値を使用] をクリアし、ステップ 1 Stripe で作成した新しいシークレットを入力して [次へ] を選択します。

  8. [次へ] をクリックします。

  9. [Update stack] (スタックの更新) を選択します。

Stripe は、更新期間中に古い署名と新しい署名の両方を送信します。

Twilio シークレットを更新する

注記

Twilio では、2 つのシークレットを同時に持つことをサポートしていません。Twilio AWS CloudFormation シークレットとスタック内のシークレットが同期していない間は、リソースのダウンタイムが発生する可能性があります。 Twilioシークレットが同期していないときに送信されたメッセージは、署名が正しくないため失敗します。Twilio CloudFormation とシークレットが同期するまで待ってから、もう一度試してください。

  1. 新しい Twilio シークレットを作成する 詳細については、Twilio ドキュメントで「Auth トークンとその変更方法」を参照してください。

  2. https://console.aws.amazon.com/cloudformation AWS CloudFormation でコンソールを開きます。

  3. ナビゲーションペインで [Stacks] (スタック) を選択します。

  4. 更新するシークレットが含まれているウェブフックでスタックを選択します。

  5. [更新] を選択します。

  6. [Use current template] (現在のテンプレートの使用) が選択されていることを確認し、[Next] (次へ) を選択します。

  7. で [TwilioWebhookSecret既存の値を使用] をクリアし、ステップ 1 Twilio で作成した新しいシークレットを入力して [次へ] を選択します。

  8. [次へ] をクリックします。

  9. [Update stack] (スタックの更新) を選択します。

シークレットが伝播されるまでに最大で 1 時間かかる場合があります。このダウンタイムを減らすには、Lambda 実行コンテキストを更新します。

Lambda 関数を更新する

CloudFormation スタックによって作成される Lambda 関数が基本的なウェブフックを作成します。ロギングのカスタマイズなど、特定のユースケースに合わせて Lambda 関数をカスタマイズする場合は、 CloudFormation コンソールを使用して関数にアクセスし、Lambda コンソールを使用して Lambda 関数コードを更新します。

Lambda 関数にアクセスする
  1. https://console.aws.amazon.com/cloudformation でコンソールを開きます。 AWS CloudFormation

  2. ナビゲーションペインで [Stacks] (スタック) を選択します。

  3. 更新する Lambda 関数が含まれているウェブフックでスタックを選択します。

  4. [Resources] (リソース) タブを選択します。

  5. Lambda コンソールで Lambda 関数を開くには、[Physical ID] (物理 ID) で、Lambda 関数の ID を選択します。

Lambda 関数にアクセスしたら、Lambda コンソールを使用して関数コードを更新します。

Lambda 関数コードを更新する
  1. [Actions] (アクション) で、[Export function] (関数のエクスポート) を選択します。

  2. [Download deployment package] (デプロイパッケージのダウンロード) を選択し、ファイルをコンピュータに保存します。

  3. デプロイパッケージの .zip ファイルを解凍して、app.py ファイルを更新し、更新したデプロイパッケージを圧縮します。元の .zip ファイル内のすべてのファイルが含まれていることを確認してください。

  4. Lambda コンソールで、[Code] (コード) タブを選択します。

  5. [Code source (コードソース)] で、[Upload from (アップロード元)] を選択します。

  6. [.zip file (.zip ファイル)]、[Upload (アップロード) ] の順に選択します。

    1. ファイルの選択画面で、更新するファイルを選択し、[Open] (開く)、[Save] (保存) の順に選択します。

  7. [Actions] (アクション) メニューで、[Publish new version] (新しいバージョンを発行) を選択します。

利用可能なイベントタイプ

現在、 CloudFormation イベントバスでは以下のイベントタイプがサポートされています。

クォータ、エラーコード、配信の再試行

クォータ

Webhook への受信リクエストの数は、 AWS 基盤となるサービスによって制限されます。次の表に関連するクォータを示します。

サービス クォータ

AWS Lambda

デフォルト: 10 件の同時実行

クォータの引き上げのリクエストを含む、クォータの詳細については、「Lambda のクォータ」を参照してください。

AWS Secrets Manager

デフォルト: 1 秒あたり 5,000 個のリクエスト

クォータの引き上げのリクエストを含む、クォータの詳細については、「AWS Secrets Manager のクォータ」を参照してください。

注記

1 秒あたりのリクエスト数は、AWS Secrets Manager Python キャッシュクライアントを使用して最小化されます。

Amazon EventBridge

アクションの最大エントリサイズは 256 KB。 PutEvents

EventBridge リージョンベースのレートクォータを適用します。詳細については、「EventBridge クォータ」を参照してください。

エラーコード

エラーが発生すると、 AWS 各サービスは特定のエラーコードを返します。次の表に関連するエラーコードを示します。

サービス エラーコード 説明

AWS Lambda

429「」TooManyRequestsExption

同時実行のクォータの制限を超えています。

AWS Secrets Manager

500 「Internal Server Error」

1 秒あたりのリクエスト数がクォータを超えています。

Amazon EventBridge

500 「Internal Server Error」

リージョンのレートクォータを超えています。

イベント再配信

エラーが発生した場合は、該当するイベントの配信を再試行できます。SaaS プロバイダーごとに再試行手順が異なります。

GitHub

GitHub ウェブフック API を使用すると、ウェブフック呼び出しの配信ステータスをチェックし、必要に応じてイベントを再配信できます。詳細については、次の GitHubドキュメントを参照してください。

Stripe

Stripe は、エクスポネンシャルバックオフにより、最大 3 日間ウェブフックの配信を試みます。詳細については、次の Stripe ドキュメントを参照してください。

Twilio

Twilio ユーザーは、接続の上書きを使用してイベント再試行オプションをカスタマイズできます。詳細については、Twilio ドキュメントの「Webhooks (HTTP callbacks): Connection Overrides」 (ウェブフック (HTTP コールバック): 接続の上書き) を参照してください。