Amazon EventBridge のAWS Lambda 関数 URL からの SaaS イベントの受信
注記
パートナーがインバウンドウェブフックにアクセスできるようにするために、サードパーティパートナーから送信された認証署名を検証することにより、Lambda アプリケーションレベルで保護されている AWS アカウントに Open Lambda を作成します。この設定をセキュリティチームと確認してください。詳細については、「Security and auth model for Lambda function URLs」(Lambda 関数 URL におけるセキュリティと認証モデル) を参照してください。
Amazon EventBridge イベントバスは、AWS CloudFormation テンプレートで作成した AWS Lambda 関数 URL を使用して、サポートされている SaaS プロバイダーからイベントを受け取ることができます。関数 URL を使用すると、イベントデータは Lambda 関数に送信されます。次に、関数はこのデータをイベントに変換します。EventBridge は、このデータを取り込んでイベントバスに送信して処理できます。イベントがイベントバスに入ると、ルールを使用してイベントをフィルタリングし、設定済みの入力変換を適用して、正しいターゲットにルーティングできます。
注記
Lambda 関数 URL を作成すると、月額のコストが増加します。詳細については、「AWS Lambda 料金表
EventBridge への接続をセットアップするには、接続をセットアップする SaaS プロバイダーを最初に選択します。次に、そのプロバイダーで作成した署名シークレットを指定し、イベントの送信先の EventBridge イベントバスを選択します。最後に、AWS CloudFormation テンプレートを使用し、必要なリソースを作成して接続を完了します。
現在、Lambda 関数 URL を使用して EventBridge で利用できる SaaS プロバイダーは以下のとおりです。
-
GitHub
-
Twilio
トピック
ステップ 2: AWS CloudFormation スタックを作成する
最初に、Amazon EventBridge コンソールを使用して CloudFormation スタックを作成します。
Amazon EventBridge コンソール (https://console.aws.amazon.com/events/
) を開きます。 -
ナビゲーションペインで、[Quick starts] (クイックスタート) を選択します。
-
[Inbound webhooks using Lambda fURLs] (Lambda fURL を使用したインバウンドウェブフック) で、[Get started] (使用を開始する) を選択します。
-
[GitHub] で、[Set up] (設定) を選択します。
-
[Step 1: Select an event bus] (ステップ 1: イベントバスを選択する) で、ドロップダウンリストからイベントバスを選択します。このイベントバスは、GitHub に指定した Lambda 関数 URL からデータを受け取ります。[New event bus] (新しいイベントバス) を選択して、イベントバスを作成することもできます。
-
[ステップ 2: CloudFormation を使用してセットアップする] で、[新しい GitHub ウェブフック] を選択します。
-
[I acknowledge that the Inbound Webhook I create will be publicly accessible] (作成したインバウンドウェブフックが一般公開されることを承認します) を選択し、[Confirm] (確認) を選択します。
-
スタックの名前を入力します。
-
パラメータの下に正しいイベントバスが表示されていることを確認し、GitHubWebhookSecret の安全なトークンを指定します。安全なトークンの作成の詳細については、GitHub ドキュメントの「シークレットトークンを設定する
」を参照してください。 -
[Capabilities and transforms] (機能と変換) で、以下のそれぞれを選択します。
-
AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。
-
AWS CloudFormation によってカスタム名がついた IAM リソースが作成される場合があることを承認します。
-
[AWS CloudFormation では
CAPABILITY_AUTO_EXPAND
という機能が必要になる場合があることを承認します]
-
-
[スタックの作成] を選択します。
ステップ 3: GitHub ウェブフックを作成する
次に、GitHub でウェブフックを作成します。このステップを完了するには、ステップ 2 で作成した安全なトークンと Lambda 関数 URL の両方が必要です。詳細については、GitHub ドキュメントの「ウェブフックの作成
Twilio への接続をセットアップする
ステップ 1: Twilio Auth トークンを見つける
Twilio と EventBridge の間の接続をセットアップするには、まず Twilio アカウントで Auth トークンまたはシークレットを使用して Twilio への接続をセットアップします。詳細については、Twilio ドキュメントで「Auth トークンとその変更方法
ステップ 3: AWS CloudFormation スタックを作成する
Amazon EventBridge コンソール (https://console.aws.amazon.com/events/
) を開きます。 -
ナビゲーションペインで、[Quick starts] (クイックスタート) を選択します。
-
[Inbound webhooks using Lambda fURLs] (Lambda fURL を使用したインバウンドウェブフック) で、[Get started] (使用を開始する) を選択します。
-
[Twilio] で、[Set up] (設定) を選択します。
-
[Step 1: Select an event bus] (ステップ 1: イベントバスを選択する) で、ドロップダウンリストからイベントバスを選択します。このイベントバスは、Twilio に指定した Lambda 関数 URL からデータを受け取ります。[New event bus] (新しいイベントバス) を選択して、イベントバスを作成することもできます。
-
[ステップ 2: CloudFormation を使用してセットアップする] で、[新しい Twilio ウェブフック] を選択します。
-
[I acknowledge that the Inbound Webhook I create will be publicly accessible] (作成したインバウンドウェブフックが一般公開されることを承認します) を選択し、[Confirm] (確認) を選択します。
-
スタックの名前を入力します。
-
パラメータの下に正しいイベントバスが表示されていることを確認し、ステップ 1 で作成した TwilioWebhookSecret を入力します。
-
[Capabilities and transforms] (機能と変換) で、以下のそれぞれを選択します。
-
AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。
-
AWS CloudFormation によってカスタム名がついた IAM リソースが作成される場合があることを承認します。
-
CAPABILITY_AUTO_EXPAND という機能が AWS CloudFormation に求められる場合があることを承認します
-
-
[スタックの作成] を選択します。
ステップ 3: Twilio ウェブフックを作成する
Lambda 関数 URL を設定したら、それを Twilio に渡してイベントデータを送信できるようにする必要があります。詳細については、Twilio ドキュメントで「Twilio でパブリック URL を設定する
ウェブフックまたは Auth トークンを更新する
GitHub シークレットを更新する
注記
GitHub では、2 つのシークレットを同時に持つことをサポートしていません。GitHub シークレットと AWS CloudFormation スタックのシークレットが同期されていない間は、リソースのダウンタイムが発生する可能性があります。シークレットが同期されていない間に送信された GitHub メッセージは、署名が正しくないために失敗します。GitHub と CloudFormation のシークレットが同期するまで待ってから、もう一度試してください。
-
新しい GitHub シークレットを作成する 詳細については、GitHub ドキュメントの「暗号化されたシークレット
」を参照してください。 https://console.aws.amazon.com/cloudformation
で AWS CloudFormation コンソール を開きます。 -
ナビゲーションペインで [Stacks] (スタック) を選択します。
-
更新するシークレットが含まれているウェブフックでスタックを選択します。
-
[Update] (更新) を選択します。
-
[Use current template] (現在のテンプレートの使用) が選択されていることを確認し、[Next] (次へ) を選択します。
-
[GitHubWebhookSecret] で、[Use existing value] (既存の値の使用) をオフにし、ステップ 1 で作成した新しい GitHub シークレットを入力して、[Next] (次へ) を選択します。
-
[Next] を選択します。
-
[Update stack] (スタックの更新) を選択します。
シークレットが伝播されるまでに最大で 1 時間かかる場合があります。このダウンタイムを減らすには、Lambda 実行コンテキストを更新できます。
Twilio シークレットを更新する
注記
Twilio は、2 つのシークレットを同時に持つことをサポートしていません。Twilio シークレットと AWS CloudFormation スタックのシークレットが同期されていない間は、リソースのダウンタイムが発生する可能性があります。シークレットが同期されていない間に送信された Twilio メッセージは、署名が正しくないために失敗します。Twilio と CloudFormation のシークレットが同期するまで待ってから、もう一度試してください。
-
新しい Twilio シークレットを作成する 詳細については、Twilio ドキュメントで「Auth トークンとその変更方法
」を参照してください。 https://console.aws.amazon.com/cloudformation
で AWS CloudFormation コンソール を開きます。 -
ナビゲーションペインで [Stacks] (スタック) を選択します。
-
更新するシークレットが含まれているウェブフックでスタックを選択します。
-
[Update] (更新) を選択します。
-
[Use current template] (現在のテンプレートの使用) が選択されていることを確認し、[Next] (次へ) を選択します。
-
[TwilioWebhookSecret] で、[Use existing value] (既存の値の使用) をオフにし、ステップ 1 で作成した新しい Twilio シークレットを入力して、[Next] (次へ) を選択します。
-
[Next] を選択します。
-
[Update stack] (スタックの更新) を選択します。
シークレットが伝播されるまでに最大で 1 時間かかる場合があります。このダウンタイムを減らすには、Lambda 実行コンテキストを更新します。
Lambda 関数を更新する
CloudFormation スタックによって作成された Lambda 関数は、基本的なウェブフックを作成します。カスタマイズされたログ記録など、特定のユースケースに合わせて Lambda 関数をカスタマイズする場合は、CloudFormation コンソールを使用して関数にアクセスし、Lambda コンソールを使用して Lambda 関数コードを更新します。
Lambda 関数にアクセスする
https://console.aws.amazon.com/cloudformation
で AWS CloudFormation コンソール を開きます。 -
ナビゲーションペインで [Stacks] (スタック) を選択します。
-
更新する Lambda 関数が含まれているウェブフックでスタックを選択します。
-
[Resources] (リソース) タブを選択します。
-
Lambda コンソールで Lambda 関数を開くには、[Physical ID] (物理 ID) で、Lambda 関数の ID を選択します。
Lambda 関数にアクセスしたら、Lambda コンソールを使用して関数コードを更新します。
Lambda 関数コードを更新する
-
[Actions] (アクション) で、[Export function] (関数のエクスポート) を選択します。
-
[Download deployment package] (デプロイパッケージのダウンロード) を選択し、ファイルをコンピュータに保存します。
-
デプロイパッケージの .zip ファイルを解凍して、
app.py
ファイルを更新し、更新したデプロイパッケージを圧縮します。元の .zip ファイル内のすべてのファイルが含まれていることを確認してください。 -
Lambda コンソールで、[Code] (コード) タブを選択します。
-
[Code source (コードソース)] で、[Upload from (アップロード元)] を選択します。
-
[.zip file (.zip ファイル)]、[Upload (アップロード) ] の順に選択します。
ファイルの選択画面で、更新するファイルを選択し、[Open] (開く)、[Save] (保存) の順に選択します。
-
[Actions] (アクション) メニューで、[Publish new version] (新しいバージョンを発行) を選択します。
利用可能なイベントタイプ
CloudFormation イベントバスで現在サポートしているイベントタイプは以下のとおりです。
-
GitHub - すべてのイベントタイプ
をサポートしています。 -
Twilio - イベント後のウェブフック
をサポートしています。
クォータ、エラーコード、配信の再試行
クォータ
ウェブフックへの受信リクエストの数は、基になる AWS のサービスによって制限されます。次の表に関連するクォータを示します。
サービス | クォータ |
---|---|
AWS Lambda |
デフォルト: 10 件の同時実行 クォータの引き上げのリクエストを含む、クォータの詳細については、「Lambda のクォータ」を参照してください。 |
AWS Secrets Manager |
デフォルト: 1 秒あたり 5,000 個のリクエスト クォータの引き上げのリクエストを含む、クォータの詳細については、「AWS Secrets Manager のクォータ」を参照してください。 注記1 秒あたりのリクエスト数は、AWS Secrets Manager Python キャッシュクライアント |
Amazon EventBridge |
PutEvents アクションの最大エントリサイズは 256 KB です。 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ドキュメントを参照してください。
-
組織 - 組織ウェブフックの配信を再配信する
-
リポジトリ - リポジトリウェブフックの配信を再配信する
-
アプリケーション - アプリウェブフックの配信を再配信
Twilio
Twilio ユーザーは、接続の上書きを使用してイベント再試行オプションをカスタマイズできます。詳細については、Twilio ドキュメントの「Webhooks (HTTP callbacks): Connection Overrides