

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

# 複数の配信ストリーム送信先にわたる Amazon SNS メッセージを管理する
<a name="firehose-working-with-destinations"></a>

[配信ストリーム](sns-firehose-as-subscriber.md)を使用すると、複数の送信先にまたがる Amazon SNS メッセージを管理できます。また、Amazon S3、Amazon OpenSearch Service、Amazon Redshift、HTTP エンドポイントと統合することで、ストレージ、インデックス作成、分析が可能になります。メッセージのフォーマットと配信を適切に設定することで、Amazon SNS 通知を Amazon S3 に保存して後で処理したり、Amazon Athena を使用して構造化されたメッセージデータを分析したりすることができます。また、OpenSearch でメッセージのインデックスを作成してリアルタイム検索や視覚化を行ったり、Amazon Redshift でアーカイブを構造化して高度なクエリを実行したりすることもできます。

# Amazon S3 送信先に Amazon SNS メッセージを保存して分析する
<a name="firehose-s3-destinations"></a>

このトピックでは、配信ストリームが Amazon Simple Storage Service (Amazon S3) にデータを発行する方法について説明します。

![\[メッセージ処理のための Amazon サービスの統合とワークフロー。パブリッシャーが Amazon SNS トピックにメッセージを送信し、そのトピックがメッセージを複数の Amazon SQS キューと Data Firehose 配信ストリームにファンアウトする方法を示しています。そこから、メッセージを Lambda 関数で処理したり、Amazon S3 バケットに永続的に保存したりできます。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/firehose-architecture-s3.png)


**Topics**
+ [Amazon S3 送信先でのストレージの通知のフォーマット](firehose-archived-message-format-S3.md)
+ [Athena を使用して Amazon S3 に保存されたメッセージを分析する](firehose-message-analysis-s3.md)

# Amazon S3 送信先でのストレージの Amazon SNS 通知のフォーマット
<a name="firehose-archived-message-format-S3"></a>

次の例は、読みやすくするためにインデントを使用して Amazon Simple Storage Service (Amazon S3) バケットに送信された Amazon SNS 通知を示しています。

**注記**  
この例では、raw メッセージ配信は、発行されたメッセージに対して無効になっています。raw メッセージ配信が無効になっている場合、Amazon SNS は次のプロパティを含む JSON メタデータをメッセージに追加します。  
`Type`
`MessageId`
`TopicArn`
`Subject`
`Timestamp`
`UnsubscribeURL`
`MessageAttributes`
raw 配信の詳細については、「[Amazon SNS raw メッセージの配信](sns-large-payload-raw-message-delivery.md)」を参照してください。

```
{
    "Type": "Notification",
    "MessageId": "719a6bbf-f51b-5320-920f-3385b5e9aa56",
    "TopicArn": "arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic",     
    "Subject": "My 1st subject",
    "Message": "My 1st body",
    "Timestamp": "2020-11-26T23:48:02.032Z",
    "UnsubscribeURL": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5",
    "MessageAttributes": {
        "myKey1": {
            "Type": "String",
            "Value": "myValue1"
        },
        "myKey2": {
            "Type": "String",
            "Value": "myValue2"
        }
    }
 }
```

次の例は、配信ストリームを介して同じ Amazon S3 バケットに送信された 3 つの SNS メッセージを示しています。バッファリングが適用され、各メッセージは改行で区切られます。

```
{"Type":"Notification","MessageId":"d7d2513e-6126-5d77-bbe2-09042bd0a03a","TopicArn":"arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic","Subject":"My 1st subject","Message":"My 1st body","Timestamp":"2020-11-27T00:30:46.100Z","UnsubscribeURL":"https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:313276652360:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5","MessageAttributes":{"myKey1":{"Type":"String","Value":"myValue1"},"myKey2":{"Type":"String","Value":"myValue2"}}}
{"Type":"Notification","MessageId":"0c0696ab-7733-5bfb-b6db-ce913c294d56","TopicArn":"arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic","Subject":"My 2nd subject","Message":"My 2nd body","Timestamp":"2020-11-27T00:31:22.151Z","UnsubscribeURL":"https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:313276652360:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5","MessageAttributes":{"myKey1":{"Type":"String","Value":"myValue1"}}}
{"Type":"Notification","MessageId":"816cd54d-8cfa-58ad-91c9-8d77c7d173aa","TopicArn":"arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic","Subject":"My 3rd subject","Message":"My 3rd body","Timestamp":"2020-11-27T00:31:39.755Z","UnsubscribeURL":"https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:313276652360:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5"}
```

# Athena を使用して Amazon S3 に保存された Amazon SNS メッセージを分析する
<a name="firehose-message-analysis-s3"></a>

このページでは、配信ストリームを介して Amazon Simple Storage Service (Amazon S3) の送信先に送信された Amazon SNS メッセージを分析する方法について説明します。

**Firehose 配信ストリームを介して Amazon S3 送信先に送信された SNS メッセージを分析するには**

1. Amazon S3 リソースを設定します。手順については、『*Amazon Simple Storage Service ユーザーガイド*』の「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)」および『*Amazon Simple Storage Service ユーザーガイド*』の「[Amazon S3 バケットの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)」を参照してください。

1. 配信ストリームを設定します。手順については、「*Amazon Data Firehose デベロッパーガイド*」の「[配信先の Amazon S3 の選択](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-s3)」を参照してください。

1. [Amazon Athena](https://console.aws.amazon.com/athena) を使用して、標準 SQL を使用した Amazon S3 オブジェクトのクエリを実行します。詳細については、『*Amazon Athena ユーザーガイド*』の「[開始方法](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html)」を参照してください。

## クエリの例
<a name="example-s3-query"></a>

このクエリの例では、次のことを前提としています。
+ メッセージは `default` スキーマの `notifications` テーブルに保存されます。
+ `notifications` テーブルは `string` のタイプの `timestamp` カラムを含みます。

次のクエリは、指定された日付の範囲内で受信されたすべてのSNS メッセージを返します。

```
SELECT * 
FROM default.notifications
WHERE from_iso8601_timestamp(timestamp) BETWEEN TIMESTAMP '2020-12-01 00:00:00' AND TIMESTAMP '2020-12-02 00:00:00';
```

# Amazon SNS メッセージと Amazon OpenSearch Service の送信先との統合
<a name="firehose-elasticsearch-destinations"></a>

このセクションでは、配信ストリームが Amazon OpenSearch Service (OpenSearch Service) にデータを発行する方法について説明します。

![\[パブリッシャーは Amazon SNS トピックにメッセージを送信し、そのトピックはこれらのメッセージを複数の Amazon SQS キューに配信します。これらのキューからのメッセージは、Lambda 関数によって処理することができます。また、Data Firehose 配信ストリームを介して Amazon OpenSearch Service に送信し、検索可能なメッセージインデックスを作成することもできます。この設定は、 AWS のサービスを使用した高度なメッセージルーティングと処理のシナリオを示しています。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/firehose-architecture-es.png)


**Topics**
+ [アーカイブされたメッセージ形式](firehose-archived-message-format-elasticsearch.md)
+ [メッセージを分析する](firehose-message-analysis-elasticsearch.md)

# OpenSearch Service インデックスでの Amazon SNS 通知の保存とフォーマット
<a name="firehose-archived-message-format-elasticsearch"></a>

次の例は、`my-index` という Amazon OpenSearch Service (OpenSearch Service) インデックスに送信された Amazon SNS 通知を示しています。このインデックスには、`Timestamp` フィールドにタイムフィルターフィールドがあります。SNS 通知はペイロードの `_source` プロパティにあります。

**注記**  
この例では、raw メッセージ配信は、発行されたメッセージに対して無効になっています。raw メッセージ配信が無効になっている場合、Amazon SNS は次のプロパティを含む JSON メタデータをメッセージに追加します。  
`Type`
`MessageId`
`TopicArn`
`Subject`
`Timestamp`
`UnsubscribeURL`
`MessageAttributes`
raw 配信の詳細については、「[Amazon SNS raw メッセージの配信](sns-large-payload-raw-message-delivery.md)」を参照してください。

```
{
  "_index": "my-index",
  "_type": "_doc",
  "_id": "49613100963111323203250405402193283794773886550985932802.0",
  "_version": 1,
  "_score": null,
  "_source": {
    "Type": "Notification",
    "MessageId": "bf32e294-46e3-5dd5-a6b3-bad65162e136",
    "TopicArn": "arn:aws:sns:us-east-1:111111111111:my-topic",
    "Subject": "Sample subject",
    "Message": "Sample message",
    "Timestamp": "2020-12-02T22:29:21.189Z",
    "UnsubscribeURL": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:111111111111:my-topic:b5aa9bc1-9c3d-452b-b402-aca2cefc63c9",
    "MessageAttributes": {
      "my_attribute": {
        "Type": "String",
        "Value": "my_value"
      }
    }
  },
  "fields": {
    "Timestamp": [
      "2020-12-02T22:29:21.189Z"
    ]
  },
  "sort": [
    1606948161189
  ]
}
```

# OpenSearch Service の宛先の Amazon SNS メッセージを分析する
<a name="firehose-message-analysis-elasticsearch"></a>

このトピックでは、配信ストリームを介して Amazon OpenSearch Service (OpenSearch Service) の送信先に送信される Amazon SNS メッセージを分析する方法について説明します。

**Firehose 配信ストリームを介して OpenSearch Service の送信先に送信される SNS メッセージを分析するには**

1. OpenSearch Service リソースを設定します。手順については、*Amazon OpenSearch Service デベロッパーガイド*の [Amazon OpenSearch Service の開始方法](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/es-gsg.html)を参照してください。

1. 配信ストリームを設定します。手順については、「*Amazon Data Firehose デベロッパーガイド*」の「[送信先に OpenSearch Service を選択する](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-elasticsearch)」を参照してください。

1. OpenSearch Service クエリと Kibana を使用してクエリを実行します。詳細については、*Amazon OpenSearch Service デベロッパーガイド*の[ステップ 3: OpenSearch Service ドメインでドキュメントを検索する](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/es-gsg-search.html)および [Kibana](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/es-kibana.html) を参照してください。

## クエリの例
<a name="example-es-query"></a>

次の例では、指定された日付の範囲内で受信したすべての SNS メッセージの `my-index` インデックスのクエリを示しています。

```
POST https://search-my-domain.us-east-1.es.amazonaws.com/my-index/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "Timestamp": {
              "gte": "2020-12-08T00:00:00.000Z",
              "lte": "2020-12-09T00:00:00.000Z",
              "format": "strict_date_optional_time"
            }
          }
        }
      ]
    }
  }
}
```

# Amazon Redshift 送信先での Amazon SNS メッセージ配信と分析を設定する
<a name="firehose-redshift-destinations"></a>

このトピックでは、Amazon SNS 通知を配信ストリームにファンアウトし、データを Amazon Redshift に発行する方法について説明します。この設定では、Amazon Redshift データベースに接続し、SQL クエリツールを使用して、特定の条件を満たす Amazon SNS メッセージを取得できます。

![\[送信者が Amazon SNS トピックに発行したメッセージは、複数の Amazon SQS キューに配信されて Lambda 関数で処理されます。また、そのメッセージは Data Firehose 配信ストリーム経由で Amazon Redshift クラスターに送信され、メッセージデータウェアハウスに保存されて分析されます。この設定は、 AWS のサービスを使用した堅牢なメッセージ処理とデータウェアハウスアーキテクチャを示しています。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/firehose-architecture-rs.png)


**Topics**
+ [Amazon Redshift テーブルでのメッセージアーカイブの構築](firehose-archive-table-structure-redshift.md)
+ [Amazon Redshift の送信先に保存されたメッセージを分析する](firehose-message-analysis-redshift.md)

# Amazon Redshift テーブルでの Amazon SNS メッセージアーカイブの構築
<a name="firehose-archive-table-structure-redshift"></a>

Amazon Redshift エンドポイントの場合、Amazon SNS メッセージは、テーブル内の列としてアーカイブされます。データの保存方法の例を次に示します。

**注記**  
この例では、raw メッセージ配信は、発行されたメッセージに対して無効になっています。raw メッセージ配信が無効になっている場合、Amazon SNS は次のプロパティを含む JSON メタデータをメッセージに追加します。  
`Type`
`MessageId`
`TopicArn`
`Subject`
`Message`
`Timestamp`
`UnsubscribeURL`
`MessageAttributes`
raw 配信の詳細については、「[Amazon SNS raw メッセージの配信](sns-large-payload-raw-message-delivery.md)」を参照してください。  
Amazon SNS は、このリストに表示される頭文字を大文字の単語でメッセージにプロパティを追加しますが、Amazon Redshift テーブルではすべて小文字で表示されます。Amazon Redshift エンドポイントの JSON メタデータを変換するには、SQL の `COPY` コマンドを使用できます。詳細については、『*Amazon Redshift データベースデベロッパーガイド*』の「[JSON からのコピーの例](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#r_COPY_command_examples-copy-from-json)」および「['auto ignorecase' オプションを使用した JSON データからのロード](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#copy-from-json-examples-using-auto-ignorecase)」を参照してください。


|  型  |  messageId  |  topicarn  |  subject  |  message  |  timestamp  |  unsubscribeurl  |  messageattributes  | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
|  通知  |  ea544832-a0d8-581d-9275-108243c46103  |  arn:aws:sns:us-east-1:111111111111:my-topic  |  サンプル件名  |  サンプルメッセージ  |  2020-12-02T00:33:32.272Z  |  https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:111111111111:my-topic:326deeeb-cbf4-45da-b92b-ca77a247813b  |  \$1\$1"my\$1attribute\$1":\$1\$1"Type\$1":\$1"String\$1",\$1"Value\$1":\$1"my\$1value\$1"\$1\$1  | 
|  Notification  |  ab124832-a0d8-581d-9275-108243c46114  |  arn:aws:sns:us-east-1:111111111111:my-topic  |  サンプル件名 2  |  サンプルメッセージ 2  |  2020-12-03T00:18:11.129Z  |  https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:111111111111:my-topic:326deeeb-cbf4-45da-b92b-ca77a247813b  |  \$1\$1"my\$1attribute2\$1":\$1\$1"Type\$1":\$1"String\$1",\$1"Value\$1":\$1"my\$1value\$1"\$1\$1  | 
|  Notification  |  ce644832-a0d8-581d-9275-108243c46125  |  arn:aws:sns:us-east-1:111111111111:my-topic  |  サンプル件名 3  |  サンプルメッセージ 3  |  2020-12-09T00:08:44.405Z  |  https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:111111111111:my-topic:326deeeb-cbf4-45da-b92b-ca77a247813b  |  \$1\$1"my\$1attribute3\$1":\$1\$1"Type\$1":\$1"String\$1",\$1"Value\$1":\$1"my\$1value\$1"\$1\$1  | 

Amazon Redshift エンドポイントへの通知のファンアウトの詳細については、「[Amazon Redshift 送信先での Amazon SNS メッセージ配信と分析を設定する](firehose-redshift-destinations.md)」を参照してください。

# Amazon Redshift の送信先に保存された Amazon SNS メッセージを分析する
<a name="firehose-message-analysis-redshift"></a>

このトピックでは、配信ストリームを介して Amazon Redshift の送信先に送信される Amazon SNS メッセージを分析する方法について説明します。

**Firehose 配信ストリームを介して Amazon Redshift の送信先に送信される SNS メッセージを分析するには**

1. Amazon Redshift リソースを設定します。手順については、『*Amazon Redshift 使用開始ガイド*』の「[Amazon Redshift の開始方法](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)を参照してください。

1. 配信ストリームを設定します。手順については、「*Amazon Data Firehose デベロッパーガイド*」の「[配信先の Amazon Redshift の選択](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-redshift)」を参照してください。

1. クエリを実行する 詳細については、「*Amazon Redshift 管理ガイド*」の「[クエリエディタを使用してデータベースのクエリを実行する](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor.html)」を参照してください。

## クエリの例
<a name="example-rs-query"></a>

このクエリの例では、次のことを前提としています。
+ メッセージはデフォルト `public` スキーマの `notifications` テーブルに保存されます。
+ SNS メッセージからの `Timestamp` プロパティは、`timestamptz` のタイプのコラムデータを持つテーブルの `timestamp` カラムに保存されます。
**注記**  
Amazon Redshift エンドポイントの JSON メタデータを変換するには、SQL `COPY` コマンドを使用できます。詳細については、『*Amazon Redshift データベースデベロッパーガイド*』の「[JSON からのコピーの例](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#r_COPY_command_examples-copy-from-json)」および「['auto ignorecase' オプションを使用した JSON データからのロード](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#copy-from-json-examples-using-auto-ignorecase)」を参照してください。

次のクエリは、指定された日付の範囲内で受信されたすべてのSNS メッセージを返します。

```
SELECT *
FROM public.notifications
WHERE timestamp > '2020-12-01T09:00:00.000Z' AND timestamp < '2020-12-02T09:00:00.000Z';
```

# HTTP 送信先へのAmazon SNS メッセージ配信を設定する
<a name="firehose-http-destinations"></a>

このトピックでは、配信ストリームが HTTP エンドポイントにデータを発行する方法について説明します。

![\[Amazon SNS トピックへのパブリッシャー。メッセージを複数の Amazon SQS キューに配信します。これらのメッセージは Lambda 関数によって処理され、Data Firehose 配信ストリームを介して HTTP エンドポイントに送信されます。この設定は、 AWS のサービス の連携によるメッセージの処理と外部 HTTP サービスとの統合を示しています。\]](http://docs.aws.amazon.com/ja_jp/sns/latest/dg/images/firehose-architecture-http.png)


**Topics**
+ [HTTP 送信先に配信するための通知フォーマット](firehose-delivered-message-format-http.md)

# HTTP 送信先に配信するための Amazon SNS 通知フォーマット
<a name="firehose-delivered-message-format-http"></a>

Amazon SNS から配信ストリームを介して HTTP エンドポイントに送信される HTTP POST リクエスト本文の例を次に示します。Amazon SNS 通知は、records プロパティ内で base64 ペイロードとしてエンコードされます。

**注記**  
この例では、raw メッセージ配信は、発行されたメッセージに対して無効になっています。raw 配信の詳細については、「[Amazon SNS raw メッセージの配信](sns-large-payload-raw-message-delivery.md)」を参照してください。

```
"body": {
    "requestId": "ebc9e8b2-fce3-4aef-a8f1-71698bf8175f",
    "timestamp": 1606255960435,
    "records": [
      {
        "data": "eyJUeXBlIjoiTm90aWZpY2F0aW9uIiwiTWVzc2FnZUlkIjoiMjFkMmUzOGQtMmNhYi01ZjYxLTliYTItYmJiYWFhYzg0MGY2IiwiVG9waWNBcm4iOiJhcm46YXdzOnNuczp1cy1lYXN0LTE6MTExMTExMTExMTExOm15LXRvcGljIiwiTWVzc2FnZSI6IlNhbXBsZSBtZXNzYWdlIGZvciBBbWF6b24gS2luZXNpcyBEYXRhIEZpcmVob3NlIGVuZHBvaW50cyIsIlRpbWVzdGFtcCI6IjIwMjAtMTEtMjRUMjI6MDc6MzEuNjY3WiIsIlVuc3Vic2NyaWJlVVJMIjoiaHR0cHM6Ly9zbnMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1VbnN1YnNjcmliZSZTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6MTExMTExMTExMTExOm15LXRvcGljOjAxYjY5MTJjLTAwNzAtNGQ4Yi04YjEzLTU1NWJmYjc2ZTdkNCJ9"
      }
    ]
  }
```