

 AWS SDK for .NET V3 がメンテナンスモードになりました。

[AWS SDK for .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html) に移行することをお勧めします。移行方法の詳細と情報については、[メンテナンスモードのお知らせ](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)を参照してください。

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

# 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) に設定します。これには、メッセージを処理するときに `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`、または `AddEventBridgePublisher` を介してメッセージタイプを送信先にマッピングするときに、`messageTypeIdentifier` パラメータを使用してこれを上書きできます。
+ `"source"` は、メッセージを送信したシステムまたはサーバーを示します。
  + これは、AWS Lambda から発行する場合は関数名であり、Amazon ECS の場合はクラスター名とタスク ARN であり、Amazon EC2 の場合はインスタンス ID であり、それ以外の場合は `/aws/messaging` のフォールバック値です。
  + これは、`MessageBusBuilder` での `AddMessageSource` または `AddMessageSourceSuffix` で上書きできます。
+ UTC での現在の DateTime に設定された `"time"`。これは、独自の `IDateTimeHandler` を実装し、DI コンテナに挿入することで上書きできます。
+ `"data"` には、メッセージとして送受信された .NET オブジェクトの JSON 表現が含まれます。
  + `MessageBusBuilder` に対する `ConfigureSerializationOptions` により、メッセージをシリアル化および逆シリアル化するときに使用される [https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions) を設定できます。
  + フレームワークが構築したら、追加の属性を挿入したり、メッセージエンベロープを変換したりするには、`ISerializationCallback` を実装して、それを `MessageBusBuilder` に対する `AddSerializationCallback` を介して登録できます。