

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon SNS 原始訊息交付
<a name="sns-large-payload-raw-message-delivery"></a>

為了避免 [散發到 Firehose 交付串流](sns-firehose-as-subscriber.md)、[Amazon SQS](sns-sqs-as-subscriber.md) 和 [HTTP/S](sns-http-https-endpoint-as-subscriber.md) 端點處理訊息的 JSON 格式，Amazon SNS 允許原始訊息傳遞：
+ 當您為 或 Amazon SQS 端點啟用原始訊息交付時，任何 Amazon SNS 中繼資料都會從發佈的訊息中分割，並依原狀傳送訊息。
+ 當您啟用 HTTP/S 端點的原始訊息交付時，值設為 `x-amz-sns-rawdelivery` 的 HTTP 標頭 `true` 會加入至訊息中，表示該訊息已在沒有 JSON 格式設定的情況下發佈。
+ 當您啟用 HTTP/S 端點的原始訊息交付時，會交付訊息本文、用户端 IP 和所需的標頭。當您指定訊息屬性時，系統不會傳送該訊息。
+ 當您為 Firehose 端點啟用原始訊息交付時，會交付訊息內文。當您指定訊息屬性時，系統不會傳送該訊息。

若要使用 AWS SDK 啟用原始訊息傳遞，您必須使用 `SetSubscriptionAttribute` API 動作，並將 `RawMessageDelivery` 屬性的值設定為 `true`。

## 使用 啟用原始訊息傳遞 AWS 管理主控台
<a name="raw-message-console"></a>

1. 登入 [Amazon SNS 主控台](https://console.aws.amazon.com/sns/home)。

1. 在導覽面板上，選擇 **Topics (主題)**。

1. 在**主題**頁面上，選擇訂閱 Firehose、Amazon SQS 或 HTTP/S 端點的主題。

1. 在 ***MyTopic (我的主題)*** 頁面上，於 **Subscription (訂閱)** 區段內，選擇訂閱並選擇 **Edit (編輯)**。

1. 在 **Edit *EXAMPLE1-23bc-4567-d890-ef12g3hij456* (編輯範例1-23bc-4567-d890-ef12g3hij456)** 頁面上，於 **Details (詳細資訊)** 區段內，選擇 **Enable raw message delivery (啟用原始訊息交付)**。

1. 選擇**儲存變更**。

## 訊息格式範例
<a name="raw-message-examples"></a>

在下列範例中，相同的訊息會傳送到相同的 Amazon SQS 佇列兩次。唯一的差異是第一封郵件的原始訊息交付會停用，第二封郵件則會啟用。
+ 原始訊息交付**停用**

  ```
  {
    "Type": "Notification",
    "MessageId": "dc1e94d9-56c5-5e96-808d-cc7f68faa162",
    "TopicArn": "arn:aws:sns:us-east-2:111122223333:ExampleTopic1",
    "Subject": "TestSubject",
    "Message": "This is a test message.",
    "Timestamp": "2021-02-16T21:41:19.978Z",
    "SignatureVersion": "1",
    "Signature": "FMG5tlZhJNHLHUXvZgtZzlk24FzVa7oX0T4P03neeXw8ZEXZx6z35j2FOTuNYShn2h0bKNC/zLTnMyIxEzmi2X1shOBWsJHkrW2xkR58ABZF+4uWHEE73yDVR4SyYAikP9jstZzDRm+bcVs8+T0yaLiEGLrIIIL4esi1llhIkgErCuy5btPcWXBdio2fpCRD5x9oR6gmE/rd5O7lX1c1uvnv4r1Lkk4pqP2/iUfxFZva1xLSRvgyfm6D9hNklVyPfy+7TalMD0lzmJuOrExtnSIbZew3foxgx8GT+lbZkLd0ZdtdRJlIyPRP44eyq78sU0Eo/LsDr0Iak4ZDpg8dXg==",
    "SigningCertURL": "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem",
    "UnsubscribeURL": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:111122223333:ExampleTopic1:e1039402-24e7-40a3-a0d4-797da162b297"
  }
  ```
+ 原始訊息交付**啟用**

  ```
  This is a test message.
  ```

## Amazon SQS 訂閱的訊息屬性和原始訊息傳遞
<a name="message-atttributes-raw-message-delivery-sqs"></a>

Amazon SNS 支援訊息屬性的傳遞，可讓您提供有關訊息的結構化中繼資料項目，例如時間戳記、地理空間資料、簽章和識別符。對於啟用**原始訊息傳遞**的 Amazon SQS 訂閱，最多可傳送 10 個訊息屬性。若要傳送超過 10 個訊息屬性，您必須停用原始訊息傳遞。不過，Amazon SNS 會捨棄具有超過 10 個訊息屬性的訊息，這些屬性導向已啟用原始訊息交付的 Amazon SQS 訂閱，並將它們視為用戶端錯誤。