

のバージョン 4 (V4) AWS SDK for .NET がリリースされました。

重要な変更とアプリケーションの移行については、[「移行トピック](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)」を参照してください。

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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

# AWS Message Processing Framework for .NET をカスタマイズする
<a name="msg-proc-fw-customize"></a>

 AWS Message Processing Framework for .NET は、3 つの異なる「レイヤー」でメッセージを構築、送信、処理します。

1. 最外部レイヤーでは、フレームワークはサービスに固有の AWSネイティブリクエストまたはレスポンスを構築します。例えば、Amazon SQS では、[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)リクエストを構築し、サービスによって定義された[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html)オブジェクトと連携します。

1. SQS リクエストとレスポンス内で、フレームワークは `MessageBody`要素 (Amazon SNS `Message`の場合は 、Amazon EventBridge `Detail`の場合は ) を [JSON 形式の CloudEvent](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md) に設定します。 Amazon SNS これには、メッセージを処理するときに `MessageEnvelope` オブジェクトでアクセスできるフレームワークによって設定されたメタデータが含まれます。

1. 最も内側のレイヤーでは、CloudEvent JSON オブジェクト内の `data` 属性に、メッセージとして送受信された .NET オブジェクトの JSON シリアル化が含まれています。

   ```
   {
       "id":"b02f156b-0f02-48cf-ae54-4fbbe05cffba",
       "source":"/aws/messaging",
       "specversion":"1.0",
       "type":"Publisher.Models.ChatMessage",
       "time":"2023-11-21T16:36:02.8957126+00:00",
       "data":"<the ChatMessage object serialized as JSON>"
   }
   ```

メッセージエンベロープの設定方法と読み取り方法をカスタマイズできます。
+ `"id"` はメッセージを一意に識別します。デフォルトでは新しい GUID に設定されていますが、独自の を実装`IMessageIdGenerator`して DI コンテナに挿入することで上書きできます。
+ `"type"` は、メッセージをハンドラーにルーティングする方法を制御します。デフォルトでは、メッセージに対応する .NET タイプのフルネームが使用されます。メッセージタイプを `AddSQSPublisher`、、または を介して送信先にマッピングするときに`AddSNSPublisher`、 `messageTypeIdentifier`パラメータを使用してこれを上書きできます`AddEventBridgePublisher`。
+ `"source"` は、メッセージを送信したシステムまたはサーバーを示します。
  + これは、発行元の関数名 AWS Lambda、Amazon ECS の場合はクラスター名とタスク ARN、Amazon EC2 の場合はインスタンス ID、それ以外の場合はフォールバック値 になります`/aws/messaging`。
  + これは、 `AddMessageSource`または `AddMessageSourceSuffix`で上書きできます`MessageBusBuilder`。
+ `"time"` を UTC の現在の DateTime に設定します。これは、独自の を実装`IDateTimeHandler`し、それを DI コンテナに挿入することで上書きできます。
+ `"data"` には、メッセージとして送受信された .NET オブジェクトの JSON 表現が含まれています。
  + `ConfigureSerializationOptions` on `MessageBusBuilder` では、メッセージのシリアル化および逆シリアル化時に[https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions)使用する を設定できます。
  + フレームワークが構築したら、追加の属性を挿入したり、メッセージエンベロープを変換したりするには、 `AddSerializationCallback`で を介してそれを実装`ISerializationCallback`して登録できます`MessageBusBuilder`。