Amazon EventBridge のイベントパターン
イベントパターンは、一致するイベントと同じ構造をしています。ルールでは、イベントパターンを使用してイベントを選択し、ターゲットに送信します。イベントパターンは、イベントに一致するか、一致しないかのいずれかになります。
重要
EventBridge では、ルールが繰り返し開始される無限ループにつながるルールが作成される可能性があります。たとえば、S3 バケットで ACL が変更されたことを検出し、ソフトウェアをトリガーして ACL を目的の状態に変更するルールがあるとします。このルールが慎重に記述されていない場合は、その後 ACL を変更するとルールが再び開始され、無限ループが作成されます。
これを防ぐには、トリガーされたアクションが同じルールを再び開始しないようにルールを記述します。たとえば、変更された後ではなく、エラー状態にある ACL が見つかった場合にのみ、ルールが開始されるようにします。
無限ループにより、予想よりも高い料金がすぐに発生する可能性があります。指定した制限を料金が超えるとアラートで知らせる予算設定を使用することをお勧めします。詳細については、「予算によるコストの管理」を参照してください。
次のビデオでは、イベントパターンの基本について説明します。
トピック
次のイベントは、Amazon EC2 からの単純な AWS イベントです。
{
"version": "0",
"id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718",
"detail-type": "EC2 Instance State-change Notification",
"source": "aws.ec2",
"account": "111122223333",
"time": "2017-12-22T18:43:48Z",
"region": "us-west-1",
"resources": [
"arn:aws:ec2:us-west-1:123456789012:instance/i-1234567890abcdef0"
],
"detail": {
"instance-id": "i-1234567890abcdef0",
"state": "terminated"
}
}
次のイベントパターンは、Amazon EC2 の instance-termination
イベントすべてを処理します。
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["terminated"]
}
}
イベントパターンの作成
イベントパターンを作成するには、イベントパターンにマッチングするイベントのフィールドを指定します。照合に使用するフィールドのみを指定します。上のイベントパターンの例では、3 つのフィールドの値しか指定していません。最上位のフィールド "source"
および "detail-type"
と、"detail"
オブジェクトフィールド内部の "state"
フィールドです。ルールを適用するとき、EventBridge はイベント内の他のフィールドはすべて無視します。
イベントパターンがイベントに一致するには、イベントパターンに指定されているすべてのフィールド名がイベントに含まれている必要があります。フィールド名は、同じネスト構造になったイベントにも含まれていなければなりません。
EventBridge は、イベントパターンに含まれていないフィールドをイベント内で無視します。実際には、*:* とワイルドカードを指定すると、イベントパターンに含まれないフィールドにも一致します。
イベントパターンが一致する値は、JSON のルールに従います。二重引用符 (") で囲んだ文字列、数値、およびキーワード true
、false
、および null
を含めることができます。
文字列の場合、Eventbridge は文字単位の厳密な一致を使用し、大文字の小文字化など文字列の正規化は行われません。
数値の場合、EventBridge は文字列表現を使用します。たとえば、300、300.0、3.0e2 は等しいとはみなされません。
イベントと一致するパターンを記述するときは、TestEventPattern
API または test-event-pattern
CLI コマンドを使用して、パターンが正しいイベントと一致することをテストできます。詳細については、「TestEventPattern」を参照してください。
EventBridge で使用できるすべての比較演算子は以下の通りです。
注記
現在、EventBridge Pipes ですべての比較演算子がサポートされているわけではありません。
比較 | 例 | ルール構文 | Pipes によるサポート |
---|---|---|---|
Null |
UserId が Null |
"UserID": [ null ] |
はい |
空 |
LastName が空白 |
"LastName": [""] |
はい |
等しい |
Name が「Alice」 |
"Name": [ "Alice" ] |
はい |
Equals (大文字と小文字を区別しない) |
Name が「Alice」 |
"Name": [ { "equals-ignore-case": "alice" } ] |
いいえ |
および |
Location が「New York」、および Day が「Monday」 |
"Location": [ "New York" ], "Day": ["Monday"] |
はい |
または |
PaymentType が「Credit」または「Debit」 |
"PaymentType": [ "Credit", "Debit"] |
はい |
Or (複数フィールド) |
Location が「New York」、または Day が「Monday」 |
"$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ] |
いいえ |
以外 |
Weather が「Raining」以外 |
"Weather": [ { "anything-but": [ "Raining" ] } ] |
はい |
数値 (等しい) |
Price が 100 |
"Price": [ { "numeric": [ "=", 100 ] } ] |
はい |
数値 (範囲) |
Price が 10 より大きく 20 以下 |
"Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ] |
はい |
存在する |
ProductName が存在 |
"ProductName": [ { "exists": true } ] |
はい |
存在しない |
ProductName が存在しない |
"ProductName": [ { "exists": false } ] |
はい |
から始まる |
Region が US にある |
"Region": [ {"prefix": "us-" } ] |
はい |
[Ends with] (次で終了) |
FileName は.png 拡張子で終わります。 |
"FileName": [ { "suffix": ".png" } ] |
いいえ |
値のマッチング
イベントパターンでマッチングする値は JSON 配列形式で、角かっこ ([ と ]) で囲むと複数の値を指定できます。例えば、Amazon EC2 または AWS Fargate からのイベントをマッチングするには、次のパターンを使用できます。このパターンは、"source"
フィールドの値が "aws.ec2"
または "aws.fargate"
のいずれかであるイベントに一致します。
{
"source": ["aws.ec2", "aws.fargate"]
}
イベントとイベントパターンの例
イベントのマッチングには、JSON のデータ型と値をすべて使用できます。以下の例は、イベントとそれに一致するイベントパターンを示しています。
フィールドのマッチング
フィールドの値でマッチングすることができます。次の Amazon EC2 Auto Scaling イベントについて考えてみましょう。
{
"version": "0",
"id": "3e3c153a-8339-4e30-8c35-687ebef853fe",
"detail-type": "EC2 Instance Launch Successful",
"source": "aws.autoscaling",
"account": "123456789012",
"time": "2015-11-11T21:31:47Z",
"region": "us-east-1",
"resources": [],
"detail": {
"eventVersion": "",
"responseElements": null
}
}
上のイベントでは、マッチングに "responseElements"
フィールドを使用できます。
{
"source": ["aws.autoscaling"],
"detail-type": ["EC2 Instance Launch Successful"],
"detail": {
"responseElements": [null]
}
}
値の一致
以下は、Amazon Macie イベントの一部です。これについて考えてみましょう。
{
"version": "0",
"id": "0948ba87-d3b8-c6d4-f2da-732a1example",
"detail-type": "Macie Finding",
"source": "aws.macie",
"account": "123456789012",
"time": "2021-04-29T23:12:15Z",
"region":"us-east-1",
"resources": [
],
"detail": {
"schemaVersion": "1.0",
"id": "64b917aa-3843-014c-91d8-937ffexample",
"accountId": "123456789012",
"partition": "aws",
"region": "us-east-1",
"type": "Policy:IAMUser/S3BucketEncryptionDisabled",
"title": "Encryption is disabled for the S3 bucket",
"description": "Encryption is disabled for the Amazon S3 bucket. The data in the bucket isn’t encrypted
using server-side encryption.",
"severity": {
"score": 1,
"description": "Low"
},
"createdAt": "2021-04-29T15:46:02Z",
"updatedAt": "2021-04-29T23:12:15Z",
"count": 2,
.
.
.
次のイベントパターンは、重要度スコアが 1 で、カウントが 2 のイベントと一致します。
{
"source": ["aws.macie"],
"detail-type": ["Macie Finding"],
"detail": {
"severity": {
"score": [1]
},
"count":[2]
}
}