AWS EventBridge API宛先と入力トランスフォーマー機能

イベント駆動型アーキテクチャを簡単に構築するための基礎ガイド

📋

このガイドの内容

このインフォグラフィックでは、AWS EventBridgeの基本概念から、API宛先機能、そして入力トランスフォーマー機能の使い方までを解説します。初心者の方でも理解しやすいように、視覚的な例と実際のユースケースを交えて説明していきます。

EventBridgeとは?

AWS EventBridgeは、アプリケーションコンポーネントを接続するサーバーレスのイベントバスサービスです。イベント駆動型アーキテクチャを簡単に構築できます。

📤

イベントソース
AWSサービス、自社アプリ、SaaSアプリからイベント発生

🔄

イベントバス
イベントをルーティングする中央ハブ

🎯

ルール
どのイベントをどこに送るかを定義

📡

ターゲット
AWSサービスやカスタムAPI

ポイント: EventBridgeは「イベント」を中心に設計されています。イベントとは、環境の変化を記述するJSONオブジェクトのことです。例えば、EC2インスタンスの状態変化、S3バケットへのファイルアップロード、カスタムアプリケーションからの通知などです。

API宛先(API Destinations)とは?

API宛先は、EventBridgeからHTTP APIエンドポイントにイベントを直接送信できる機能です。これにより、AWS外部のサービスやアプリケーションと簡単に連携できます。

主な特徴

  • HTTP(REST)エンドポイントにイベントを送信
  • 認証方法としてOAuth、API キー、基本認証をサポート
  • リトライ回数やレート制限などの設定が可能
  • API Gateway経由せずに直接外部APIに接続可能

利用シナリオ

✅ SaaSプラットフォームとの連携(Slack、Jira、Zendesk等)
✅ 社内マイクロサービスへのイベント通知
✅ パートナー企業のAPIとの連携
✅ ウェブフックをサポートするあらゆるサービスとの統合

API宛先の設定手順

🔑

接続の作成
認証情報と認証タイプを設定

🌐

API宛先の定義
エンドポイントURLとHTTPメソッドを指定

⚙️

ルールの作成
イベントパターンの定義

🔗

ターゲットに設定
作成したAPI宛先をターゲットに指定

# AWS CLIでのAPI宛先作成例 aws events create-connection \ --name "my-slack-connection" \ --authorization-type "API_KEY" \ --auth-parameters '{"ApiKey": {"Key": "x-api-key", "Value": "your-api-key-value"}}' aws events create-api-destination \ --name "slack-notification" \ --connection-arn "arn:aws:events:region:account-id:connection/my-slack-connection" \ --invocation-endpoint "https://hooks.slack.com/services/T00000/B00000/XXXXX" \ --http-method "POST"

入力トランスフォーマー(Input Transformer)とは?

入力トランスフォーマーは、EventBridgeのルールが受け取ったイベントデータを、ターゲットが必要とする形式に変換する機能です。JSONパスを使用して元のイベントからデータを抽出し、新しいJSONを作成します。

🔍

入力パス(Input Path)

元のイベントから必要なデータを抽出するためのJSONパス式を定義します。

🔄

入力テンプレート(Input Template)

抽出したデータを使って新しいJSON構造を定義します。

入力トランスフォーマーの使用例

S3バケットに新しいファイルがアップロードされたイベントを、SlackのWebhookに送信する例を見てみましょう:

# 元のS3イベント(一部) { "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "Object Created", "source": "aws.s3", "account": "123456789012", "time": "2021-11-12T00:00:00Z", "region": "ap-northeast-1", "detail": { "bucket": { "name": "my-bucket" }, "object": { "key": "uploads/document.pdf", "size": 1024 } } } # 入力パス { "bucketName": "$.detail.bucket.name", "objectKey": "$.detail.object.key", "objectSize": "$.detail.object.size", "eventTime": "$.time" } # 入力テンプレート(Slack用に整形) { "text": "S3バケット に新しいファイルがアップロードされました!\n- ファイル名: \n- サイズ: バイト\n- 時間: " }

ポイント: 入力トランスフォーマーを使うことで、イベントプロデューサー(S3)とコンシューマー(Slack)の間のデータフォーマットの違いを解決できます。変換はサーバーレスで行われるため、追加のコードを書く必要がありません。

API宛先と入力トランスフォーマーの組み合わせ

API宛先と入力トランスフォーマーを組み合わせることで、強力なイベント駆動型のワークフローを構築できます。以下のユースケースを見てみましょう。

実践ユースケース: EC2インスタンス状態変更をTeamsに通知

💻

EC2インスタンス
状態が変化(起動/停止など)

📬

EventBridge
イベントを受信し、ルールに従って処理

🔄

入力トランスフォーマー
データをTeams形式に変換

📡

API宛先
TeamsのWebhookにPOSTリクエスト

# EventBridgeルールの定義例(AWS CloudFormation) Resources: TeamsConnection: Type: AWS::Events::Connection Properties: AuthorizationType: API_KEY AuthParameters: ApiKey: Key: "Content-Type" Value: "application/json" TeamsApiDestination: Type: AWS::Events::ApiDestination Properties: ConnectionArn: !GetAtt TeamsConnection.Arn InvocationEndpoint: "https://yourcompany.webhook.office.com/webhookb2/..." HttpMethod: "POST" InvocationRateLimitPerSecond: 5 EC2StateChangeRule: Type: AWS::Events::Rule Properties: EventPattern: source: - "aws.ec2" detail-type: - "EC2 Instance State-change Notification" Targets: - Id: "TeamsNotification" Arn: !GetAtt TeamsApiDestination.Arn InputTransformer: InputPathsMap: "instanceId": "$.detail.instance-id" "state": "$.detail.state" "region": "$.region" "time": "$.time" InputTemplate: | { "type": "message", "attachments": [{ "contentType": "application/vnd.microsoft.card.adaptive", "content": { "type": "AdaptiveCard", "body": [{ "type": "TextBlock", "size": "Medium", "weight": "Bolder", "text": "EC2インスタンス状態変更通知" }, { "type": "FactSet", "facts": [{ "title": "インスタンスID:", "value": " " }, { "title": "新しい状態:", "value": " " }, { "title": "リージョン:", "value": " " }, { "title": "時間:", "value": "

ベストプラクティスと注意点

API宛先のベストプラクティス

  • 適切な認証方法の選択(OAuth推奨)
  • リトライポリシーとレート制限の設定
  • 接続を複数のAPI宛先で再利用
  • エンドポイントのヘルスチェックの実装

入力トランスフォーマーのコツ

  • JSONパス式のテスト(EventBridgeコンソールで可能)
  • 必要なデータのみを抽出して変換
  • エラーハンドリングの考慮(不正な形式のイベント対策)
  • テンプレート内で条件分岐を使用(可能な場合)

よくある問題と解決策

問題 考えられる原因 解決策
API宛先にイベントが届かない 認証情報の不一致、エンドポイントの誤り CloudWatchログで詳細を確認し、認証情報とエンドポイントを再確認
変換後のデータが正しくない JSONパス式の誤り、テンプレート構文ミス コンソールのテスト機能を使って式とテンプレートを検証
レート制限エラー API宛先への送信頻度が高すぎる InvocationRateLimitPerSecondを適切に設定、DLQの設定を検討
特定のイベントのみ処理されない イベントパターンのミスマッチ イベントパターンのテスト機能を利用して確認

まとめ

AWS EventBridgeのAPI宛先と入力トランスフォーマー機能を活用することで、以下のようなメリットが得られます:

コード不要の統合: Lambda関数を書かずに外部APIと連携可能
柔軟なデータ変換: イベントデータを必要な形式に変換
運用負荷の軽減: サーバーレスでスケーラブルな設計
コスト最適化: 不要なLambda呼び出しを削減

次のステップ: まずは小規模なユースケースから始めて、EventBridgeの機能を体験してみましょう。例えば、テスト環境でEC2の状態変更をSlackに通知するワークフローなど、シンプルな統合から始めるとよいでしょう。

EventBridge
API宛先
入力トランスフォーマー
サーバーレス
イベント駆動型

Created by SSuzuki1063

AWS SAP Learning Resources