

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

# カスタムイベントバスのユニバーサルターゲット
<a name="eb-custom-bus-universal-targets"></a>

*ユニバーサルターゲット*は、サブスクライバーから直接 AWS API アクションを呼び出します。その間に関数はありません。キュー、トピック、または関数をターゲットとして命名する代わりに、サービスと API アクションに名前を付け、EventBridge が送信する API リクエストを、固定 JSON として、またはイベントからのリクエストを構築する JSONata 式として書き込みます。サブスクライバーは、DynamoDB テーブルに項目を書き込んだり、Amazon S3 バケットにオブジェクトを配置したり、Amazon SNS トピックに発行したり、パスに Lambda 関数なしで Step Functions の実行を開始したりできます。

## ターゲット ARN
<a name="eb-custom-bus-universal-targets-arn"></a>

ユニバーサルターゲットの `TargetArn`には、リージョンとアカウントのない固定形式があります。

```
arn:aws:events:::aws-sdk:{{service}}:{{apiAction}}
```
+ {{service}} は AWS SDK サービス識別子であり、必ずしもサービスの使い慣れた名前ではありません。たとえば、Step Functions は `sfn`ではなく です`states`。機能する例: `sqs`、`sns`、`s3`、`dynamodb`、`bedrockagentcore`。
+ {{apiAction}} は、小文字の先頭文字が ではなく `putItem`の camelCase の API アクション名です`PutItem`。EventBridge は、 camelCase にあるアクションのインデックスで記述したとおりに名前を検索するため、 `PutItem` は メッセージ`CreateSubscriber`で によって拒否*されます。API PutItem はサービス dynamodb には無効です*。同じメッセージは、そのサービスに対して アクションが存在しないことを意味します。

たとえば、 は DynamoDB を`arn:aws:events:::aws-sdk:dynamodb:putItem`呼び出し`PutItem`、 は Amazon SNS を`arn:aws:events:::aws-sdk:sns:publish`呼び出します`Publish`。

## サポートされていないアクション
<a name="eb-custom-bus-universal-targets-unsupported"></a>

2 種類のアクションをサブスクライバーのターゲットにすることはできず、API またはサービス全体がサポートされていないことを示すメッセージで`CreateSubscriber`拒否します。
+ 名前が 、、または で始まるアクションなど`list`、状態を変更するのではなく`get`読み取るアクション`describe`。イベントには発生した何かが伴うため、ターゲットアクションの状態を変更する必要があります。EventBridge はブロックされたアクション名とサービスのリストを保持し、アクションがターゲットとして動作しない場合など、アクションに追加できるため、一度受け入れられたアクションは永久に保証されません。create-time メッセージを権限として扱います。
+ EventBridge はアクション、、および を発行`eventbridge:putEvents`します`eventbridge:putPartnerEvents`。イベントを別のイベントバスに配信するには、バス ARN を として設定します`TargetArn`。カスタムイベントバスとカスタムイベントバス - Classic はどちらも、独自のターゲットとしてサポートされています。「[イベントバスターゲット: bus to bus](eb-custom-bus-target-bus.md)」を参照してください。

## パラメータ
<a name="eb-custom-bus-universal-targets-parameters"></a>

ユニバーサルターゲットには が必要です`InvokeConfiguration.UniversalTargetParameters`。 は、それを省略するサブスクライバー、または などの別のパラメータブロックを提供するサブスクライバー`CreateSubscriber`を拒否します`SqsParameters`。`UniversalTargetParameters` 「」というメッセージが表示されます。を通じてリクエストをシェイプします`Input`。ユニバーサルターゲットサブスクライバーはサブスクライバーの を使用しないため`Transformer`、JSONata 変換を に配置します`Input`。

`Input` (必須)  
API リクエスト。JSON 文字列として、またはリクエストを生成する でラップ`{% %}`された JSONata 式として。ターゲット API の独自のリファレンスのメンバー名を使用します。Amazon SQS の場合は `QueueUrl`および `SendMessage`です`MessageBody`。最大 262,144 文字。  
API が必要とするフィールドに対してサブスクライバーを作成すると、固定 JSON `Input`がチェックされ、欠落しているフィールドは名前で拒否されます。JSONata `Input`は構文についてのみチェックされます。その結果はイベントに依存するため、ターゲット API が代わりに配信時に表面を拒否するリクエストが表示されます。

`InvocationTimeoutSeconds`  
EventBridge が 1～30 秒の 1 つの API コールを待機する時間。デフォルトは 30 です。これはリテラル整数である必要があります。JSONata 式はここでは受け入れられません。

の配信ロールには、 や`sqs:SendMessage`デッドレターキューなど`dynamodb:PutItem`、呼び出す API の IAM アクション`RoleArn`が必要です。ロールの信頼ポリシーとその残りのアクセス許可については、「」を参照してください[カスタムイベントバスのアクセスコントロール](eb-custom-bus-access.md)。

## バッチ処理と`$events`配列
<a name="eb-custom-bus-universal-targets-batching"></a>

EventBridge は、イベントごとにではなく、バッチごとに 1 つの API コールを実行します。 `BatchConfiguration` はバッチを 1 `MaxBatchSize`から 500、0 `MaxBatchWindowInSeconds`から 300 に設定します。バッチは、サイズに達したとき、またはウィンドウが経過したときのいずれか早い方で閉じます。

JSONata では`Input`、 `$events`はバッチです。バッチ内のイベントの配列です。バッチサイズが 1 の場合、 は 1 つのイベントの値`$events.Data.orderId`を生成します。大きなバッチでは、 `$map`や などで配列を明示的にアドレス指定します。指定しない場合`$join`、式は API が文字列を想定し、配信が失敗する配列を生成します。

`MaxBatchSize` イベントごとに 1 つの API コールを行うには、 `MaxBatchWindowInSeconds` を 1 に設定し、 を 0 に設定します。固定リクエストはバッチ内のすべてのイベントで同じであり、バッチは 1 回の呼び出しを生成するため、 `Input`が固定 JSON であるたびにこれを行います。

## 例: イベントごとに 1 つの DynamoDB 項目
<a name="eb-custom-bus-universal-targets-example"></a>

次のサブスクライバーは、 で発行されたイベントごとに DynamoDB テーブルに 1 つの項目を書き込み`PutRawEvents`、イベントの `orderId`フィールドからパーティションキーを取得します。配信ロールは テーブル`dynamodb:PutItem`に が必要です。

```
aws eventsv2 create-subscriber \
    --name orders-to-dynamodb \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --invoke-configuration '{
        "TargetArn": "arn:aws:events:::aws-sdk:dynamodb:putItem",
        "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole",
        "UniversalTargetParameters": {
            "Input": "{% { \"TableName\": \"orders\", \"Item\": { \"pk\": { \"S\": $events.Data.orderId }, \"total\": { \"N\": $string($events.Data.total) } } } %}"
        }
    }' \
    --batch-configuration MaxBatchSize=1,MaxBatchWindowInSeconds=0 \
    --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:orders-to-dynamodb-dlq" }'
```

で公開されたイベントの場合`PutEvents`、同じフィールドは の下にあります`detail`: `$events.Data.detail.orderId`。「[イベント構造: データ、メタデータ、システムメタデータ](eb-custom-bus-addressing.md)」を参照してください。

## API コールが失敗した場合
<a name="eb-custom-bus-universal-targets-failures"></a>

サブスクライバーを作成すると、EventBridge は ARN の形状、アクションが存在し、ブロックされていないこと、固定にアクションの必須フィールド`Input`があること`Input`、JSONata の場合は式が解析されることを確認します。リクエストに という名前のリソースが存在すること、または配信ロールが アクションを呼び出すことができるかどうかはチェックされません。これらの障害は配信時に発生し、配信障害はすべてサブスクライバーの で再試行されます。デフォルトでは `RetryPolicy`300 秒以内に最大 5 回試行されます。制限に達すると、EventBridge は最後に失敗した`errorCode`名前のデッドレターキューにレコードを書き込みます。ユニバーサルターゲットが最も頻繁に生成するコード:
+ `CUSTOMER_VALIDATION`: ターゲット API がリクエストを拒否しました。たとえば、必須フィールドがないか、値が範囲外です。レコードには、ターゲット API 独自のエラーメッセージが格納されます。
+ `ACCESS_DENIED`: EventBridge が配信ロールを引き受けられなかったか、ロールがリソースで アクションを呼び出すことが許可されていません。レコードには、ロールまたはリソースに名前を付ける EventBridge メッセージ内の と表示されます。
+ `RESOURCE_NOT_FOUND`: リクエストに という名前のテーブル、トピック、またはその他のリソースが存在しません。
+ `INPUT_TRANSFORMATION_FAILURE`: の JSONata `Input` 式がエラーをスローしたか、値を生成しませんでした。
+ `THROTTLING`: ターゲット API が呼び出しをスロットリングしました。`REQUEST_TOO_LARGE`: リクエストがアクションのサイズ制限を超えました。下限 `MaxBatchSize`。`EXECUTION_TIMEOUT`: 呼び出しがタイムアウト内に返されませんでした。

エラーコードの完全なリスト、それぞれが保持するメッセージ、および再処理方法については、「」を参照してください[再試行ポリシーとデッドレターキュー](eb-custom-bus-retry.md)。サブスクライバーログをオンにして、各試行と送信された正確なリクエストを確認します。「」を参照してください[カスタムイベントバスのオブザーバビリティ: メトリクス、ログ、CloudTrail](eb-custom-bus-observability.md)。