
【VPC外リージョンサービス】
EventBridge は、サーバーレスの Event Bus(イベントバス) サービスです。
AWS Service Events(AWSサービスイベント)、Partner Events(パートナーイベント)、および Custom Events(カスタムイベント) を統合的に受け取ることができます。また、アプリケーションから PutEvents API を使用して独自の Event を送信することも可能です。
受信したEvent(イベント) は、Event Pattern(イベントパターン) を定義した Rule(ルール) に基づいて評価され、指定された Target(ターゲット) へルーティングされます。 Target には、Lambda、Step Functions、SNS、SQS、ECS、EKS、Kinesis Data Streams/Firehose、および外部API連携を行う API Destination などを指定することができます。
EventBridge は、Schema Registry(スキーマレジストリ) によりイベント構造をスキーマとして自動検出・管理し、型定義に基づいた開発を支援します。さらに、Event Archive(イベントアーカイブ) によって過去のイベントを保存し、Event Replay(イベント再送信) を利用して再処理やテストに活用することができます。また、イベント処理に失敗した場合には DLQ(Dead Letter Queue) に退避し、再試行や原因分析を行うことが可能です。
EventBridge は疎結合でスケーラブルなイベント駆動アーキテクチャを容易に実現し、監査・再処理・SaaS統合など多様なユースケースに柔軟に対応します。
重要用語
ユースケース
| イベント駆動の運用自動化 | EC2インスタンスの状態変化やスケジュール(cron)などをトリガーにしてLambdaやSSM Automationを起動し、障害対応や定期処理を自動化する。 |
| SaaSとのイベント連携 | ZendeskやGitHubなどのSaaSアプリからのイベントを受け取り、チケット作成や通知、社内システムとの連携フローを構築する。 |
| マイクロサービス間の疎結合連携 | 注文完了やユーザー登録などのビジネスイベントをバスに流し、複数のサービスがそれぞれ必要な処理をサブスクライブする形で連携させる。 |
ベストプラクティス
| 疎結合なイベント設計 | イベント駆動でサービス間を連携し、依存関係を減らす。 |
| デッドレターキューの設定 | 配信失敗イベントをSQSなどに退避し、再処理や調査を可能にする。 |
| スキーマレジストリの利用 | イベントスキーマを管理し、契約ベースの開発を促進する。 |
高可用性・バックアップ・リトライ
| 高可用性・バックアップ・リトライ設計のポイント |
|---|
| 【デフォルト】AWS内部で冗長化 ・イベントバス(Event Bus) ・ルール処理エンジン ・イベントの一時保存層 ・配信メカニズム |
| 【自動リトライ 】デフォルトでオン ターゲットへの配信を最大24時間、指数バックオフで自動リトライ |
セキュリティ
| 関連サービス | 設定内容 |
|---|---|
| KMS(データの暗号化と鍵の安全管理) | 【イベントデータをKMSで暗号化が必要】 独自KMSキーを使うことを推奨(鍵操作、監査) |
| Secrets Manager(機密情報の安全管理) | - |
| SSM Parameter Store(設定情報の一元管理) | - |
| CloudTrail(操作履歴の記録・監査・追跡) | 【自動記録】 作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI) データ操作は追跡できない(データプレーンAPI) |
| Config(リソースの構成状態・設定変更を記録) | 【Configが有効な場合】 ルール/バス設定の変更履歴・DLQ/暗号化準拠評価(対象に限る) |
| GuardDuty(脅威を自動検出) | 【GuardDutyが有効な場合】 ルール追加・削除などのAPI異常検知 |
EventBridge が実行ロールを引き受ける典型的な連携パターン
| 実行ロールの連携先サービス | 実行ロールにアタッチするポリシー |
|---|---|
| CloudWatch Logs | logs:CreateLogGroup logs:CreateLogStream logs:PutLogEvents |
| ECS | ecs:RunTask iam:PassRole |
| EC2 | ec2:StopInstances ec2:StartInstances ec2:RebootInstances |
| DynamoDB | dynamodb:GetItem dynamodb:PutItem dynamodb:UpdateItem dynamodb:DeleteItem dynamodb:Query dynamodb:Scan |
| S3 | s3:ListBucket s3:GetObject s3:PutObject s3:DeleteObject |
| Lambda | lambda:InvokeFunction |
| Step Functions | states:StartExecution |
| SQS(送信) | sqs:SendMessage |
| SNS | sns:Publish |
| Kinesis Data Streams | kinesis:PutRecord kinesis:PutRecords |
| Kinesis Data Firehose | firehose:PutRecord firehose:PutRecordBatch |
| CodePipeline | codepipeline:StartPipelineExecution |
| CodeBuild | codebuild:StartBuild |
| EventBridge | events:PutEvents |
| EventBridge Scheduler | scheduler:CreateSchedule scheduler:UpdateSchedule scheduler:DeleteSchedule |
| Glue | glue:StartJobRun |
| Batch | batch:SubmitJob |
| API Gateway | execute-api:Invoke |
| Backup | backup:StartBackupJob |
| Redshift Data API | redshift-data:ExecuteStatement |
| Inspector | inspector2:StartAssessmentRun |
| SageMaker | sagemaker:StartPipelineExecution |
| Secrets Manager | secretsmanager:RotateSecret |
| SSM Parameter Store | ssm:PutParameter |
| SSM Run Command | ssm:SendCommand |
| SSM Automation | ssm:StartAutomationExecution iam:PassRole |
信頼ポリシー: EventBridge
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
リソースベースポリシーによる補完
実行ロールで不足する権限をEventBridge のリソースベースポリシーで補うパターン
| リソースベースポリシーのPrincipal | リソースベースポリシーのAction |
|---|---|
| 【他のAWSアカウント】 arn:aws:iam::123456789012:root | events:PutEvents |
| 【Organizations】 *(条件付き) | events:PutEvents |
| 【SaaSパートナー】 events.amazonaws.com | events:PutEvents |
ログ・監視
| ログ出力先 | ログの種類 |
|---|---|
| CloudWatch Logs | イベント配信ログ |
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| Invocations | ターゲット呼び出し回数 |
| MatchedEvents | ルールにマッチしたイベント数 |
| TriggeredRules | トリガーされたルール数 |
| DLQDeliveryFailed | DLQ配信失敗数 |
| DroppedEvents | ドロップされたイベント数 |
| FailedInvocations | 失敗した呼び出し回数 |
| FailedInvocationsToDLQ | DLQへの書き込み失敗数 |
| InvocationsThrottled | スロットルされた呼び出し数 |
| RuleProcessingFailed | ルール処理の失敗数 |
| ThrottledRules | スロットルされたルール数 |
制限値(固定値/ハードリミット/ソフトリミット)
| 固定値 | 制限値 |
|---|---|
| スケジュール式の数 | 制限なし(ルール内) |
| ハードリミット | 制限値 |
|---|---|
| イベントサイズ | 256 KB |
| イベントバッチサイズ | 10イベント |
| ソフトリミット | 制限値 |
|---|---|
| ルール数/イベントバス | 300 |
| イベントバス数/アカウント | 100 |
| ターゲット数/ルール | 5 |
| PutEvents スループット | 10,000 RPS(デフォルト) |
AWS CLIのサンプルコード

パターン1: EC2状態変更 → Lambda
実行ロールを作成する(信頼ポリシーのファイル名 指定)
eventbridge-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name EventBridgeToLambdaRole \
--assume-role-policy-document file://eventbridge-trust-policy.json
実行ロールを表示する
aws iam list-roles
実行ロールを削除する(実行ロール名 指定)
aws iam list-attached-role-policies \
--role-name EventBridgeToLambdaRole
実行ロールにAWS管理ポリシーをアタッチする(実行ロール名、ポリシーのARN 指定)
aws iam attach-role-policy \
--role-name EventBridgeToLambdaRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
実行ロールからAWS管理ポリシーをデタッチする(実行ロール名、ポリシーのARN 指定)
aws iam detach-role-policy \
--role-name EventBridgeToLambdaRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
イベントルールを作成する(イベントパターンファイル名 指定)
ec2-state-change.json
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["running", "stopped", "terminated"]
}
}
aws events put-rule \
--name ec2-state-change-rule \
--event-pattern file://event-patterns/ec2-state-change.json
イベントルールを表示する
aws events list-rules
イベントルールを削除する(ルール名 指定)
aws events delete-rule \
--name ec2-state-change-rule
EventBridge がLambda関数を呼び出すことを許可するリソースベースポリシーを作成する
(Lambda関数名、EventBridgeのARN 指定)
aws lambda add-permission \
--function-name my-ec2-handler \
--statement-id AllowEventBridgeInvoke \
--action lambda:InvokeFunction \
--principal events.amazonaws.com \
--source-arn arn:aws:events:ap-northeast-1:123456789012:rule/ec2-state-change-rule
リソースベースポリシーを表示する(Lambda関数名 指定)
aws lambda get-policy \
--function-name my-ec2-handler
リソースベースポリシーを削除する
(Lambda関数名、ステートメントID 指定)
aws lambda remove-permission \
--function-name my-ec2-handler \
--statement-id AllowEventBridgeInvoke
ターゲットを追加する(ルール名、ターゲットファイル名 指定)
lambda-target.json
[
{
"Id": "1",
"Arn": "arn:aws:lambda:ap-northeast-1:123456789012:function:my-ec2-handler",
"Input": "{\"notification_type\": \"ec2_state_change\"}"
}
]
aws events put-targets \
--rule ec2-state-change-rule \
--targets file://targets/lambda-target.json
ターゲットを表示する(ルール名 指定)
aws events list-targets-by-rule \
--rule ec2-state-change-rule
ターゲットを削除する(ルール名 ターゲットID 指定)
aws events remove-targets \
--rule ec2-state-change-rule \
--ids "1"
パターン2: ECSタスク状態変更 → SNS
SNSトピックを作成する
aws sns create-topic \
--name ecs-task-notifications
EventBridge がSNSを呼び出すことを許可するリソースベースポリシーを作成する
(SNSトピックのARN、ポリシーファイル名 指定)
sns-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowEventBridgeToPublish",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:ap-northeast-1:123456789012:ecs-task-notifications"
}
]
}
aws sns set-topic-attributes \
--topic-arn arn:aws:sns:ap-northeast-1:123456789012:ecs-task-notifications \
--attribute-name Policy \
--attribute-value file://sns-policy.json
イベントルールを作成する(イベントパターンファイル名 指定)
ecs-task-state-change.json
{
"source": ["aws.ecs"],
"detail-type": ["ECS Task State Change"],
"detail": {
"lastStatus": ["STOPPED"],
"stoppedReason": ["Essential container in task exited"]
}
}
aws events put-rule \
--name ecs-task-state-change-rule \
--event-pattern file://event-patterns/ecs-task-state-change.json
ターゲットを追加する(ルール名、ターゲットファイル名 指定)
targets/sns-target.json
[
{
"Id": "1",
"Arn": "arn:aws:sns:ap-northeast-1:123456789012:ecs-task-notifications",
"InputTransformer": {
"InputPathsMap": {
"taskArn": "$.detail.taskArn",
"stoppedReason": "$.detail.stoppedReason",
"clusterArn": "$.detail.clusterArn"
},
"InputTemplate": "\"ECSタスクが停止しました。\\nタスクARN: <taskArn>\\n理由: <stoppedReason>\\nクラスター: <clusterArn>\""
}
}
]
aws events put-targets \
--rule ecs-task-state-change-rule \
--targets file://targets/sns-target.json
パターン3: S3オブジェクト作成 → SQS
SQSキューを作成する
aws sqs create-queue \
--queue-name s3-event-queue
EventBridge がSQSを呼び出すことを許可するリソースベースポリシーを作成する
(SQSキューのURL、ポリシーファイル名 指定)
sqs-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowEventBridgeToSendMessage",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "SQS:SendMessage",
"Resource": "arn:aws:sqs:ap-northeast-1:123456789012:s3-event-queue",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:events:ap-northeast-1:123456789012:rule/s3-object-created-rule"
}
}
}
]
}
aws sqs set-queue-attributes \
--queue-url https://sqs.ap-northeast-1.amazonaws.com/123456789012/s3-event-queue \
--attributes file://sqs-policy.json
S3バケットでEventBridge通知を有効化する
(S3バケット名、S3通知設定ファイル 指定)
s3-notification-config.json
{
"EventBridgeConfiguration": {}
}
aws s3api put-bucket-notification-configuration \
--bucket my-source-bucket \
--notification-configuration file://s3-notification-config.json
イベントルールを作成する(イベントパターンファイル名)
s3-object-created.json
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["my-source-bucket"]
},
"object": {
"key": [{
"prefix": "uploads/"
}]
}
}
}
aws events put-rule \
--name s3-object-created-rule \
--event-pattern file://event-patterns/s3-object-created.json
ターゲットを追加する(ルール名、ターゲットファイル名 指定)
targets/sqs-target.json
[
{
"Id": "1",
"Arn": "arn:aws:sqs:ap-northeast-1:123456789012:s3-event-queue"
}
]
aws events put-targets \
--rule s3-object-created-rule \
--targets file://targets/sqs-target.json
パターン4: CloudTrail (API呼び出し) → Lambda
CloudTrailの設定を確認する
CloudTrailが有効で、EventBridgeと統合されていることを確認する
実行ロールを作成する(信頼ポリシーのファイル名 指定)
eventbridge-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name EventBridgeToLambdaRole \
--assume-role-policy-document file://eventbridge-trust-policy.json
イベントルールを作成する(イベントパターンファイル名 指定)
cloudtrail-s3-delete.json
{
"source": ["aws.s3"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": ["s3.amazonaws.com"],
"eventName": ["DeleteBucket", "DeleteBucketPolicy"]
}
}
aws events put-rule \
--name cloudtrail-s3-delete-rule \
--event-pattern file://event-patterns/cloudtrail-s3-delete.json
EventBridge がLambda関数を呼び出すことを許可するリソースベースポリシーを作成する
(Lambda関数名、EventBridgeのARN 指定)
aws lambda add-permission \
--function-name security-alert-handler \
--statement-id AllowEventBridgeInvokeFromCloudTrail \
--action lambda:InvokeFunction \
--principal events.amazonaws.com \
--source-arn arn:aws:events:ap-northeast-1:123456789012:rule/cloudtrail-s3-delete-rule
ターゲットを追加する(ターゲットファイル名 指定)
lambda-security-target.json
[
{
"Id": "1",
"Arn": "arn:aws:lambda:ap-northeast-1:123456789012:function:security-alert-handler"
}
]
aws events put-targets \
--rule cloudtrail-s3-delete-rule \
--targets file://targets/lambda-security-target.json
パターン5: CodePipeline状態変更 → Step Functions
実行ロールを作成する(信頼ポリシーのファイル名 指定)
eventbridge-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name EventBridgeToStepFunctionsRole \
--assume-role-policy-document file://eventbridge-trust-policy.json
カスタム管理ポリシーを作成する(ポリシーファイル名 指定)
stepfunctions-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"states:StartExecution"
],
"Resource": "arn:aws:states:ap-northeast-1:123456789012:stateMachine:pipeline-notification-workflow"
}
]
}
aws iam create-policy \
--policy-name StepFunctionsExecutionPolicy \
--policy-document file://stepfunctions-policy.json
実行ロールにカスタム管理ポリシーをアタッチする(実行ロール名、ポリシーのARN 指定)
aws iam attach-role-policy \
--role-name EventBridgeToStepFunctionsRole \
--policy-arn arn:aws:iam::123456789012:policy/StepFunctionsExecutionPolicy
イベントルールを作成する(イベントパターンファイル名 指定)
codepipeline-state-change.json
{
"source": ["aws.codepipeline"],
"detail-type": ["CodePipeline Pipeline Execution State Change"],
"detail": {
"state": ["SUCCEEDED", "FAILED"],
"pipeline": ["my-application-pipeline"]
}
}
aws events put-rule \
--name codepipeline-state-change-rule \
--event-pattern file://event-patterns/codepipeline-state-change.json
ターゲットを追加する(ターゲットファイル名 指定)
stepfunctions-target.json
[
{
"Id": "1",
"Arn": "arn:aws:states:ap-northeast-1:123456789012:stateMachine:pipeline-notification-workflow",
"RoleArn": "arn:aws:iam::123456789012:role/EventBridgeToStepFunctionsRole",
"Input": "{\"pipeline_name\": \"my-application-pipeline\", \"notification_enabled\": true}"
}
]
aws events put-targets \
--rule codepipeline-state-change-rule \
--targets file://targets/stepfunctions-target.json
パターン6: S3オブジェクト作成 → ECSタスク起動
実行ロールを作成する(信頼ポリシーのファイル名 指定)
eventbridge-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name EventBridgeToECSRole \
--assume-role-policy-document file://eventbridge-trust-policy.json
カスタム管理ポリシーを作成する(ポリシーファイル名 指定)
ecs-execution-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunTask"
],
"Resource": "arn:aws:ecs:ap-northeast-1:123456789012:task-definition/data-processing-task:*"
},
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
"arn:aws:iam::123456789012:role/ecsTaskRole"
]
}
]
}
aws iam create-policy \
--policy-name ECSTaskExecutionPolicy \
--policy-document file://ecs-execution-policy.json
実行ロールにカスタム管理ポリシーをアタッチする(実行ロール名、ポリシーのARN 指定)
aws iam attach-role-policy \
--role-name EventBridgeToECSRole \
--policy-arn arn:aws:iam::123456789012:policy/ECSTaskExecutionPolicy
S3バケットでEventBridge通知を有効化する
(S3バケット名、S3通知設定ファイル 指定)
s3-notification-config.json
{
"EventBridgeConfiguration": {}
}
aws s3api put-bucket-notification-configuration \
--bucket my-data-bucket \
--notification-configuration file://s3-notification-config.json
イベントルールを作成する(イベントパターンファイル名 指定)
s3-data-upload.json
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["my-data-bucket"]
},
"object": {
"key": [{
"suffix": ".csv"
}]
}
}
}
aws events put-rule \
--name s3-data-processing-rule \
--event-pattern file://event-patterns/s3-data-upload.json
ターゲットを追加する(ターゲットファイル名)
ecs-task-target.json
[
{
"Id": "1",
"Arn": "arn:aws:ecs:ap-northeast-1:123456789012:cluster/data-processing-cluster",
"RoleArn": "arn:aws:iam::123456789012:role/EventBridgeToECSRole",
"EcsParameters": {
"TaskDefinitionArn": "arn:aws:ecs:ap-northeast-1:123456789012:task-definition/data-processing-task:3",
"TaskCount": 1,
"LaunchType": "FARGATE",
"NetworkConfiguration": {
"awsvpcConfiguration": {
"Subnets": [
"subnet-0123456789abcdef0",
"subnet-0123456789abcdef1"
],
"SecurityGroups": [
"sg-0123456789abcdef0"
],
"AssignPublicIp": "DISABLED"
}
},
"PlatformVersion": "LATEST"
},
"InputTransformer": {
"InputPathsMap": {
"bucket": "$.detail.bucket.name",
"key": "$.detail.object.key"
},
"InputTemplate": "{\"containerOverrides\": [{\"name\": \"data-processor\",\"environment\": [{\"name\": \"S3_BUCKET\",\"value\": \"<bucket>\"},{\"name\": \"S3_KEY\",\"value\": \"<key>\"}]}]}"
}
}
]
aws events put-targets \
--rule s3-data-processing-rule \
--targets file://targets/ecs-task-target.json
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| カスタムイベント | 発行されるカスタムイベント数 |
| クロスリージョン | クロスリージョン、クロスアカウント転送 |
| スキーマレジストリ | スキーマレジストリの使用 |
| API Destinations | API Destinationsへの呼び出し |