

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# カスタムイベントバスでのイベントのサブスクライブ
<a name="eb-custom-bus-subscribers"></a>

サブスクライバーは、必要なイベントとその送信先を示す 1 つのリソースです。を使用して作成し`CreateSubscriber`、バス、フィルター、および 1 つのターゲットに名前を付けます。このバスを監視し、フィルタに一致するイベントを保持し、オプションで各イベントを変換して、1 つのターゲットに配信します。複数のターゲットにイベントをファンアウトするには、同じバス上のターゲットごとに 1 つのサブスクライバーを作成します。

EventBridge は、アカウントが呼び出すバスで一度に 1 人のサブスクライバーを作成または削除します。進行中の 1 秒`CreateSubscriber`または同じバス`DeleteSubscriber`上の は、 で失敗します`ConcurrentModificationException`。再試行します。[カスタムイベントバスのクォータ](eb-quota.md#eb-custom-bus-quotas) したがって、 の作成レートと削除レートはバスごとに適用されます。

## ターゲットに到達するイベントのフィルタリング
<a name="eb-custom-bus-subscribers-filter"></a>

`FilterConfiguration` は のリストを保持します`Filters`。各フィルターには`Pattern`、EventBridge イベントパターン構文の と 1 つの があります`Scope`。スコープごとに最大 1 つのフィルターを持つことができ、EventBridge はリスト内のすべてのフィルターに一致する場合にのみイベントを配信します。のないサブスクライバーは、バス上のすべてのイベント`FilterConfiguration`を受け取ります。
+ `DATA`: ペイロードと一致します。で説明されているシェイプに対してパターンを記述します[イベント構造: データ、メタデータ、システムメタデータ](eb-custom-bus-addressing.md)。
+ `METADATA`: は、プロデューサーが と設定したキーと値のペアに一致し`PutRawEvents`、完全一致のみになります。
+ `SYSTEM_METADATA`: は、 `aws:Source`や などの EventBridge セットのフィールドと一致します`EventGroupId`。

パターン構文、スコープルール、および例については、「」を参照してください[サブスクライバーのイベントのフィルタリング](eb-custom-bus-filtering.md)。

## ペイロードの変換
<a name="eb-custom-bus-subscribers-transform"></a>

`Transformer.Type` はターゲットが受け取るものを選択します。ユニバーサルターゲットは使用しません。「」を参照してください[カスタムイベントバスのユニバーサルターゲット](eb-custom-bus-universal-targets.md)。
+ `RAW`、デフォルト。ペイロードのみ。
+ `WITH_METADATA`。 完全なイベント: `Data`、`Metadata`、および `SystemMetadata`。
+ `JSONATA`。 の JSONata 式の結果`JsonataConfiguration.Expression`。`{% %}`区切り文字でラップされ、イベントは として使用できます`$events`。

EventBridge は、サブスクライバーの作成時に式の構文をチェックし、配信時に評価します。がスローする式、または値を生成しない式は、そのイベントの配信に失敗します。式に依存する前に、実際のイベントに対して式をテストします。`$events` 保持するもの、追加の関数、および制限については、「」を参照してください[JSONata を使用したイベントの変換](eb-custom-bus-transform.md)。

## 1 つのターゲットへの配信
<a name="eb-custom-bus-subscribers-deliver"></a>

`InvokeConfiguration` は`TargetArn`、EventBridge `RoleArn`がターゲットを呼び出すために引き受ける 、およびターゲットタイプに一致する最大 1 つのパラメータブロックを保持します。ほとんどのパラメータ値は JSONata 式を受け入れるため、値はイベントから取得できます。次の表に、カスタムターゲットタイプとそのパラメータブロックを示します。それぞれに の下に独自のページがあります[カスタムイベントバスサブスクライバーのターゲット](eb-custom-bus-targets.md)。


| ターゲット | パラメータブロック | 
| --- | --- | 
| Amazon SQS キュー | SqsParameters | 
| Lambda 関数 | LambdaParameters | 
| [Kinesis ストリーム] | KinesisParameters | 
| Step Functions ステートマシン | StepFunctionsParameters | 
| Amazon SNS トピック | SnsParameters | 
| HTTP エンドポイントまたは API 送信先 | HttpParameters | 
| Firehose ストリーム | FirehoseParameters | 

カスタムイベントバスまたはカスタムイベントバス - Classic をターゲットにすることもできます。バス ARN を に設定します`TargetArn`。Amazon SQS FIFO キューなどの FIFO ターゲットの場合、パラメータブロック内のターゲットの独自の重複排除識別子、例えば を`SqsParameters.MessageDeduplicationId`、JSONata 式を持つイベントから派生したメッセージごとの値に設定します。定数は、最初のメッセージの後にターゲットがすべてのメッセージを破棄します。

*ユニバーサルターゲット*は AWS API アクションを直接呼び出し、その間に関数はありません。その ARN には `arn:aws:events:::aws-sdk:{{service}}:{{apiAction}}`などの形式があり`arn:aws:events:::aws-sdk:dynamodb:putItem`、 はリクエストを JSON として、またはそれを生成する JSONata 式として`UniversalTargetParameters.Input`保持します。命名規則、バッチ処理、および障害動作については、「」を参照してください[カスタムイベントバスのユニバーサルターゲット](eb-custom-bus-universal-targets.md)。

サブスクライバーを作成すると、EventBridge は ARN からターゲットタイプを解決し、パラメータブロックがターゲットタイプと一致すること、ARN がアカウントに属していること、すべての式が解析されていることの 3 つの点をチェックします。ターゲットが存在するかどうか、ロールが到達できるかどうか、ターゲットの API が値を受け入れるかどうかは、配信時にチェックされるため、ターゲットで最初の配信を確認します。

## 再試行とデッドレターキュー
<a name="eb-custom-bus-subscribers-retry"></a>

`RetryPolicy` は、EventBridge が失敗した配信を再試行する時間を設定します。デフォルトでは 300 秒以内に 5 回試行され、再試行を枯渇させた各イベントのレコードを受け取る Amazon SQS キューに`OnFailureConfiguration.Arn`名前が付けられます。サブスクライバーを作成するときに両方を設定します。制限、レコード形式、およびリドライブ方法については、「」を参照してください[再試行ポリシーとデッドレターキュー](eb-custom-bus-retry.md)。

## 配信ロール
<a name="eb-custom-bus-subscribers-role"></a>

のロールは アカウントに属し、`events.amazonaws.com`サービスプリンシパルを信頼`RoleArn`する必要があります。発信者は、サブスクライバーを作成するためにロール`iam:PassRole`に が必要です。そうしないと、EventBridge はターゲット ARN をチェックする前にリクエストを拒否します。ロールのアクセス許可ポリシーには 2 つの許可が必要です。
+ キュー、`sqs:SendMessage``lambda:InvokeFunction`関数、`sns:Publish`トピック、ストリームなど、ターゲット`kinesis:PutRecords`が必要とするアクション。
+ `sqs:SendMessage` のデッドレターキューの `OnFailureConfiguration.Arn`。これがないと、失敗した配信自体を記録する場所がなく、それらのイベントはシグナルなしで失われます。

次の信頼ポリシーは、EventBridge がロールを引き受けることを許可します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { "Service": "events.amazonaws.com" },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

次のアクセス許可ポリシーは、Amazon SQS キューに配信し、デッドレターは 2 番目のキューに配信します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "InvokeTheTarget",
            "Effect": "Allow",
            "Action": "sqs:SendMessage",
            "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders"
        },
        {
            "Sid": "WriteToTheDeadLetterQueue",
            "Effect": "Allow",
            "Action": "sqs:SendMessage",
            "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq"
        }
    ]
}
```

## 例: キューに大量の注文を配信する
<a name="eb-custom-bus-subscribers-example"></a>

次のコマンドは、 で発行されたイベントに対して 500 を超える注文を Amazon SQS キューに配信するサブスクライバーを作成し`PutEvents`、デッドレターキューに失敗を送信します。

```
aws eventsv2 create-subscriber \
    --name large-orders \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --filter-configuration '{
        "Filters": [
            { "Scope": "DATA", "Pattern": "{\"detail\":{\"total\":[{\"numeric\":[\">\",500]}]}}" }
        ]
    }' \
    --invoke-configuration '{
        "TargetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders",
        "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole"
    }' \
    --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq" }'
```

## トラブルシューティング: を公開し、ターゲットに到達しなかった
<a name="eb-custom-bus-subscribers-nothing-arrived"></a>

パブリッシュレスポンスは、バスがイベントを受け入れて保存したことのみを示し、配信を確認することはありません。次のチェックを順番に実行します。

症状  
パブリッシュコールは失敗したエントリなしで HTTP 200 を返し、ターゲットは数分後に何も受信していません。

原因  
頻度の順に、配信がまだ再試行されている、サブスクライバーが `STOPPED`または取り消されている、サブスクライバーの `StartingPosition` が `LATEST`であり、サブスクライバーが存在する前にイベントが公開されている、フィルタが他のパブリッシュ API 用に記述され、何も一致しない、配信ロールがターゲットまたはデッドレターキューに到達できない、という 5 つのことのうちの 1 つ。 `TargetInvocations`上のデータポイント`TargetInvocations`に なし は、配信が試行されて失敗する`EventsDelivered`ことを意味します。にデータポイント`FilterEvaluated`がない`TargetInvocations`ときは、配信が試行されないことを意味します。サブスクライバーが であることを確認し`RUNNING`、 を確認します`EventTransformationFailures`。

ソリューション  

1. サブスクライバーを読みます。 `State`は `RUNNING` でなければならず、存在しない`Revoked`必要があります。true の場合にのみ表示されます。`StartingPosition` および フィルターに注意してください。

   ```
   aws eventsv2 describe-subscriber \
       --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLE1234567890abcdef
   ```

1. 「」のサブスクライバーのメトリクスを読みます`AWS/EventsV2`。ゼロ`FilterEvaluated`は、このサブスクライバーに到達したイベントがないことを意味します。プロデューサーが別のバスに発行されるか、サブスクライバーが で存在していた前です`LATEST`。ゼロが `FilterMatched` 0 `FilterEvaluated`以上の場合は、フィルターが何も一致しなかったことを意味します。「」を参照してください[イベント構造: データ、メタデータ、システムメタデータ](eb-custom-bus-addressing.md)。`FilterMatched` にデータポイントがあり、データポイント`EventsDelivered`がない場合、配信は失敗し、その結果を記録するメトリクスはサブスクライバーによって異なります。デッドレターキューが設定され`EventsDropped`ていない場合、イベントがキューに到達`OnFailureDestinationDelivered`した場合、および到達`OnFailureDestinationFailed`しなかった場合です。

1. ログを有効にして再現します。`LogConfiguration.Level` を `INFO`および `IncludePayload`に設定し`FULL`、ログ配信をワイヤリングして、再度発行し、`EVENT_DELIVERY_ATTEMPT`レコードを読み込みます。各 には、ターゲット独自のエラーコードとメッセージ、および が格納されます。これは`details.target_input`、送信する内容ではなく EventBridge が送信した内容です。「[カスタムイベントバスのオブザーバビリティ: メトリクス、ログ、CloudTrail](eb-custom-bus-observability.md)」を参照してください。

1. フィルターが疑わしい場合は、フィルター、、およびターゲットとして所有しているキューなしで`Transformer.Type``WITH_METADATA`、同じバスに診断サブスクライバーを追加します。EventBridge が認識するとおりに、`Data`、`Metadata`、および として各イベントを配信します`SystemMetadata`。次に、フィルターの条件を一度に 1 つずつ簡素化します。最後に削除する条件が原因です。

検証  
一致するイベントと一致しないイベントを 1 つ発行します。最初の はターゲットに到着し、1 ずつ`EventsDelivered`増分します。2 番目の は到着せず、 `FilterEvaluated` `FilterMatched`は増分しません。

**注記**  
サブスクライバーのメトリクスは、バス所有者とサブスクライバーの所有者が使用でき、そのログはサブスクライバーの所有者にのみ配信されます。