📋
このガイドの内容
このインフォグラフィックでは、AWS EventBridgeの基本概念から、API宛先機能、そして入力トランスフォーマー機能の使い方までを解説します。初心者の方でも理解しやすいように、視覚的な例と実際のユースケースを交えて説明していきます。
EventBridgeとは?
AWS EventBridgeは、アプリケーションコンポーネントを接続するサーバーレスのイベントバスサービスです。イベント駆動型アーキテクチャを簡単に構築できます。
📤
イベントソース
AWSサービス、自社アプリ、SaaSアプリからイベント発生
→
🔄
イベントバス
イベントをルーティングする中央ハブ
→
→
ポイント:
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"
入力トランスフォーマーは、EventBridgeのルールが受け取ったイベントデータを、ターゲットが必要とする形式に変換する機能です。JSONパスを使用して元のイベントからデータを抽出し、新しいJSONを作成します。
🔍
元のイベントから必要なデータを抽出するためのJSONパス式を定義します。
🔄
抽出したデータを使って新しい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宛先
入力トランスフォーマー
サーバーレス
イベント駆動型