amazon simple notification service - 開発者ガイドamazon simple notification service...

248
Amazon Simple Notification Service 開発者ガイド

Upload: others

Post on 08-Mar-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon SimpleNotification Service

開発者ガイド

Page 2: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

Amazon Simple Notification Service: 開発者ガイドCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

Table of ContentsAmazon SNS とは .............................................................................................................................. 1アクセスをセットアップする ................................................................................................................ 2

ステップ 1: AWS アカウントおよび IAM 管理ユーザーを作成する ..................................................... 2ステップ 2: IAM ユーザーを作成して AWS 認証情報を取得する ........................................................ 2次のステップ ............................................................................................................................. 3

開始方法 ............................................................................................................................................ 4前提条件 .................................................................................................................................... 4ステップ 1: トピックを作成する ................................................................................................... 4ステップ 2: トピックに対するエンドポイントのサブスクリプションを作成する ................................... 4ステップ 3: トピックにメッセージを発行する ................................................................................. 5ステップ 4: サブスクリプションとトピックを削除する ..................................................................... 6次のステップ ............................................................................................................................. 7

チュートリアル .................................................................................................................................. 8基本的なワークフロー ................................................................................................................. 8

トピックの作成 .................................................................................................................. 8トピックにエンドポイントをサブスクライブする ................................................................... 11トピックにメッセージを発行する ........................................................................................ 14トピックのタグの一覧表示、追加、および削除 ...................................................................... 16デッドレターキューを設定する ........................................................................................... 18サブスクリプションとトピックを削除する ............................................................................ 21

ワークフローの発行 .................................................................................................................. 23属性を使用したメッセージの発行 ........................................................................................ 23

Amazon SNS を安全に使用する .................................................................................................. 28トピックの SSE を有効にする ............................................................................................ 28暗号化されたキューをサブスクライブしたトピックの SSE を有効にする .................................. 31チュートリアル: VPC からメッセージをプライベートに発行する ............................................. 33

AWS Event Fork Pipelines の使用 ............................................................................................... 43AWS Event Fork Pipelines をデプロイしてテストする ............................................................ 43AWS Event Fork Pipelines をトピックにサブスクライブする ................................................... 50

Amazon SNS の詳細 ......................................................................................................................... 57一般的なシナリオ ...................................................................................................................... 57

ファンアウト .................................................................................................................... 57アプリケーションおよびシステムアラート ............................................................................ 58プッシュ E メールとテキストメッセージ .............................................................................. 58モバイルプッシュ通知 ....................................................................................................... 58メッセージの耐久性 .......................................................................................................... 58

メッセージ配信ステータス ......................................................................................................... 58AWS マネジメントコンソール を使用した配信ステータスのログ記録の設定 .............................. 59AWS SDK を使用して、Amazon SNS エンドポイントにサブスクライブしたトピックのメッセージ配信ステータス属性を設定する .................................................................................. 59

メッセージ配信の再試行 ............................................................................................................ 61配信プロトコルとポリシー ................................................................................................. 61配信ポリシーの段階 .......................................................................................................... 62配信ポリシーの作成 .......................................................................................................... 63

デッドレターキュー .................................................................................................................. 65メッセージ配信が失敗する理由 ........................................................................................... 65デッドレターキューのしくみ .............................................................................................. 66メッセージがデッドレターキューに移動する仕組み ................................................................ 66メッセージをデッドレターキューから移動する方法 ................................................................ 67デッドレターキューのモニタリングとログ記録方法 ................................................................ 67

メッセージ属性 ......................................................................................................................... 67メッセージ属性の項目および検証 ........................................................................................ 68データ型 .......................................................................................................................... 68モバイルプッシュ通知の予約済みメッセージ属性 ................................................................... 68

iii

Page 4: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

メッセージのフィルタ処理 ......................................................................................................... 70サブスクリプションフィルタポリシー .................................................................................. 70チュートリアル: サブスクリプションフィルタポリシーを適用する ........................................... 76チュートリアル: サブスクリプションフィルタポリシーを削除する ........................................... 79Java コレクションとしてのサブスクリプションフィルタポリシー ............................................ 80

メッセージと JSON の形式 ........................................................................................................ 83HTTP/HTTPS ヘッダー ...................................................................................................... 84HTTP/HTTPS 受信登録の確認の JSON 形式 ......................................................................... 84HTTP/HTTPS 通知の JSON 形式 ........................................................................................ 86HTTP/HTTPS 受信登録の解除の JSON 形式 ......................................................................... 87SetSubscriptionAttributes 配信ポリシーの JSON 形式 ............................................................. 88SetTopicAttributes 配信ポリシーの JSON 形式 ...................................................................... 89

ラージペイロードメッセージと Raw メッセージの配信 .................................................................. 90AWS マネジメントコンソール を使用して raw メッセージ配信を有効にする ............................. 90

タグ ........................................................................................................................................ 90システム間メッセージング ................................................................................................................. 92

受信者として AWS Lambda 関数を使用する場合 ........................................................................... 92前提条件 .......................................................................................................................... 92AWS マネジメントコンソール を使用して Lambda エンドポイントで Amazon SNS を設定する .... 92

受信者として Amazon SQS キューを使用する場合 ........................................................................ 93ステップ 1: キューとトピックの ARN を取得する .................................................................. 94ステップ 2: Amazon SQS キューにメッセージを送信するアクセス許可を Amazon SNS トピックに付与する .................................................................................................................... 95ステップ 3: キューを Amazon SNS トピックにサブスクライブする .......................................... 95ステップ 4: 適切なトピックおよびキューアクションに対するアクセス許可をユーザーに付与する ................................................................................................................................... 96ステップ 5: トピックのキューサブスクリプションをテストする ............................................... 98別のアカウントのキューへのメッセージの送信 ...................................................................... 99AWS CloudFormation テンプレートを使用して Amazon SQS キューにメッセージを送信するトピックを作成する ............................................................................................................ 101

受信者として HTTP/S エンドポイントを使用する場合 .................................................................. 106ステップ 1: エンドポイントで Amazon SNS メッセージを処理する準備が完了していることを確認する ........................................................................................................................... 107ステップ 2: HTTP/HTTPS エンドポイントを Amazon SNS トピックにサブスクライブする ........ 110ステップ 3: サブスクリプションを確認する ........................................................................ 111ステップ 4: サブスクリプションの配信再試行ポリシーを設定する(オプション) ..................... 111ステップ 5: トピックに発行するアクセス許可をユーザーに付与する (オプション) ..................... 111ステップ 6: HTTP/HTTPS エンドポイントにメッセージを送信する ......................................... 112メッセージ署名の確認 ...................................................................................................... 113エンドポイント Java Servlet のコード例 ............................................................................ 115

受信者として AWS Event Fork Pipelines を使用する場合 .............................................................. 118AWS Event Fork Pipelines の詳細 ..................................................................................... 118AWS Event Fork Pipelines のデプロイ ............................................................................... 121

ユーザー通知 .................................................................................................................................. 123受信者としてモバイルアプリケーションを使用する場合 (モバイルプッシュ) .................................... 123

ユーザー通知の仕組み ...................................................................................................... 124Amazon SNS ユーザ通知の前提条件 .................................................................................. 124ユーザー通知プロセスの概要 ............................................................................................. 125Amazon SNS モバイルプッシュの使用 ............................................................................... 125メッセージの配信ステータスのアプリケーション属性 ........................................................... 138アプリケーションイベント通知 ......................................................................................... 141Amazon SNS TTL ........................................................................................................... 143Amazon SNS モバイルプッシュ API .................................................................................. 145API エラー ..................................................................................................................... 146

受信者として携帯電話番号を使用する場合 (SMS 送信) ................................................................. 153プリファレンスの設定 ...................................................................................................... 154メッセージの送信 ............................................................................................................ 157

iv

Page 5: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

複数の電話番号にメッセージを送信する ............................................................................. 161SMS のアクティビティのモニタリング ............................................................................... 167サブスクリプションの管理 ................................................................................................ 172ショートコードの予約 ...................................................................................................... 176サポートされているリージョンおよび国 ............................................................................. 177

トラブルシューティング ................................................................................................................... 186X-Ray を使用したトピックのトラブルシューティング .................................................................. 186

セキュリティ .................................................................................................................................. 187データ保護 ............................................................................................................................. 187

データの暗号化 ............................................................................................................... 187インターネットトラフィックのプライバシー ....................................................................... 193

Identity and Access Management .............................................................................................. 195認証 .............................................................................................................................. 196アクセスコントロール ...................................................................................................... 197概要 .............................................................................................................................. 197アイデンティティベースのポリシーの使用 .......................................................................... 210一時的な認証情報の使用 ................................................................................................... 216API の権限リファレンス ................................................................................................... 216

ログ記録とモニタリング ........................................................................................................... 218CloudTrail を使用して API コールのログを記録する ............................................................. 218CloudWatch を使用したトピックのモニタリング .................................................................. 221

コンプライアンス検証 .............................................................................................................. 225弾力 ...................................................................................................................................... 226インフラストラクチャセキュリティ ........................................................................................... 226ベストプラクティス ................................................................................................................. 226

予防的ベストプラクティス ................................................................................................ 226リリースノート ............................................................................................................................... 229

ドキュメント履歴 .................................................................................................................... 232AWS の用語集 ................................................................................................................................ 243

v

Page 6: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

Amazon Simple Notification Serviceとは

Amazon Simple Notification Service (Amazon SNS) は、サブスクライブしているエンドポイントまたはクライアントへのメッセージの配信または送信を、調整および管理するウェブサービスです。Amazon SNSには、発行者と受信者という 2 種類のクライアントが存在し、それぞれプロデューサーとコンシューマーとも呼ばれます。——発行者は、論理アクセスポイントおよび通信チャネルであるトピックにメッセージを作成して送信することで、受信者と非同期的に通信します。トピックにサブスクライブされているサブスクライバー (ウェブサーバー、E メールアドレス、Amazon SQS キュー、AWS Lambda 関数) は、サポートされているプロトコル (Amazon SQS、HTTP/S、E メール、SMS、Lambda) の 1 つを使用して、メッセージや通知を消費または受信します。

Amazon SNS を使用するときは、所有者としてトピックを作成し、そのトピックと通信できる発行者とサブスクライバーを決定するポリシーを定義することで、アクセスを制御します。発行者は、自分が作成したトピック、または発行を許可されたトピックにメッセージを送信します。各メッセージに固有の送信先アドレスを含める代わりに、発行者はトピックにメッセージを送信します。Amazon SNS では、トピックをそのトピックの受信者リストと照合し、メッセージをそれらの各受信者に送信します。各トピックには、発行者がメッセージを投稿したり、サブスクライバーが通知に登録する Amazon SNS エンドポイントを識別するための一意の名前があります。サブスクライバーは、サブスクライブしているトピックに対して発行されたすべてのメッセージを受信します。また、同じトピックのサブスクライバーはすべて同じメッセージを受信します。

1

Page 7: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 1: AWS アカウントおよび IAM 管理ユーザーを作成する

Amazon SNS へのアクセスをセットアップする

Amazon SNS を使用するには、事前に以下のステップを完了する必要があります。

トピック• ステップ 1: AWS アカウントおよび IAM 管理ユーザーを作成する (p. 2)• ステップ 2: IAM ユーザーを作成して AWS 認証情報を取得する (p. 2)• 次のステップ (p. 3)

ステップ 1: AWS アカウントおよび IAM 管理ユーザーを作成する

任意の AWS のサービスにアクセスするには、まず AWS アカウントを作成する必要があります。これは、AWS 製品を使用できる Amazon のアカウントです。AWS アカウントは、アクティビティおよび使用状況レポートの表示や、認証およびアクセスの管理に使用できます。

1. AWS ホームページに移動して、[AWS アカウントの作成] を選択します。2. 手順に従います。

サインアップ手順の一環として、通話呼び出しを受け取り、電話のキーパッドを用いて PIN を入力することが求められます。

3. AWS アカウントの作成が完了したら、IAM ユーザーガイド の手順に従って最初の IAM 管理者ユーザーおよびグループを作成します。

ステップ 2: IAM ユーザーを作成して AWS 認証情報を取得する

Amazon SNS オペレーションに IAM 管理者ユーザーを使用しないようにするには、Amazon SNS への管理アクセスを必要とするユーザーごとに IAM ユーザーを作成することをお勧めします。

Amazon SNS を使用するには、AmazonSNSFullAccess ポリシーと、IAM ユーザーに関連付けられたAWS 認証情報が必要です。これらの認証情報は、アクセスキー ID とシークレットアクセスキーで構成されます。詳細については、IAM ユーザーガイドの「IAM とは」と AWS General Reference の「AWS セキュリティ認証情報」を参照してください。

1. AWS Identity and Access Management コンソールにサインインします。2. [ユーザー]、[ユーザーの追加] を選択します。3. [ユーザー名] に名前を入力します (例: AmazonSNSAdmin)。4. [Programmatic access (プログラムによるアクセス)] と [AWS マネジメントコンソール アクセス] を選

択します。5. [Console password (コンソールのパスワード)] を設定して [Next: Permissions (次へ: アクセス許可)]

を選択します。

2

Page 8: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド次のステップ

6. [許可を設定] ページで、[Attach existing policies directly (既存のポリシーを直接アタッチする)] を選択します。

7. フィルターに「AmazonSNS」と入力し、[AmazonSNSFullAccess] を選択して、[Next: Review (次へ:タグ)] を選択します。

8. [タグの追加 (オプション)] ページで、[Next: Review (次へ: 確認)] を選択します。9. [確認] ページで、[ユーザーの作成] を選択します。

IAM ユーザーが作成され、[アクセスキー ID] が表示されます。例:

AKIAIOSFODNN7EXAMPLE10. 自分の [シークレットアクセスキー] を表示するには、[表示] を選択します。例:

wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Important

シークレットアクセスキーは、認証情報を作成したときのみ表示またはダウンロードできます (ただし、新しい認証情報はいつでも作成できます)。

11. 認証情報をダウンロードするには、[Download .csv (.csv のダウンロード)] を選択します。このファイルは安全な場所に保管してください。

次のステップAmazon SNS を使用する準備が整ったら、トピックの作成、トピックのサブスクリプションの作成、トピックへのメッセージの発行、およびサブスクリプションとトピックの削除を行うことで、使用を開始 (p. 4)します。

3

Page 9: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド前提条件

Amazon SNS の開始方法このセクションでは、Amazon SNS の理解を役立つように AWS マネジメントコンソール を使用してトピック、サブスクリプション、およびメッセージを管理する方法について説明します。

前提条件開始する前に、「Amazon SNS へのアクセスをセットアップする (p. 2)」の手順を完了します。

ステップ 1: トピックを作成する1. Amazon SNS コンソールにサインインします。2. [トピックの作成] セクションで、[トピック名] に名前 (MyTopic など) を入力します。3. [トピックの作成] を選択します。

トピックが作成され、[MyTopic] ページが表示されます。

トピックの名前、ARN、表示名 (省略可能)、およびトピックの所有者の AWS アカウント ID が [詳細]セクションに表示されます。

4. トピック ARN をクリップボードにコピーします。次に例を示します。

arn:aws:sns:us-east-2:123456789012:MyTopic

ステップ 2: トピックに対するエンドポイントのサブスクリプションを作成する

1. ナビゲーションパネルで、[サブスクリプション] を選択します。2. [サブスクリプション] ページで [サブスクリプションの作成] を選択します。3. [サブスクリプションの作成] ページで、次の操作を行います。

a. 前に作成したトピックの [トピック ARN] を入力します。次に例を示します。

arn:aws:sns:us-east-2:123456789012:MyTopic

Note

現在の AWS アカウントのトピックを一覧表示するには、[トピック ARN] フィールドを選択します。

b. [プロトコル] で、エンドポイントタイプ ([E メール] など) を選択します。c. [エンドポイント] に、通知を受信できる E メールアドレスを入力します。次に例を示します。

[email protected]

4

Page 10: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 3: トピックにメッセージを発行する

Note

サブスクリプションが作成されたら、これを確認する必要があります。HTTP/S エンドポイント、E メールアドレス、および他の AWS アカウントの AWS リソースの確認のみが必要です。同じ AWS アカウント (およびモバイルエンドポイント) の Amazon SQSキューや Lambda 関数の確認は不要です。

d. [Create subscription (サブスクリプションの作成)] を選択します。

サブスクリプションが作成され、[サササササササササ: 1234a567-bc89-012d-3e45-6fg7h890123i] ページが表示されます。

サブスクリプションの ARN、エンドポイント、トピック、ステータス (このステージでは [保留中の確認])、およびプロトコルが [詳細] セクションに表示されます。

4. E メールクライアントで、指定した E メールアドレスを確認し、Amazon SNS からの E メールで [サブスクリプションを確認] を選択します。

5. ウェブブラウザに、サブスクリプションの確認がサブスクリプション ID とともに表示されます。

ステップ 3: トピックにメッセージを発行する1. ナビゲーションパネルで、[トピック] を選択します。2. [トピック] ページで、前に作成したトピックを選択し、[メッセージの発行] を選択します。3. [Publish message to topic (トピックへのメッセージの発行)] ページで、次の操作を行います。

a. (オプション) [メッセージの詳細] セクションで、[件名] を入力します。

Hello from Amazon SNS!

b. [メッセージ本文] セクションで、以下のいずれかの操作を行います。

• [Identical payload for all delivery protocols (すべての配信プロトコルに同一のペイロード)] を選択し、メッセージを入力します。以下に例を示します。

If you receive this message, publishing a message to an Amazon SNS topic works.

• [Custom payload for each delivery protocol (各配信プロトコルのカスタムペイロード)] を選択し、JSON オブジェクトを使用して、各プロトコルに送信するメッセージを定義します。以下に例を示します。

{ "default": "Sample fallback message", "email": "Sample message for email endpoints", "sqs": "Sample message for Amazon SQS endpoints", "lambda": "Sample message for AWS Lambda endpoints", "http": "Sample message for HTTP endpoints", "https": "Sample message for HTTPS endpoints", "sms": "Sample message for SMS endpoints", "APNS": "{\"aps\":{\"alert\": \"Sample message for iOS endpoints\"} }", "APNS_SANDBOX": "{\"aps\":{\"alert\":\"Sample message for iOS development endpoints\"}}", "APNS_VOIP": "{\"aps\":{\"alert\":\"Sample message for Apple VoIP endpoints\"}}", "APNS_VOIP_SANDBOX": "{\"aps\":{\"alert\": \"Sample message for Apple VoIP development endpoints\"} }", "MACOS": "{\"aps\":{\"alert\":\"Sample message for MacOS endpoints\"}}", "MACOS_SANDBOX": "{\"aps\":{\"alert\": \"Sample message for MacOS development endpoints\"} }",

5

Page 11: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 4: サブスクリプションとトピックを削除する

"GCM": "{ \"data\": { \"message\": \"Sample message for Android endpoints\" } }", "ADM": "{ \"data\": { \"message\": \"Sample message for FireOS endpoints\" } }", "BAIDU": "{\"title\":\"Sample message title\",\"description\":\"Sample message for Baidu endpoints\"}", "MPNS": "<?xml version=\"1.0\" encoding=\"utf-8\"?><wp:Notification xmlns:wp=\"WPNotification\"><wp:Tile><wp:Count>ENTER COUNT</wp:Count><wp:Title>Sample message for Windows Phone 7+ endpoints</wp:Title></wp:Tile></wp:Notification>", "WNS": "<badge version=\"1\" value=\"42\"/>"}

詳細については、「カスタムプラットフォーム固有のペイロードのモバイルデバイスへの送信 (p. 136)」を参照してください。

c. [Message attributes (メッセージの属性)] セクションで、属性を追加します。Amazon SNS では、追加された属性とサブスクリプション属性 FilterPolicy を照合し、サブスクライブされたエンドポイントが、発行されたメッセージに関心があるかどうかを判断します。

i. 属性の [Type (タイプ)] を選択します (例: [String.Array]) 。Note

属性の型が String.Array である場合は、配列を角括弧 ([]) で囲みます。配列内で、値の文字列を二重引用符で囲みます。数字またはキーワード true、false、nullを引用符で囲む必要はありません。

ii. 属性の [名前] を入力します (例: customer_interests)。iii. 属性の [値] を入力します (例: ["soccer", "rugby", "hockey"])。

属性の型は String、String.Array、または Number であり、Amazon SNS はそのサブスクリプションにメッセージを送信する前に、存在する場合はサブスクリプションフィルタポリシーに対してメッセージ属性を評価します。

詳細については、「Amazon SNS メッセージ属性 (p. 67)」を参照してください。d. [メッセージの発行] を選択します。

メッセージがトピックに発行されて、[MyTopic] ページに表示されます。

トピックの名前、ARN、表示名 (省略可能)、およびトピックの所有者の AWS アカウント ID が[詳細] セクションに表示されます。

4. E メールクライアントで、前に指定した E メールアドレスを確認し、Amazon SNS からの E メールを読みます。

ステップ 4: サブスクリプションとトピックを削除する

1. ナビゲーションパネルで、[サブスクリプション] を選択します。2. [サブスクリプション] ページで、確認済みのサブスクリプションを選択し、[削除] を選択します。

Note

保留中の確認を削除することはできません。3 日後に、Amazon SNS で自動的に削除されます。

3. [サブスクリプションの削除] ダイアログボックスで、[削除] を選択します。

サブスクリプションが削除されます。

6

Page 12: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド次のステップ

4. ナビゲーションパネルで、[トピック] を選択します。5. [トピック] ページで、トピックを選択して [削除] を選択します。

Important

トピックを削除すると、そのトピックに対するすべてのサブスクリプションも削除されます。

6. [トピック MyTopic の削除] ダイアログボックスで、「delete me」と入力して [削除] を選択します。

トピックが削除されます。

次のステップトピックとサブスクリプションを作成し、トピックにメッセージを送信する方法、およびサブスクリプションとトピックを削除する方法を理解したので、以下を試すことができます。

• トピックのサーバー側の暗号化を有効にする (p. 28)• 暗号化された Amazon SQS キューをサブスクライブしたトピックのサーバー側の暗号化を有効にす

る (p. 31)• AWS Event Fork Pipelines を Amazon SNS トピックにサブスクライブする (p. 50)• AWS Event Fork Pipelines サンプルアプリケーションをデプロイしてテストする (p. 43)• メッセージのフィルタ処理を理解する (p. 70)• AWS 開発者センターを使用してプログラムにより Amazon SNS を操作する方法を理解する• 「Amazon SNS のトラブルシューティング (p. 186)」セクションで、コストとリソースの管理方法に

ついて参照してください。• 「セキュリティ (p. 187)」セクションで、データとデータへのアクセスの保護について理解する

7

Page 13: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド基本的なワークフロー

Amazon SNS のチュートリアル以下のチュートリアルは、AWS マネジメントコンソール、AWS SDK for Java、および AWS SDKfor .NET を使用して Amazon SNS トピックの作成、トピックへのエンドポイントのサブスクライブ、トピックへのメッセージの発行、サブスクリプションとトピックの削除を行う際に役立ちます。サンプルコードを使用する場合は、Java Standard Edition Development Kit または .NET SDKs for Visual Studio をインストールして、サンプルコードの設定を一部変更する必要があります。

Note

その他のプログラミング言語でも Amazon SNS のコードを記述できます。詳細については、AWS SDK のドキュメントを参照してください。AWS Command Line Interface (AWS CLI) や Windows PowerShell などのツールを使用すると、コードを記述せずに Amazon SNS を試すことができます。AWS CLI のサンプルは、AWS CLICommand Reference の「Amazon SNS」セクションにあります。Windows PowerShell のサンプルは、AWS Tools for PowerShell Cmdlet Reference の「Amazon Simple Notification Service」セクションにあります。

トピック• 基本的なワークフロー (p. 8)• ワークフローの発行 (p. 23)• Amazon SNS を安全に使用する (p. 28)• AWS Event Fork Pipelines の使用 (p. 43)

基本的なワークフローこのセクションでは、Amazon SNS の基本的なワークフローを網羅したチュートリアルを示します。

トピック• チュートリアル: Amazon SNS トピックを作成する (p. 8)• チュートリアル: Amazon SNS トピックにエンドポイントをサブスクライブする (p. 11)• チュートリアル: Amazon SNS トピックにメッセージを発行する (p. 14)• チュートリアル: Amazon SNS トピックのタグの一覧表示、追加、および削除 (p. 16)• チュートリアル: サブスクリプションの Amazon SNS デッドレターキューを設定する (p. 18)• チュートリアル : Amazon SNS サブスクリプションとトピックを削除する (p. 21)

チュートリアル: Amazon SNS トピックを作成するAmazon SNS トピックは、通信チャネルとして機能する論理アクセスポイントです。トピックを使用すると、複数のエンドポイント (AWS Lambda、Amazon SQS、HTTP/S、E メールアドレスなど) をグループにまとめることができます。

メッセージプロデューサーシステム (e コマースウェブサイトなど) で当システムのメッセージを必要とする他の複数のサービス (チェックアウトシステムやフルフィルメントシステムなど) にメッセージをブロードキャストするには、プロデューサーシステムのトピックを作成できます。

Amazon SNS で最も一般的な最初のタスクは、トピックの作成です。次のチュートリアルでは、AWS マネジメントコンソール、AWS SDK for Java、および AWS SDK for .NET を使用してトピックを作成する方法を示します。

8

Page 14: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックの作成

トピック• AWS マネジメントコンソール を使用してトピックを作成するには (p. 9)• AWS SDK for Java を使用してトピックを作成するには (p. 10)• AWS SDK for .NET を使用してトピックを作成するには (p. 11)

AWS マネジメントコンソール を使用してトピックを作成するには1. Amazon SNS コンソールにサインインします。2. 以下のいずれかを行います。

• AWS アカウントに作成済みのトピックがない場合は、ホームページで Amazon SNS の説明を読みます。

• AWS アカウントに作成済みのトピックがある場合は、ナビゲーションパネルで [トピック] を選択します。

3. [トピックの作成] セクションで、[トピック名] に名前 (MyTopic など) を入力します。4. (省略可能) [Encryption (暗号化)] セクションを展開し、以下の操作を実行します。詳細については、

「保管時の暗号化 (p. 187)」を参照してください。

a. [Enable encryption (暗号化の有効化)] を選択します。b. カスタマーマスターキー (CMK) を指定します。詳細については、「重要な用語 (p. 188)」を参

照してください。

CMK タイプごとに、[説明]、[アカウント]、および [CMK ARN] が表示されます。

Important

CMK の所有者ではない場合、または kms:ListAliases および kms:DescribeKeyアクセス許可がないアカウントでログインしている場合、Amazon SNS コンソールでCMK に関する情報は表示できません。CMK の所有者に、これらのアクセス権限を付与するよう依頼します。詳細については、AWS Key Management Service Developer Guideの「AWS KMS API のアクセス許可: アクションとリソースのリファレンス」を参照してください。

• AWS 管理の Amazon SNS 用 CMK [(デフォルト) alias/aws/sns] がデフォルトで選択されます。

Note

以下に留意してください。• 初めて AWS マネジメントコンソール を使用して AWS 管理の Amazon SNS 用

CMK をトピックに対して指定すると、AWS KMS は AWS 管理の Amazon SNS 用CMK を作成します。

• または、SSE が有効になっているトピックに対して Publish アクションを初めて使用すると、AWS KMS は AWS 管理の Amazon SNS 用 CMK を作成します。

• AWS アカウントのカスタム CMK を使用するには、[カスタマーマスターキー (CMK)] フィールドを選択し、リストからカスタム CMK を選択します。

Note

カスタム CMK を作成する手順については、AWS Key Management Service DeveloperGuideの「キーの作成」を参照してください。

• 各自の AWS アカウントまたは別の AWS アカウントのカスタム CMK ARN を使用するには、その ARN を [カスタマーマスターキー (CMK)] フィールドに入力します。

9

Page 15: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックの作成

5. (省略可能) トピックのアクセス許可を設定するには、[Access policy (アクセスポリシー)] セクションを展開します。詳細については、「Amazon SNS での Identity and Access Management (p. 195)」を参照してください。

Important

セキュリティ対策として、Amazon SNS では、aws:sourceOwner アクセス許可を使用して、トピックへのアクセスを現在の AWS アカウントの所有者に制限します。

6. (省略可能) 失敗したメッセージ配信試行を Amazon SNS で再試行する方法を設定するには、[Deliveryretry policy (HTTP/S) (配信再試行ポリシー (HTTP/S))] セクションを展開します。詳細については、「メッセージ配信の再試行 (p. 61)」を参照してください。

7. (省略可能) CloudWatch へのメッセージの配信を Amazon SNS でログに記録する方法を設定するには、[Delivery status logging (配信ステータスのログ記録)] セクションを展開します。詳細については、「Amazon SNS メッセージ配信ステータス (p. 58)」を参照してください。

8. (オプション) トピックにメタデータタグを追加するには、[タグ] セクションを展開し、[キー] と[値] (オプション) に入力し、[タグの追加] を選択します。詳細については、「Amazon SNS タグ (p. 90)」を参照してください。

9. [トピックの作成] を選択します。

トピックが作成され、[MyTopic] ページが表示されます。

トピックの名前、ARN、表示名 (省略可能)、およびトピックの所有者の AWS アカウント ID が [詳細]セクションに表示されます。

10. トピック ARN をクリップボードにコピーします。次に例を示します。

arn:aws:sns:us-east-2:123456789012:MyTopic

AWS SDK for Java を使用してトピックを作成するには1. AWS 認証情報を指定します。詳細については、AWS SDK for Java 2.x 開発者ガイド の「開発用の

AWS 認証情報とリージョンのセットアップ」を参照してください。2. コードを作成します。詳細については、「SDK for Java 2.x の使用」を参照してください。

次のコードの抜粋では、トピック MyTopic を作成してトピック ARN を出力します。さらに、以前に正常に実行されたリクエストの CreateTopicRequest リクエスト ID を出力します。

// Create an Amazon SNS topic.final CreateTopicRequest createTopicRequest = new CreateTopicRequest("MyTopic");final CreateTopicResponse createTopicResponse = snsClient.createTopic(createTopicRequest);

// Print the topic ARN.System.out.println("TopicArn:" + createTopicResponse.getTopicArn()); // Print the request ID for the CreateTopicRequest action.System.out.println("CreateTopicRequest: " + snsClient.getCachedResponseMetadata(createTopicRequest));

3. コードをコンパイルして実行します。

トピックが作成され、トピック ARN と CreateTopicRequest リクエスト ID が出力されます。次に例を示します。

TopicArn: arn:aws:sns:us-east-2:123456789012:MyTopicCreateTopicRequest: {AWS_REQUEST_ID=1234a567-bc89-012d-3e45-6fg7h890123i}

10

Page 16: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックにエンドポイントをサブスクライブする

4. トピック ARN は、追加のオペレーションで使用する String 変数に割り当てることができます。次に例を示します。

final String topicArn = "arn:aws:sns:us-east-2:123456789012:MyTopic";

AWS SDK for .NET を使用してトピックを作成するには1. AWS 認証情報を指定します。詳細については、AWS SDK for .NET 開発者ガイド の「AWS 認証情報

の設定」を参照してください。2. コードを作成します。詳細については、「AWS SDK for .NET によるプログラミング」を参照してく

ださい。

次のコードの抜粋では、トピック MyTopic を作成して、トピック ARN と CreateTopicRequestリクエスト ID を出力します。

// Create an Amazon SNS topic.CreateTopicRequest createTopicRequest = new CreateTopicRequest("MyTopic");CreateTopicResponse createTopicResponse = snsClient.CreateTopic(createTopicRequest);

// Print the topic ARN.Console.WriteLine("TopicArn: " + createTopicResponse.TopicArn);

// Print the request ID for the CreateTopicRequest action.Console.WriteLine("CreateTopicRequest: " + createTopicResponse.ResponseMetadata.RequestId);

3. コードをコンパイルして実行します。

トピックが作成され、トピック ARN と CreateTopicRequest リクエスト ID が出力されます。次に例を示します。

TopicArn: arn:aws:sns:us-east-2:123456789012:MyTopicCreateTopicRequest: 1234a567-bc89-012d-3e45-6fg7h890123i

4. トピック ARN は、追加のオペレーションで使用する String 変数に割り当てることができます。次に例を示します。

String topicArn = createTopicResponse.TopicArn;

チュートリアル: Amazon SNS トピックにエンドポイントをサブスクライブするトピック (p. 8)に対して発行されたメッセージを受信するには、エンドポイント (AWSLambda、Amazon SQS、HTTP/S、E メールアドレスなど) をトピックにサブスクライブする必要があります。エンドポイントをトピックにサブスクライブしてサブスクリプションが確認されると、エンドポイントでは、関連付けられたトピックに発行されたメッセージの受信を開始できます。

次のチュートリアルでは、AWS マネジメントコンソール、AWS SDK for Java、および AWS SDKfor .NET を使用してサブスクリプションを作成し、次にエンドポイントをトピックにサブスクライブする方法を示します。

トピック• AWS マネジメントコンソール を使用してエンドポイントを Amazon SNS トピックにサブスクライブ

するには (p. 12)

11

Page 17: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックにエンドポイントをサブスクライブする

• AWS SDK for Java を使用してエンドポイントを Amazon SNS トピックにサブスクライブするには (p. 12)

• AWS SDK for .NET を使用してエンドポイントを Amazon SNS トピックにサブスクライブするには (p. 13)

AWS マネジメントコンソール を使用してエンドポイントをAmazon SNS トピックにサブスクライブするには1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[サブスクリプション] を選択します。3. [サブスクリプション] ページで [サブスクリプションの作成] を選択します。4. [サブスクリプションの作成] ページで、次の操作を行います。

a. 前に作成したトピックの [トピック ARN] を入力します。次に例を示します。

arn:aws:sns:us-east-2:123456789012:MyTopic

Note

現在の AWS アカウントのトピックを一覧表示するには、[トピック ARN] フィールドを選択します。

b. [プロトコル] で、エンドポイントタイプ ([E メール] など) を選択します。c. [エンドポイント] に、通知を受信できる E メールアドレスを入力します。次に例を示します。

[email protected]

Note

サブスクリプションが作成されたら、これを確認する必要があります。HTTP/S エンドポイント、E メールアドレス、および他の AWS アカウントの AWS リソースの確認のみが必要です。同じ AWS アカウント (およびモバイルエンドポイント) の Amazon SQSキューや Lambda 関数の確認は不要です。

d. [Create subscription (サブスクリプションの作成)] を選択します。

サブスクリプションが作成され、[サササササササササ: 1234a567-bc89-012d-3e45-6fg7h890123i] ページが表示されます。

サブスクリプションの ARN、エンドポイント、トピック、ステータス (このステージでは [保留中の確認])、およびプロトコルが [詳細] セクションに表示されます。

5. E メールクライアントで、指定した E メールアドレスを確認し、Amazon SNS からの E メールで [サブスクリプションを確認] を選択します。

6. ウェブブラウザに、サブスクリプションの確認がサブスクリプション ID とともに表示されます。

AWS SDK for Java を使用してエンドポイントを Amazon SNSトピックにサブスクライブするには1. AWS 認証情報を指定します。詳細については、AWS SDK for Java 2.x 開発者ガイド の「開発用の

AWS 認証情報とリージョンのセットアップ」を参照してください。2. コードを作成します。詳細については、「SDK for Java 2.x の使用」を参照してください。

12

Page 18: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックにエンドポイントをサブスクライブする

次のコードの抜粋では、E メールエンドポイントのサブスクリプションを作成してSubscribeRequest リクエスト ID を出力します。

// Subscribe an email endpoint to an Amazon SNS topic.final SubscribeRequest subscribeRequest = new SubscribeRequest(topicArn, "email", "[email protected]");snsClient.subscribe(subscribeRequest);

// Print the request ID for the SubscribeRequest action.System.out.println("SubscribeRequest: " + snsClient.getCachedResponseMetadata(subscribeRequest));System.out.println("To confirm the subscription, check your email.");

3. コードをコンパイルして実行します。

サブスクリプションが作成され、SubscribeRequest リクエスト ID が出力されます。次に例を示します。

SubscribeRequest: {AWS_REQUEST_ID=1234a567-bc89-012d-3e45-6fg7h890123i}To confirm the subscription, check your email.

AWS SDK for .NET を使用してエンドポイントを Amazon SNSトピックにサブスクライブするには1. AWS 認証情報を指定します。詳細については、AWS SDK for .NET 開発者ガイド の「AWS 認証情報

の設定」を参照してください。2. コードを作成します。詳細については、「AWS SDK for .NET によるプログラミング」を参照してく

ださい。

次のコードの抜粋では、E メールエンドポイントのサブスクリプションを作成してSubscribeRequest リクエスト ID を出力します。

// Subscribe an email endpoint to an Amazon SNS topic.SubscribeRequest subscribeRequest = new SubscribeRequest(topicArn, "email", "[email protected]");SubscribeResponse subscribeResponse = snsClient.Subscribe(subscribeRequest);

// Print the request ID for the SubscribeRequest action.Console.WriteLine("SubscribeRequest: " + subscribeResponse.ResponseMetadata.RequestId);Console.WriteLine("To confirm the subscription, check your email.");

3. コードをコンパイルして実行します。

サブスクリプションが作成され、SubscribeRequest リクエスト ID が出力されます。次に例を示します。

SubscribeRequest: 1234a567-bc89-012d-3e45-6fg7h890123iTo confirm the subscription, check your email.

13

Page 19: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックにメッセージを発行する

チュートリアル: Amazon SNS トピックにメッセージを発行するトピックを作成 (p. 8)して、このトピックにエンドポイントをサブスクライブ (p. 11)したら、トピックにメッセージを発行できます。メッセージを発行すると、Amazon SNS は、トピックにサブスクライブされているすべてのエンドポイント (AWS Lambda、Amazon SQS、HTTP/S、E メールアドレスなど) に対してメッセージの配信を試行します。

次のチュートリアルでは、AWS マネジメントコンソール、AWS SDK for Java、および AWS SDKfor .NET を使用してトピックにメッセージを発行する方法を示します。

Important

メッセージは、同じ AWS リージョンにあるトピックとエンドポイントにのみ発行できます。

トピック• AWS マネジメントコンソール を使用して Amazon SNS トピックにメッセージを発行するに

は (p. 14)• AWS SDK for Java を使用して Amazon SNS トピックにメッセージを発行するには (p. 15)• AWS SDK for .NET を使用して Amazon SNS トピックにメッセージを発行するには (p. 16)

AWS マネジメントコンソール を使用して Amazon SNS トピックにメッセージを発行するには1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. [トピック] ページで、前に作成したトピックを選択し、[メッセージの発行] を選択します。4. [Publish message to topic (トピックへのメッセージの発行)] ページで、次の操作を行います。

a. (オプション) [メッセージの詳細] セクションで、[件名] を入力します。

Hello from Amazon SNS!

b. [メッセージ本文] セクションで、以下のいずれかの操作を行います。

• [Identical payload for all delivery protocols (すべての配信プロトコルに同一のペイロード)] を選択し、メッセージを入力します。以下に例を示します。

If you receive this message, publishing a message to an Amazon SNS topic works.

• [Custom payload for each delivery protocol (各配信プロトコルのカスタムペイロード)] を選択し、JSON オブジェクトを使用して、各プロトコルに送信するメッセージを定義します。以下に例を示します。

{ "default": "Sample fallback message", "email": "Sample message for email endpoints", "sqs": "Sample message for Amazon SQS endpoints", "lambda": "Sample message for AWS Lambda endpoints", "http": "Sample message for HTTP endpoints", "https": "Sample message for HTTPS endpoints", "sms": "Sample message for SMS endpoints", "APNS": "{\"aps\":{\"alert\": \"Sample message for iOS endpoints\"} }", "APNS_SANDBOX": "{\"aps\":{\"alert\":\"Sample message for iOS development endpoints\"}}",

14

Page 20: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックにメッセージを発行する

"APNS_VOIP": "{\"aps\":{\"alert\":\"Sample message for Apple VoIP endpoints\"}}", "APNS_VOIP_SANDBOX": "{\"aps\":{\"alert\": \"Sample message for Apple VoIP development endpoints\"} }", "MACOS": "{\"aps\":{\"alert\":\"Sample message for MacOS endpoints\"}}", "MACOS_SANDBOX": "{\"aps\":{\"alert\": \"Sample message for MacOS development endpoints\"} }", "GCM": "{ \"data\": { \"message\": \"Sample message for Android endpoints\" } }", "ADM": "{ \"data\": { \"message\": \"Sample message for FireOS endpoints\" } }", "BAIDU": "{\"title\":\"Sample message title\",\"description\":\"Sample message for Baidu endpoints\"}", "MPNS": "<?xml version=\"1.0\" encoding=\"utf-8\"?><wp:Notification xmlns:wp=\"WPNotification\"><wp:Tile><wp:Count>ENTER COUNT</wp:Count><wp:Title>Sample message for Windows Phone 7+ endpoints</wp:Title></wp:Tile></wp:Notification>", "WNS": "<badge version=\"1\" value=\"42\"/>"}

詳細については、「カスタムプラットフォーム固有のペイロードのモバイルデバイスへの送信 (p. 136)」を参照してください。

c. [Message attributes (メッセージの属性)] セクションで、属性を追加します。Amazon SNS では、追加された属性とサブスクリプション属性 FilterPolicy を照合し、サブスクライブされたエンドポイントが、発行されたメッセージに関心があるかどうかを判断します。

i. 属性の [Type (タイプ)] を選択します (例: [String.Array]) 。

Note

属性の型が String.Array である場合は、配列を角括弧 ([]) で囲みます。配列内で、値の文字列を二重引用符で囲みます。数字またはキーワード true、false、nullを引用符で囲む必要はありません。

ii. 属性の [名前] を入力します (例: customer_interests)。iii. 属性の [値] を入力します (例: ["soccer", "rugby", "hockey"])。

属性の型は String、String.Array、または Number であり、Amazon SNS はそのサブスクリプションにメッセージを送信する前に、存在する場合はサブスクリプションフィルタポリシーに対してメッセージ属性を評価します。

詳細については、「Amazon SNS メッセージ属性 (p. 67)」を参照してください。d. [メッセージの発行] を選択します。

メッセージがトピックに発行されて、[MyTopic] ページに表示されます。

トピックの名前、ARN、表示名 (省略可能)、およびトピックの所有者の AWS アカウント ID が[詳細] セクションに表示されます。

5. E メールクライアントで、前に指定した E メールアドレスを確認し、Amazon SNS からの E メールを読みます。

AWS SDK for Java を使用して Amazon SNS トピックにメッセージを発行するには1. AWS 認証情報を指定します。詳細については、AWS SDK for Java 2.x 開発者ガイド の「開発用の

AWS 認証情報とリージョンのセットアップ」を参照してください。2. コードを作成します。詳細については、「SDK for Java 2.x の使用」を参照してください。

15

Page 21: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックのタグの一覧表示、追加、および削除

次のコードの抜粋では、トピックにメッセージを発行して MessageId を出力します。

// Publish a message to an Amazon SNS topic.final String msg = "If you receive this message, publishing a message to an Amazon SNS topic works.";final PublishRequest publishRequest = new PublishRequest(topicArn, msg);final PublishResult publishResponse = snsClient.publish(publishRequest);

// Print the MessageId of the message.System.out.println("MessageId: " + publishResponse.getMessageId());

3. コードをコンパイルして実行します。

メッセージが発行されて MessageId が出力されます。次に例を示します。

MessageId: 1234a567-bc89-012d-3e45-6fg7h890123i

AWS SDK for .NET を使用して Amazon SNS トピックにメッセージを発行するには1. AWS 認証情報を指定します。詳細については、AWS SDK for .NET 開発者ガイド の「AWS 認証情報

の設定」を参照してください。2. コードを作成します。詳細については、「AWS SDK for .NET によるプログラミング」を参照してく

ださい。

次のコードの抜粋では、トピックにメッセージを発行して MessageId を出力します。

// Publish a message to an Amazon SNS topic.String msg = "If you receive this message, publishing a message to an Amazon SNS topic works.";PublishRequest publishRequest = new PublishRequest(topicArn, msg);PublishResponse publishResponse = snsClient.Publish(publishRequest);

// Print the MessageId of the published message.Console.WriteLine("MessageId: " + publishResponse.MessageId);

3. コードをコンパイルして実行します。

メッセージが発行されて MessageId が出力されます。次に例を示します。

MessageId: 1234a567-bc89-012d-3e45-6fg7h890123i

チュートリアル: Amazon SNS トピックのタグの一覧表示、追加、および削除(コスト配分のためなどに) Amazon SNS トピックのメタデータタグを追加、削除、および一覧表示して、Amazon SNS リソースを追跡することができます次のチュートリアルでは、AWS マネジメントコンソール および AWS SDK for Java を使用してトピックのタグを追加、更新、削除する方法について示します。詳細については、「Amazon SNS タグ (p. 90)」を参照してください。

トピック

16

Page 22: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックのタグの一覧表示、追加、および削除

• AWS マネジメントコンソール を使用して Amazon SNS トピックのメタデータタグを一覧表示、追加、削除するには (p. 17)

• AWS SDK for Java を使用して Amazon SNS トピックのメタデータタグを一覧表示、追加、削除するには (p. 17)

Note

現在、タグベースのアクセスコントロールは使用できません。

AWS マネジメントコンソール を使用して Amazon SNS トピックのメタデータタグを一覧表示、追加、削除するには1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. [トピック] ページで、トピックを選択して [編集] を選択します。4. [Tags (タグ)] セクションを展開します。

トピックに追加されているタグが一覧表示されます。5. トピックのタグを変更します。

• タグを追加するには、[Add tag (タグの追加)] を選択し、[Key (キー)] と [Value (値)] (オプション) を入力します。

• タグを削除するには、キー値ペアの横にある [Remove tag (タグの削除)] を選択します。6. [Save changes (変更の保存)] を選択します。

AWS SDK for Java を使用して Amazon SNS トピックのメタデータタグを一覧表示、追加、削除するには1. AWS 認証情報を指定します。詳細については、AWS SDK for Java 2.x 開発者ガイド の「開発用の

AWS 認証情報とリージョンのセットアップ」を参照してください。2. コードを作成します。詳細については、「SDK for Java 2.x の使用」を参照してください。3. トピックに追加されたタグを一覧表示するには、次のコードを追加します。

final ListTagsForResourceRequest listTagsForResourceRequest = new ListTagsForResourceRequest();listTagsForResourceRequest.setResourceArn(topicArn);final ListTagsForResourceResult listTagsForResourceResult = snsClient.listTagsForResource(listTagsForResourceRequest);System.out.println(String.format("ListTagsForResource: \tTags for topic %s are %s.\n", topicArn, listTagsForResourceResult.getTags()));

4. タグを追加する (またはタグの値を更新するには)、次のコードを追加します。

final Tag tagTeam = new Tag();tagTeam.setKey("Team");tagTeam.setValue("Development");final Tag tagEnvironment = new Tag();tagEnvironment.setKey("Environment");tagEnvironment.setValue("Gamma"); final List<Tag> tagList = new ArrayList<>();tagList.add(tagTeam);tagList.add(tagEnvironment);

17

Page 23: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデッドレターキューを設定する

final TagResourceRequest tagResourceRequest = new TagResourceRequest();tagResourceRequest.setResourceArn(topicArn);tagResourceRequest.setTags(tagList);final TagResourceResult tagResourceResult = snsClient.tagResource(tagResourceRequest);

5. タグのキーを使用してトピックからタグを削除するには、次のコードを追加します。

final UntagResourceRequest untagResourceRequest = new UntagResourceRequest();untagResourceRequest.setResourceArn(topicArn);final List<String> tagKeyList = new ArrayList<>();tagKeyList.add("Team");untagResourceRequest.setTagKeys(tagKeyList);final UntagResourceResult untagResourceResult = snsClient.untagResource(untagResourceRequest);

6. コードをコンパイルして実行します。

既存のタグが一覧表示され、2 つのタグが追加され、1 つのタグがトピックから削除されます。

チュートリアル: サブスクリプションの Amazon SNSデッドレターキューを設定するデッドレターキューは、Amazon SNS サブスクリプションが正常にサブスクライバーに配信されなかったメッセージをターゲットにできる Amazon SQS キューです。クライアントエラーまたはサーバーエラーにより配信できなかったメッセージは、追加の分析や再処理のためにデッドレターキューに維持されます。詳細については、Amazon SNS デッドレターキュー (p. 65) および メッセージ配信の再試行 (p. 61)を参照してください。

次のチュートリアルでは、AWS マネジメントコンソール、AWS SDK for Java、AWS CLI、および AWSCloudFormation を使用して、Amazon SNS サブスクリプションのデッドレターキューを設定する方法を示します。

前提条件次のいずれかのチュートリアルを開始する前に、次の前提条件を完了してください。

1. MyTopic という名前の Amazon SNS トピックを作成 (p. 8)します。2. MyEndpoint という名前の Amazon SQS キューを作成して、Amazon SNS サブスクリプションのエ

ンドポイントとして使用します。3. (AWS CloudFormation へスキップ) キューをトピックにサブスクライブします (p. 93)。4. MyDeadLetterQueue という名前の別の Amazon SQS キューを作成して、Amazon SNS サブスクリ

プションの配信不能キューとして使用します。5. Amazon SQS API アクションへのアクセスを Amazon SNS プリンシパルに付与するに

は、MyDeadLetterQueue に次のキューポリシーを設定します。

{ "Statement": [{ "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic"

18

Page 24: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデッドレターキューを設定する

} } }]}

トピック• AWS マネジメントコンソールを使用して Amazon SNS サブスクリプションのデッドレターキューを

設定するには (p. 19)• AWS SDK for Java を使用して Amazon SNS サブスクリプションのデッドレターキューを設定するに

は (p. 19)• AWS CLI を使用して Amazon SNS サブスクリプションのデッドレターキューを設定するに

は (p. 20)• AWS CloudFormation を使用して Amazon SNS サブスクリプションのデッドレターキューを設定する

には (p. 20)

AWS マネジメントコンソールを使用して Amazon SNS サブスクリプションのデッドレターキューを設定するにはこのチュートリアルを開始する前に、前提条件 (p. 18)となる作業を完了してください。

1. Amazon SQS コンソールにサインインします。2. Amazon SQS キューを作成するか、既存のキューを使用して、キューの [詳細] タブでキューの ARN

を確認します。次に例を示します。

arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue

Note

現在、Amazon SNS サブスクリプションのデッドレターキューとして Amazon SQS FIFOキューを使用できません。

3. Amazon SNS コンソールにサインインします。4. ナビゲーションパネルで、[サブスクリプション] を選択します。5. [サブスクリプション] ページで、既存のサブスクリプションを選択し、[編集] を選択します。6. [Edit 1234a567-bc89-012d-3e45-6fg7h890123i (1234a567-

bc89-012d-3e45-6fg7h890123i の編集)] ページで、[再処理ポリシー (デッドレターキュー)] セクションを展開し、次の作業を行います。

a. [Enabled (有効)] を選択します。b. Amazon SQS キューの ARN を指定します。

7. [Save changes] を選択します。

デッドレターキューを使用するようにサブスクリプションが設定されます。

AWS SDK for Java を使用して Amazon SNS サブスクリプションのデッドレターキューを設定するにはこのチュートリアルを開始する前に、前提条件 (p. 18)となる作業を完了してください。

1. AWS 認証情報を指定します。詳細については、AWS SDK for Java 2.x 開発者ガイド の「開発用のAWS 認証情報とリージョンのセットアップ」を参照してください。

19

Page 25: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデッドレターキューを設定する

2. コードを作成します。詳細については、「SDK for Java 2.x の使用」を参照してください。

Amazon SQS キューの作成の詳細については、Amazon Simple Queue Service 開発者ガイドの「AWS SDK for Java を使用して Amazon SQS キューを設定するには」を参照してください。

次のコード抜粋では、Amazon SNS サブスクリプションの ARN と Amazon SQS キューを使用して、RedrivePolicy リクエストパラメータ属性を設定します。

// Specify the ARN of the Amazon SNS subscription.String subscriptionArn = "arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i";

// Specify the ARN of the Amazon SQS queue to use as a dead-letter queue.String redrivePolicy = "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}";

// Set the specified Amazon SQS queue as a dead-letter queue // of the specified Amazon SNS subscription.SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest() .withSubscriptionArn(subscriptionArn) .withAttributeName("RedrivePolicy") .withAttributeValue(redrivePolicy);sns.setSubscriptionAttributes(request);

3. コードをコンパイルして実行します。

Amazon SQS キューは、指定された Amazon SNS サブスクリプションのデッドレターキューとして設定されます。

AWS CLI を使用して Amazon SNS サブスクリプションのデッドレターキューを設定するにはこのチュートリアルを開始する前に、前提条件 (p. 18)となる作業を完了してください。

1. AWS CLI をインストールして設定します。詳細については、AWS Command Line Interface ユーザーガイドを参照してください。

2. 次のコマンドを使用します。

aws sns set-subscription-attributes \--subscription-arn arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i--attribute-name RedrivePolicy--attribute-value "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}"

AWS CloudFormation を使用して Amazon SNS サブスクリプションのデッドレターキューを設定するにはこのチュートリアルを開始する前に、前提条件 (p. 18)となる作業を完了してください。

1. 次の JSON コードを MyDeadLetterQueue.json という名前のファイルにコピーします。

{ "Resources": {

20

Page 26: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションとトピックを削除する

"mySubscription": { "Type" : "AWS::SNS::Subscription", "Properties" : { "Protocol": "sqs", "Endpoint": "arn:aws:sqs:us-east-2:123456789012:MyEndpoint", "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic", "RedrivePolicy": { "deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue" } } } }}

2. AWS CloudFormation コンソールにサインインします。3. [テンプレートの選択] ページで、[テンプレートを Amazon S3 にアップロード] を選択した

後、MyDeadLetterQueue.json ファイルを選択し、次に [次へ] を選びます。4. [詳細の指定] ページで、[スタック名] に MyDeadLetterQueue を入力してから、[次へ] を選択しま

す。5. [Options] ページで、[Next] を選択します。6. [Review] ページで、[Create ] を選択します。

AWS CloudFormation は MyDeadLetterQueue スタックの作成を開始し、[CREATE_IN_PROGRESS] のステータスが表示されます。プロセスが完了すると、AWSCloudFormation に [CREATE_COMPLETE] ステータスが表示されます。

チュートリアル : Amazon SNS サブスクリプションとトピックを削除するサブスクリプションやトピックが不要になった場合は、まずトピックからのサブスクリプション解除を行います。次にトピックを削除できます。

次のチュートリアルでは、AWS マネジメントコンソール、AWS SDK for Java、および AWS SDKfor .NET を使用してトピックにメッセージを発行する方法を示します。

トピック• AWS マネジメントコンソール を使用して Amazon SNS サブスクリプションとトピックを削除するに

は (p. 21)• AWS SDK for Java を使用して Amazon SNS サブスクリプションとトピックを削除するには (p. 22)• AWS SDK for .NET を使用して Amazon SNS サブスクリプションとトピックを削除するに

は (p. 22)

AWS マネジメントコンソール を使用して Amazon SNS サブスクリプションとトピックを削除するには1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[サブスクリプション] を選択します。3. [サブスクリプション] ページで、確認済みのサブスクリプションを選択し、[削除] を選択します。

Note

保留中の確認を削除することはできません。3 日後に、Amazon SNS で自動的に削除されます。

21

Page 27: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションとトピックを削除する

4. [サブスクリプションの削除] ダイアログボックスで、[削除] を選択します。

サブスクリプションが削除されます。5. ナビゲーションパネルで、[トピック] を選択します。6. [トピック] ページで、トピックを選択して [削除] を選択します。

Important

トピックを削除すると、そのトピックに対するすべてのサブスクリプションも削除されます。

7. [トピック MyTopic の削除] ダイアログボックスで、「delete me」と入力して [削除] を選択します。

トピックが削除されます。

AWS SDK for Java を使用して Amazon SNS サブスクリプションとトピックを削除するには1. AWS 認証情報を指定します。詳細については、AWS SDK for Java 2.x 開発者ガイド の「開発用の

AWS 認証情報とリージョンのセットアップ」を参照してください。2. コードを作成します。詳細については、「SDK for Java 2.x の使用」を参照してください。

次のコードの抜粋では、トピックを削除して、DeleteTopicRequest リクエスト ID を出力します。

Important

トピックを削除すると、そのトピックに対するすべてのサブスクリプションも削除されます。

// Delete an Amazon SNS topic.final DeleteTopicRequest deleteTopicRequest = new DeleteTopicRequest(topicArn);snsClient.deleteTopic(deleteTopicRequest);

// Print the request ID for the DeleteTopicRequest action.System.out.println("DeleteTopicRequest: " + snsClient.getCachedResponseMetadata(deleteTopicRequest));

3. コードをコンパイルして実行します。

トピックが削除され、DeleteTopicRequest リクエスト ID が出力されます。次に例を示します。

DeleteTopicRequest: 1234a567-bc89-012d-3e45-6fg7h890123i

AWS SDK for .NET を使用して Amazon SNS サブスクリプションとトピックを削除するには1. AWS 認証情報を指定します。詳細については、AWS SDK for .NET 開発者ガイド の「AWS 認証情報

の設定」を参照してください。2. コードを作成します。詳細については、「AWS SDK for .NET によるプログラミング」を参照してく

ださい。

次のコードの抜粋では、トピックを削除して、DeleteTopicRequest リクエスト ID を出力します。

22

Page 28: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドワークフローの発行

Important

トピックを削除すると、そのトピックに対するすべてのサブスクリプションも削除されます。

// Delete an Amazon SNS topic.DeleteTopicRequest deleteTopicRequest = new DeleteTopicRequest(topicArn);DeleteTopicResponse deleteTopicResponse = snsClient.DeleteTopic(deleteTopicRequest);

// Print the request ID for the DeleteTopicRequest action.Console.WriteLine("DeleteTopicRequest: " + deleteTopicResponse.ResponseMetadata.RequestId);

3. コードをコンパイルして実行します。

トピックが削除され、DeleteTopicRequest リクエスト ID が出力されます。次に例を示します。

DeleteTopicRequest: 1234a567-bc89-012d-3e45-6fg7h890123i

ワークフローの発行このセクションでは、Amazon SNS のワークフローを発行するための追加のチュートリアルを示します。

トピック• チュートリアル: 属性を使用して Amazon SNS トピックにメッセージを発行する (p. 23)

チュートリアル: 属性を使用して Amazon SNS トピックにメッセージを発行するトピックを作成 (p. 8)してエンドポイントをサブスクライブ (p. 11)したら、メッセージ属性を使用してトピックにメッセージを発行できます。これにより、メッセージに関する構造化メタデータを提供することができます。詳細については、「Amazon SNS メッセージ属性 (p. 67)」を参照してください。

次のチュートリアルでは、AWS マネジメントコンソール、AWS SDK for Java、および AWS SDKfor .NET を使用してトピックにメッセージを発行する方法を示します。

トピック• AWS マネジメントコンソール で属性を使用して Amazon SNS トピックにメッセージを発行するに

は (p. 23)• AWS SDK for Java で属性を使用して Amazon SNS にメッセージを発行するには (p. 24)• AWS SDK for .NET で属性を使用して Amazon SNS トピックにメッセージを発行するには (p. 26)

AWS マネジメントコンソール で属性を使用して Amazon SNSトピックにメッセージを発行するにはAWS マネジメントコンソール で属性を使用して Amazon SNS トピックにメッセージを発行する詳しい説明は、「AWS マネジメントコンソール を使用して Amazon SNS トピックにメッセージを発行するには (p. 14)」を参照してください。

23

Page 29: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド属性を使用したメッセージの発行

AWS SDK for Java で属性を使用して Amazon SNS にメッセージを発行するには1. AWS 認証情報を指定します。詳細については、AWS SDK for Java 2.x 開発者ガイド の「開発用の

AWS 認証情報とリージョンのセットアップ」を参照してください。2. コードを作成します。詳細については、「SDK for Java 2.x の使用」を参照してください。

次のコード例は、属性を使用してメッセージを発行する手順を簡略化するために便利です。SNSMessageAttributes クラスは messageAttributes フィールドをマップとして保存します。過負荷の addAttribute メソッドを使用すると、String、String.Array、Number のデータタイプで属性を追加できます。メッセージを発行するには、AmazonSNS クライアントとトピックのARN を提供して publish メソッドを使用してます。

import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.model.MessageAttributeValue; import com.amazonaws.services.sns.model.PublishRequest; import com.amazonaws.services.sns.model.PublishResult; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; public class SNSMessageAttributes { private String message; private Map<String, MessageAttributeValue> messageAttributes; public SNSMessageAttributes(final String message) { this.message = message; messageAttributes = new HashMap<>(); } public String getMessage() { return message; } public void setMessage(final String message) { this.message = message; } public void addAttribute(final String attributeName, final String attributeValue) { final MessageAttributeValue messageAttributeValue = new MessageAttributeValue() .withDataType("String") .withStringValue(attributeValue); messageAttributes.put(attributeName, messageAttributeValue); } public void addAttribute(final String attributeName, final ArrayList<?> attributeValues) { String valuesString, delimiter = ", ", prefix = "[", suffix = "]"; if (attributeValues.get(0).getClass() == String.class) { delimiter = "\", \""; prefix = "[\""; suffix = "\"]"; } valuesString = attributeValues .stream() .map(Object::toString) .collect(Collectors.joining(delimiter, prefix, suffix));

24

Page 30: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド属性を使用したメッセージの発行

final MessageAttributeValue messageAttributeValue = new MessageAttributeValue() .withDataType("String.Array") .withStringValue(valuesString); messageAttributes.put(attributeName, messageAttributeValue); } public void addAttribute(final String attributeName, final Number attributeValue) { final MessageAttributeValue messageAttributeValue = new MessageAttributeValue() .withDataType("Number") .withStringValue(attributeValue.toString()); messageAttributes.put(attributeName, messageAttributeValue); } public String publish(final AmazonSNS snsClient, final String topicArn) { final PublishRequest request = new PublishRequest(topicArn, message) .withMessageAttributes(messageAttributes); final PublishResult result = snsClient.publish(request); return result.getMessageId(); } }

次のコード例の抜粋では、SNSMessageAttributes クラスの例を初期化して使用しています。

// Initialize the example class. final SNSMessageAttributes message = new SNSMessageAttributes(messageBody); // Add message attributes with string values. message.addAttribute("store", "example_corp"); message.addAttribute("event", "order_placed"); // Add a message attribute with a list of string values. final ArrayList<String> interestsValues = new ArrayList<String>(); interestsValues.add("soccer"); interestsValues.add("rugby"); interestsValues.add("hockey"); message.addAttribute("customer_interests", interestsValues); // Add a message attribute with a numeric value. message.addAttribute("price_usd", 1000); // Add a Boolean attribute for filtering using subscription filter policies. // The class applies the String.Array data type to this attribute, allowing it // to be evaluated by a filter policy. final ArrayList<Boolean> encryptedVal = new ArrayList<Boolean>(); encryptedVal.add(false); message.addAttribute("encrypted", encryptedVal); // Publish the message. message.publish(snsClient, topicArn); // Print the MessageId of the message. System.out.println("MessageId: " + publishResponse.getMessageId());

3. コードをコンパイルして実行します。

メッセージが発行されて MessageId が出力されます。次に例を示します。

MessageId: 1234a567-bc89-012d-3e45-6fg7h890123i

25

Page 31: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド属性を使用したメッセージの発行

AWS SDK for .NET で属性を使用して Amazon SNS トピックにメッセージを発行するには1. AWS 認証情報を指定します。詳細については、AWS SDK for .NET 開発者ガイド の「AWS 認証情報

の設定」を参照してください。2. コードを作成します。詳細については、「AWS SDK for .NET によるプログラミング」を参照してく

ださい。3. 次のコード例は、属性を使用してメッセージを発行する手順を簡略化するために便

利です。SNSMessageAttributes クラスは MessageAttributes フィールドをディクショナリとして保存します。過負荷の addAttribute メソッドを使用すると、String、String.Array、Number のデータタイプで属性を追加できます。メッセージを発行するには、AmazonSimpleNotificationServiceClient クライアントとトピックの ARN を提供して publish メソッドを使用します。

using System; using System.Collections.Generic; using Amazon.SimpleNotificationService; using Amazon.SimpleNotificationService.Model; namespace SNSCreatePlatformEndpoint { class SNSMessageAttributes { private String message; private Dictionary<String, MessageAttributeValue> messageAttributes; public SNSMessageAttributes(String message) { this.message = message; messageAttributes = new Dictionary<string, MessageAttributeValue>(); } public string Message { get => this.message; set => this.message = value; } public void AddAttribute(String attributeName, String attributeValue) { messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String", StringValue = attributeValue }; } public void AddAttribute(String attributeName, float attributeValue) { messageAttributes[attributeName] = new MessageAttributeValue { DataType = "Number", StringValue = attributeValue.ToString() }; } public void AddAttribute(String attributeName, int attributeValue) { messageAttributes[attributeName] = new MessageAttributeValue

26

Page 32: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド属性を使用したメッセージの発行

{ DataType = "Number", StringValue = attributeValue.ToString() }; } public void AddAttribute(String attributeName, List<String> attributeValue) { String valueString = "[\"" + String.Join("\", \"", attributeValue.ToArray()) + "\"]"; messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String.Array", StringValue = valueString }; } public void AddAttribute(String attributeName, List<float> attributeValue) { String valueString = "[" + String.Join(", ", attributeValue.ToArray()) + "]"; messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String.Array", StringValue = valueString }; } public void AddAttribute(String attributeName, List<int> attributeValue) { String valueString = "[" + String.Join(", ", attributeValue.ToArray()) + "]"; messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String.Array", StringValue = valueString }; } public void AddAttribute(String attributeName, List<Boolean> attributeValue) { String valueString = "[" + String.Join(", ", attributeValue.ToArray()) + "]"; messageAttributes[attributeName] = new MessageAttributeValue { DataType = "String.Array", StringValue = valueString }; } public String Publish(AmazonSimpleNotificationServiceClient snsClient, String topicArn) { PublishRequest request = new PublishRequest { TopicArn = topicArn, MessageAttributes = messageAttributes, Message = message }; PublishResponse result = snsClient.Publish(request); return result.MessageId; } } }

27

Page 33: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS を安全に使用する

次のコード例の抜粋では、SNSMessageAttributes クラスの例を初期化して使用しています。

// Initialize the example class. SNSMessageAttributes message = new SNSMessageAttributes(messageBody); // Add message attributes with string values. message.AddAttribute("store", "example_corp"); message.AddAttribute("event", "order_placed"); // Add a message attribute with a list of string values. List<String> interestsValues = new List<String>(); interestsValues.Add("soccer"); interestsValues.Add("rugby"); interestsValues.Add("hockey"); message.AddAttribute("customer_interests", interestsValues); // Add a message attribute with a numeric value. message.AddAttribute("price_usd", 1000); // Add a Boolean attribute for filtering using subscription filter policies. // The class applies a String.Array data type to this attribute, allowing it // to be evaluated by a filter policy. List<Boolean> encryptedVal = new List<Boolean>(); encryptedVal.Add(false); message.AddAttribute("encrypted", encryptedVal); // Publish the message. String msgId = message.Publish(snsClient, topicArn); // Print the MessageId of the published message. Console.WriteLine("MessageId: " + msgId);

4. コードをコンパイルして実行します。

メッセージが発行されて MessageId が出力されます。次に例を示します。

MessageId: 1234a567-bc89-012d-3e45-6fg7h890123i

Amazon SNS を安全に使用するこのセクションでは、Amazon SNS を安全に使用することに関するチュートリアルを示します。

トピック• チュートリアル: Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にする (p. 28)• チュートリアル: 暗号化された Amazon SQS キューをサブスクライブして Amazon SNS トピックの

サーバー側の暗号化 (SSE) を有効にする (p. 31)• チュートリアル: Amazon VPC から Amazon SNS メッセージをプライベートで発行する (p. 33)

チュートリアル: Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にするトピックのサーバー側の暗号化 (SSE) を有効にしてトピックのデータを保護できます。SSE の使用の詳細については、「保管時の暗号化 (p. 187)」を参照してください。

28

Page 34: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックの SSE を有効にする

Important

SSE が有効なトピックへのリクエストでは必ず、HTTPS と署名バージョン 4 を使用する必要があります。

次のチュートリアルでは、AWS マネジメントコンソール および AWS SDK for Java を使用して、既存のAmazon SNS トピックの SSE を有効化/無効化、および設定する方法を示します。そのために、API のCreateTopic アクションと SetTopicAttributes アクションを使用して KmsMasterKeyId 属性を設定します。

トピック• AWS マネジメントコンソール を使用して Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効

にするには (p. 29)• AWS SDK for Java を使用して Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にするに

は (p. 30)

AWS マネジメントコンソール を使用して Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にするには1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. [トピック] ページで、トピックを選択し、[アクション]、[編集] の順に選択します。4. [Encryption (暗号化)] セクションを展開し、以下の操作を実行します。

a. [Enable encryption (暗号化の有効化)] を選択します。b. カスタマーマスターキー (CMK) を指定します。詳細については、「重要な用語 (p. 188)」を参

照してください。

CMK タイプごとに、[説明]、[アカウント]、および [CMK ARN] が表示されます。

Important

CMK の所有者ではない場合、または kms:ListAliases および kms:DescribeKeyアクセス許可がないアカウントでログインしている場合、Amazon SNS コンソールでCMK に関する情報は表示できません。CMK の所有者に、これらのアクセス権限を付与するよう依頼します。詳細については、AWS Key Management Service Developer Guideの「AWS KMS API のアクセス許可: アクションとリソースのリファレンス」を参照してください。

• AWS 管理の Amazon SNS 用 CMK [(デフォルト) alias/aws/sns] がデフォルトで選択されます。

Note

以下に留意してください。• 初めて AWS マネジメントコンソール を使用して AWS 管理の Amazon SNS 用

CMK をトピックに対して指定すると、AWS KMS は AWS 管理の Amazon SNS 用CMK を作成します。

• または、SSE が有効になっているトピックに対して Publish アクションを初めて使用すると、AWS KMS は AWS 管理の Amazon SNS 用 CMK を作成します。

• AWS アカウントのカスタム CMK を使用するには、[カスタマーマスターキー (CMK)] フィールドを選択し、リストからカスタム CMK を選択します。

Note

カスタム CMK を作成する手順については、AWS Key Management Service DeveloperGuideの「キーの作成」を参照してください。

29

Page 35: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドトピックの SSE を有効にする

• 各自の AWS アカウントまたは別の AWS アカウントのカスタム CMK ARN を使用するには、その ARN を [カスタマーマスターキー (CMK)] フィールドに入力します。

5. [Save changes] を選択します。

トピックの SSE が有効になり、[MyTopic (ササササササ)] ページが表示されます。

トピックの暗号化ステータス、AWS アカウント、カスタマーマスターキー (CMK)、CMK ARN、および説明が [暗号化] タブに表示されます。

AWS SDK for Java を使用して Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にするには1. トピックの暗号化およびメッセージの暗号化と復号を許可するように AWS KMS キーポリシーを設定

します。詳細については、「AWS KMS アクセス許可を設定する (p. 190)」を参照してください。2. AWS 認証情報を指定します。詳細については、AWS SDK for Java 2.x 開発者ガイド の「開発用の

AWS 認証情報とリージョンのセットアップ」を参照してください。3. カスタマーマスターキー (CMK) ID を取得します。詳細については、「重要な用語 (p. 188)」を参照

してください。

Note

以下に留意してください。

• 初めて AWS マネジメントコンソール を使用して AWS 管理の Amazon SNS 用 CMK をトピックに対して指定すると、AWS KMS は AWS 管理の Amazon SNS 用 CMK を作成します。

• または、SSE が有効になっているトピックに対して Publish アクションを初めて使用すると、AWS KMS は AWS 管理の Amazon SNS 用 CMK を作成します。

4. コードを作成します。詳細については、「SDK for Java 2.x の使用」を参照してください。

サーバー側の暗号化を有効にするには、CreateTopic アクションまたは SetTopicAttributes アクションを使用して、KmsMasterKeyId 属性を設定することで CMK ID を指定します。

次のコードの抜粋では、AWS で管理されている Amazon SNS 用 CMK を使用して、既存のトピックの SSE を有効にします。

// Enable server-side encryption by specifying the alias ARN of the AWS managed CMK for Amazon SNS. final String kmsMasterKeyAlias = "arn:aws:kms:us-east-2:123456789012:alias/aws/sns"; final SetTopicAttributesRequest setAttributesRequest = new SetTopicAttributesRequest() .withTopicArn(topicArn) .withAttributeName("KmsMasterKeyId") .withAttributeValue(kmsMasterKeyAlias); final SetTopicAttributesResponse setAttributesResponse = snsClient.setTopicAttributes(setAttributesRequest)

既存のトピックに対してサーバー側の暗号化を無効にするには、SetTopicAttributes アクションを使用して、KmsMasterKeyId 属性を空の文字列に設定します。

Important

null は、KmsMasterKeyId の有効な値ではありません。

次のコードの抜粋では、カスタム CMK で SSE を使用して新しいトピックを作成します。30

Page 36: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド暗号化されたキューをサブスクライブしたトピックの SSE を有効にする

final Map<String, String> attributes = new HashMap<String, String>(); // Enable server-side encryption by specifying the alias ARN of the custom CMK. final String kmsMasterKeyAlias = "arn:aws:kms:us-east-2:123456789012:alias/MyAlias"; attributes.put("KmsMasterKeyId", kmsMasterKeyAlias); final CreateTopicRequest createRequest = new CreateTopicRequest("MyTopic") .withAttributes(attributes); final CreateTopicRespone createResponse = snsClient.createTopic(createRequest);

チュートリアル: 暗号化された Amazon SQS キューをサブスクライブして Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にするトピックのサーバー側の暗号化 (SSE) を有効にしてトピックのデータを保護できます。暗号化されたAmazon SQS キューにメッセージを送信することを Amazon SNS に許可するには、Amazon SQS キューに関連付けられたカスタマーマスターキー (CMK) のポリシーステートメントにより、AWS KMS API アクション (GenerateDataKey と Decrypt) へのアクセス権を Amazon SNS サービスプリンシパルに付与する必要があります。AWS 管理の CMK では、ポリシーの変更をサポートしていないため、カスタムのCMK を使用する必要があります。SSE の使用の詳細については、「保管時の暗号化 (p. 187)」を参照してください。

次のチュートリアルでは、AWS マネジメントコンソール を使用して、暗号化された Amazon SQS キューのサブスクライブ先である Amazon SNS トピックの SSE を有効にする方法について説明します。

ステップ 1: カスタム CMK を作成するには1. 少なくとも AWSKeyManagementServicePowerUser ポリシーを持つユーザーで AWS KMS コン

ソールにサインインします。2. [キーの作成] を選択します。3. [Add alias and description (エイリアスと説明の追加)] ページに、キーの [エイリアス] (例:

MyCustomCMK) を入力し、[次へ] を選択します。4. [タグの追加] ページで、[次へ] を選択します。5. [キー管理アクセス許可の定義] ページの [キー管理者] セクションで、IAM ロールまたは IAM ユーザー

を選択してから [次へ] を選択します。6. [キーの使用アクセス許可を定義] ページの [このアカウント] セクションで、IAM ロールまたは IAM

ユーザーを選択してから [次へ] を選択します。7. [キーポリシーの表示と編集] ページで、次のステートメントをキーポリシーに追加し、[完了] を選択

します。

{ "Sid": "Allow Amazon SNS to use this key", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*"

31

Page 37: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド暗号化されたキューをサブスクライブしたトピックの SSE を有効にする

}

新しいカスタム CMK がキーのリストに表示されます。

ステップ 2: 暗号化された Amazon SNS トピックを作成するには1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. [トピックの作成] を選択します。4. [新しいトピックの作成] ダイアログボックスの [トピック名] に、トピックの名前 (例:

MyEncryptedTopic) を入力し、[トピックの作成] を選択します。5. [Encryption (暗号化)] セクションを展開し、以下の操作を実行します。

a. [Enable server-side encryption (サーバー側の暗号化を有効にする)] を選択します。b. カスタマーマスターキー (CMK) を指定します。詳細については、「重要な用語 (p. 188)」を参

照してください。

CMK タイプごとに、[説明]、[アカウント]、および [CMK ARN] が表示されます。Important

CMK の所有者ではない場合、または kms:ListAliases および kms:DescribeKeyアクセス許可がないアカウントでログインしている場合、Amazon SNS コンソールでCMK に関する情報は表示できません。CMK の所有者に、これらのアクセス権限を付与するよう依頼します。詳細については、『AWS Key Management Service Developer Guide』の「AWS KMS API のアクセス許可: アクションとリソースのリファレンス」を参照してください。

c. [カスタマーマスターキー (CMK)] で、先ほど作成した (p. 31) [MyCustomCMK] を選択して、[サーバー側の暗号化を有効にする] を選択します。

6. [変更の保存] を選択します。

トピックの SSE が有効になり、[MyTopic (マイトピック)] ページが表示されます。

トピックの暗号化ステータス、AWS アカウント、カスタマーマスターキー (CMK)、CMK ARN、および説明が [暗号化] タブに表示されます。

暗号化された新しいトピックが、トピックのリストに表示されます。

ステップ 3: 暗号化された Amazon SQS キューを作成してサブスクライブするには1. Amazon SQS コンソールにサインインします。2. [新しいキューの作成] を選択します。3. [新しいキューの作成] ページで、次の操作を実行します。

a. [キュー名] (例: MyEncryptedQueue1) を入力します。b. [標準キュー]、[キューの設定] の順に選択します。c. [SSE の使用] を選択します。d. [AWS AWS KMS カスタマーマスターキー (CMK)] で、先ほど作成した (p. 31)

[MyCustomCMK] を選択して、[キューの作成] を選択します。4. プロセスを繰り返して、2 つめのキュー (MyEncryptedQueue2) を作成します。

暗号化された新しいキューがキューのリストに表示されます。

32

Page 38: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

5. Amazon SQS コンソールで、MyEncryptedQueue1 および MyEncryptedQueue2 を選択して、[キューのアクション]、[SNS トピックへのキューのサブスクライブ] の順に選択します。

6. [トピックへのサブスクライブ] ダイアログボックスの [トピックの選択] で、[MyEncryptedTopic]、[サブスクライブ] の順に選択します。

暗号化されたトピックに対する暗号化されたキューのサブスクリプションは、[トピックのサブスクリプション結果] ダイアログボックスに表示されます。

7. [OK] を選択します。

ステップ 4: 暗号化されたトピックにメッセージを発行するには1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. トピックのリストから [MyEncryptedTopic] を選択し、[メッセージの発行] を選択します。4. [メッセージの発行] ページで、次の操作を行います。

a. (オプション) [メッセージの詳細] セクションで、[件名] (Testing message publishing など)を入力します。

b. [Message body (メッセージの本文)] セクションで、メッセージの本文 (My message body isencrypted at rest. など) を入力します。

c. [メッセージの発行] を選択します。

メッセージは、サブスクライブされた暗号化キューに発行されます。

ステップ 5: メッセージの配信を確認するには1. Amazon SQS コンソールにサインインします。2. キューのリストで [MyEncryptedQueue1] を選択し、[キュー操作]、[メッセージの表示/削除] の順に選

択します。3. [View/Delete Messages in MyEncryptedQueue1] ページで、[メッセージのポーリングを開始] を選択し

ます。

先ほど送信した (p. 33)メッセージが表示されます。4. メッセージを表示するには、[詳細] を選択します。5. 完了したら、[Close] を選択します。6. [MyEncryptedQueue2] に対してこの処理を繰り返します。

チュートリアル: Amazon VPC から Amazon SNSメッセージをプライベートで発行するこのチュートリアルでは、プライベートネットワークでメッセージを安全に保ちながら、Amazon SNS トピックに発行する方法について説明します。Amazon Virtual Private Cloud (Amazon VPC) でホストされている Amazon EC2 インスタンスからメッセージを発行できます。メッセージは、パブリックインターネットを移動せずに AWS ネットワーク内に留まります。VPC からプライベートにメッセージを発行することにより、アプリケーションと Amazon SNS 間のトラフィックのセキュリティを強化できます。このセキュリティは、顧客に関する個人を特定できる情報 (PII) を公開する場合や、アプリケーションが市場規制の対象となる場合に重要になります。たとえば、プライベートな発行は、Health Insurance Portability andAccountability Act (HIPAA) に準拠する必要があるヘルスケアシステムや、Payment Card Industry DataSecurity Standard (PCI DSS) に準拠する必要がある財務システムがある場合に役立ちます。

33

Page 39: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

このチュートリアルを完了するには、以下のことが必要です。

• AWS CloudFormation テンプレートを使用して、AWS アカウントの一時的なプライベートネットワークを自動的に作成します。

• VPC を Amazon SNS に接続する VPC エンドポイントを作成します。• Amazon EC2 インスタンスにログインし、Amazon SNS トピックにメッセージをプライベートで発行し

ます。• メッセージが正常に配信されたことを確認します。• このチュートリアル用に作成したリソースを削除し、AWS アカウントに残らないようにします。

次の図は、このチュートリアルを完了する際に AWS アカウントで作成するプライベートネットワークを示しています。

このネットワークは、Amazon EC2 インスタンスを含む VPC で構成されます。インスタンスはインターフェイス VPC エンドポイントを介して Amazon SNS に接続します。このタイプのエンドポイントは、AWSPrivateLink を使用するサービスに接続します。この接続が確立されたら、ネットワークがパブリックインターネットから切断されている場合でも、Amazon EC2 インスタンスにログインして AmazonSNS トピックにメッセージを発行できます。このトピックは、受け取ったメッセージを、2 つの AWSLambda サブスクライブ関数にファンアウトします。これらの関数は、受け取ったメッセージを AmazonCloudWatch Logs に記録します。

このチュートリアルの完了には 20 分ほどかかります。

トピック• 開始する前に (p. 34)• ステップ 1: Amazon EC2 キーペアの作成 (p. 35)• ステップ 2: AWS リソースを作成する (p. 35)• ステップ 3: Amazon EC2 インスタンスにインターネットアクセスがないことを確認する (p. 37)• ステップ 4: Amazon SNS の Amazon VPC エンドポイントを作成する (p. 38)• ステップ 5: Amazon SNS トピックにメッセージを発行する (p. 40)• ステップ 6: メッセージの配信を確認する (p. 40)• ステップ 7: クリーンアップ (p. 42)• 関連リソース (p. 43)

開始する前にこのチュートリアルを開始する前に、Amazon Web Services (AWS) アカウントが必要です。サインアップすると、Amazon SNS、Amazon VPC など AWS のすべてのサービスに対してお客様のアカウントが自動

34

Page 40: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

的にサインアップされます。AWS アカウントをまだ作成していない場合は、https://aws.amazon.com/ に移動し、[まずは無料で始める] を選択します。

ステップ 1: Amazon EC2 キーペアの作成Amazon EC2 インスタンスへのログインには、キーペアが使用されます。これは、ログイン情報の暗号化に使用されるパブリックキーと、その復号に使用されるプライベートキーで構成されます。キーペアを作成するときは、プライベートキーのコピーをダウンロードします。このチュートリアルでは、キーペアを使用して Amazon EC2 インスタンスにログインします。ログインするには、キーペアの名前を指定し、プライベートキーを指定します。

キーペアを作成するには

1. AWS マネジメントコンソールにサインインをしたあと、https://console.aws.amazon.com/ec2/ にあるAmazon EC2 コンソールを開きます。

2. 左のナビゲーションメニューで、[Network & Security (ネットワーク & セキュリティ)] セクションを見つけます。次に、[キーペア] を選択します。

3. [Create Key Pair] を選択します。4. [キーペアの作成] ウィンドウで、[キーペア名] に「VPCE-Tutorial-KeyPair」と入力します。続い

て、[Create] を選択します。

5. ブラウザによって秘密キーファイルが自動的にダウンロードされます。そのファイルを安全な場所に保存します。Amazon EC2 ではそのファイルの拡張子は .pem です。

6. (オプション) Mac または Linux コンピュータで SSH クライアントを使用してインスタンスに接続している場合は、chmod コマンドを使用してプライベートキーファイルの権限を設定すると、お客様のみがそれを読み取ることができます。

a. ターミナルを開き、プライベートキーを含むディレクトリに移動します。

$ cd /filepath_to_private_key/

b. 次のコマンドを使用してアクセス権限を設定します。

$ chmod 400 VPCE-Tutorial-KeyPair.pem

ステップ 2: AWS リソースを作成するこのチュートリアルをサポートするインフラストラクチャをセットアップするには、AWSCloudFormation テンプレートを使用します。テンプレートは、Amazon EC2 インスタンスや AmazonSNS トピックなどの AWS リソースを構築するための設計図として機能するファイルです。このチュートリアルのテンプレートは GitHub で提供されていて、ダウンロードできます。

AWS CloudFormation にテンプレートを提供すると、AWS CloudFormation は AWS アカウントでスタックとして必要なリソースをプロビジョニングします。スタックは、単一のユニットとして管理できるリ

35

Page 41: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

ソースのコレクションです。このチュートリアルを終了すると、AWS CloudFormation を使用してスタック内のすべてのリソースを一度に削除できます。これらのリソースは、希望しない限り AWS アカウントには残りません。

このチュートリアルのスタックには、次のリソースが含まれます。

• VPC および関連するネットワーキングリソース (サブネット、セキュリティグループ、インターネットゲートウェイ、およびルートテーブルを含む)。

• VPC 内のサブネットに起動された Amazon EC2 インスタンス。• Amazon SNS トピック。• 2 つの AWS Lambda 関数。これらの関数は、Amazon SNS トピックに発行されたメッセージを受け取

り、CloudWatch Logs にイベントを記録します。• Amazon CloudWatch メトリクスおよびログ。• Amazon EC2 インスタンスに Amazon SNS の使用を許可する IAM ロール、および CloudWatch ログへ

の書き込みを Lambda 関数に許可する IAM ロール。

AWS リソースを作成するには

1. GitHub ウェブサイトからテンプレート ファイルをダウンロードします。2. AWS CloudFormation コンソールにサインインします。3. [Create Stack] を選択します。4. [テンプレートの選択] ページで、[テンプレートを Amazon S3 にアップロード] を選択してから、ファ

イルを選択して [次へ] を選択します。5. [詳細の指定] ページで、スタック名とキー名を指定します。

a. [Stack name] に VPCE-Tutorial-Stack を入力します。b. [KeyName] で、[VPCE-Tutorial-KeyPair] を選択します。c. [SSHLocation] で、デフォルト値の 0.0.0.0/0 のままにします。

d. [Next (次へ)] を選択します。6. [オプション] ページで、すべてのデフォルト値を受け入れ、[次へ] を選択します。7. [Review (確認)] ページで、スタックの詳細を確認します。8. [機能] で、AWS CloudFormation がカスタム名で IAM リソースを作成する可能性があることに同意し

ます。9. [Create] を選択します。

AWS CloudFormation コンソールで [スタック] ページが開きます。VPCE-Tutorial-Stack のステータスは CREATE_IN_PROGRESS です。数分後に作成プロセスが完了し、ステータスがCREATE_COMPLETE に変わります。

36

Page 42: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

Tip

[更新] ボタンを選択して、スタックの最新のステータスを表示します。

ステップ 3: Amazon EC2 インスタンスにインターネットアクセスがないことを確認する前のステップの VPC で起動された Amazon EC2 インスタンスにはインターネットアクセスがありません。アウトバウンドトラフィックが禁止されているため、Amazon SNS にメッセージを発行することができません。インスタンスにログインしてこれを確認します。次に、パブリックエンドポイントへの接続と、Amazon SNS へのメッセージの発行を試みます。

チュートリアルのこの時点では、発行の試みは失敗します。後のステップで、Amazon SNS の VPC エンドポイントを作成すると、発行の試みは成功します。

Amazon EC2 インスタンスに接続するには

1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。2. 左のナビゲーションメニューで、[インスタンス] セクションを見つけます。続いて、[インスタンス]

を選択します。3. インスタンスの一覧で、[VPCE-Tutorial-EC2Instance] を選択します。4. [Public DNS (IPv4)] 列に示されたホスト名をコピーします。

5. ターミナルを開きます。キーペアが含まれているディレクトリから、以下のコマンドを使用してインスタンスに接続します。ここで、instance-hostname は、Amazon EC2 コンソールからコピーしたホスト名です。

$ ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@instance-hostname

インスタンスがインターネットに接続されていないことを確認するには

• ターミナルで、amazon.com など任意のパブリックエンドポイントへの接続を試します。

$ ping amazon.com

接続の試行が失敗するため、いつでもキャンセルできます (Windows では Ctrl + C、macOS ではCommand + C)。

インスタンスが Amazon SNS に接続されていないことを確認するには

1. Amazon SNS コンソール (https://console.aws.amazon.com/sns/) を開きます。

37

Page 43: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

2. 左側のナビゲーションメニューで、[トピック] を選択します。3. [トピック] ページで、トピック [VPCE-Tutorial-Topic] の Amazon リソースネーム (ARN) をコピーし

ます。4. ターミナルで、トピックへのメッセージを発行を試みます。

$ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"

発行の試みが失敗するため、いつでもキャンセルできます。

ステップ 4: Amazon SNS の Amazon VPC エンドポイントを作成するVPC を Amazon SNS に接続するには、インターフェイス VPC エンドポイントを定義します。エンドポイントを追加したら、VPC の Amazon EC2 インスタンスにログインし、そこから Amazon SNS API を使用できます。トピックにメッセージを発行でき、メッセージはプライベートに発行されます。メッセージはAWS ネットワーク内にとどまり、パブリックインターネットを移動することはありません。

Note

インスタンスは、依然として AWS の他のサービスやインターネットのエンドポイントにアクセスできません。

エンドポイントを作成するには

1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。2. 左側のナビゲーションメニューで、[エンドポイント] を選択します。3. [Create Endpoint] を選択します。4. [エンドポイントの作成] ページの [サービスカテゴリ] で、デフォルトの選択である [AWS サービス] を

そのままにします。5. [サービス名] で、Amazon SNS のサービス名を選択します。

このサービス名は、選択したリージョンによって異なります。たとえば、米国東部(バージニア北部) を選択した場合、サービス名は com.amazonaws.us-east-1.sns です。

6. [VPC] で、[VPCE-Tutorial-VPC] と言う名前の VPC を選択します。

7. [サブネット] で、サブネット ID に VPCE-Tutorial-Subnet を持つサブネットを選択します。

38

Page 44: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

8. [プライベート DNS 名を有効にする] で、[このエンドポイントで有効にする] を選択します。9. [セキュリティグループ] で、[セキュリティグループの選択] を選択し、[VPCE-Tutorial-SecurityGroup]

を選択します。

10. [Create endpoint] を選択します。Amazon VPC コンソールで、VPC エンドポイントが作成されたことが確認されます。

11. [Close] を選択します。

Amazon VPC コンソールで [エンドポイント] ページが開きます。新しいエンドポイントのステータスは [保留中] です。数分で、作成プロセスが完了すると、ステータスが [利用可能] に変わります。

39

Page 45: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

ステップ 5: Amazon SNS トピックにメッセージを発行するこれで VPC に Amazon SNS のエンドポイントが含まれたので、Amazon EC2 インスタンスにログインし、トピックにメッセージを発行できます。

メッセージを発行するには

1. ターミナルが Amazon EC2 インスタンスに接続されていない場合は、再度接続します。

$ ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@instance-hostname

2. 以前の手順と同じコマンドを実行して、Amazon SNS トピックにメッセージを発行します。今回は、発行の試みが成功すると、Amazon SNS はメッセージ ID を返します。

$ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"

{ "MessageId": "5b111270-d169-5be6-9042-410dfc9e86de"}

ステップ 6: メッセージの配信を確認するAmazon SNS トピックがメッセージを受け取ると、2 つの Lambda サブスクライブ関数に送信して、メッセージをファンアウトします。これらの関数がメッセージを受け取ると、イベントを CloudWatch ログに記録します。メッセージの配信が成功したことを確認するには、関数が呼び出されたこと、およびCloudWatch ログが更新されたことを確認します。

Lambda 関数が呼び出されたことを確認するには

1. AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。2. [関数] ページで、[VPCE-Tutorial-Lambda-1] を選択します。3. [Monitoring] を選択します。4. [呼び出しカウント] グラフを確認します。このグラフには、Lambda 関数が実行された回数が表示さ

れます。

呼び出しカウントは、トピックにメッセージを発行した回数に一致します。

40

Page 46: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

CloudWatch ログが更新されたことを確認するには

1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。2. 左側のナビゲーションメニューで [ログ] を選択します。3. Lambda 関数によって書き込まれたログを確認します。

a. [/aws/lambda/VPCE-Tutorial-Lambda-1/] ロググループを選択します。b. ログストリームを選択します。c. ログにエントリ From SNS: Hello が含まれていることを確認します。

41

Page 47: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: VPC からメッ

セージをプライベートに発行する

d. コンソール上部の [ロググループ] を選択して、[ロググループ] ページを表示します。次に、/aws/lambda/VPCE-Tutorial-Lambda-2/ ロググループに対して前のステップを繰り返します。

おめでとうございます。 Amazon SNS のエンドポイントを VPC に追加することにより、VPC で管理されるネットワーク内から、トピックにメッセージを発行することができました。メッセージは、パブリックインターネットに公開されることなくプライベートで発行されました。

ステップ 7: クリーンアップこのチュートリアル用に作成したリソースは、保持することを希望しない限り、今すぐ削除できます。使用しなくなった AWS リソースを削除することで、AWS アカウントに請求される料金が発生しないようにできます。

まず、Amazon VPC コンソールを使用して VPC エンドポイントを削除します。次に、AWSCloudFormation コンソールでスタックを削除して、作成した他のリソースを削除します。スタックを削除すると、AWS CloudFormation によって AWS アカウントからスタックのリソースが削除されます。

VPC エンドポイントを削除するには

1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。2. 左側のナビゲーションメニューで、[エンドポイント] を選択します。3. 作成したエンドポイントを選択します。4. [アクション] を選択してから、[エンドポイントの削除] を選択します。5. [エンドポイントの削除] ウィンドウで、[はい、削除します] を選択します。

エンドポイントのステータスが [削除中] に変わります。削除が完了すると、エンドポイントがページから削除されます。

42

Page 48: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines の使用

AWS CloudFormation スタックを削除するには

1. AWS CloudFormation コンソール(https://console.aws.amazon.com/cloudformation)を開きます。2. [VPCE-Tutorial-Stack] スタックを選択します。3. [Actions] を選択してから、[Delete Stack] を選択します。4. [Delete Stack (スタックの削除)] ウィンドウで、[はい、削除します] を選択します。

スタックのステータスが DELETE_IN_PROGRESS に変わります。削除が完了すると、スタックがページから削除されます。

関連リソースこのチュートリアルで説明している概念の詳細については、以下のリソースを参照してください。

• AWS セキュリティブログ: AWS PrivateLink で Amazon SNS に発行したメッセージのセキュリティ保護• Amazon VPC とは?• VPC エンドポイント• Amazon EC2 とは?• AWS CloudFormation の概念

AWS Event Fork Pipelines の使用このセクションでは、AWS Event Fork Pipelines を使用するチュートリアルを示します。

トピック• チュートリアル: AWS Event Fork Pipelines サンプルアプリケーションをデプロイしてテストす

る (p. 43)• AWS Event Fork Pipelines を Amazon SNS トピックにサブスクライブする (p. 50)

チュートリアル: AWS Event Fork Pipelines サンプルアプリケーションをデプロイしてテストするイベント駆動アプリケーションの開発を迅速化するには、 AWS Event Fork Pipelines を使用するイベント処理パイプラインを Amazon SNS トピックにサブスクライブできます。AWS Event Fork Pipelines は、オープンソースのネストされたアプリケーションのスイートです。このスイートは、AWS サーバーレスアプリケーションモデル (AWS SAM) に基づいており、AWS Event Fork Pipelines suite から AWS アカウント内に直接デプロイできます ([Show apps that create custom IAM roles or resource policies (カスタム IAMロールまたはリソースポリシーを作成するアプリケーションの表示)] を選択します)。詳細については、「AWS Event Fork Pipelines の詳細 (p. 118)」を参照してください。

次のチュートリアルでは、AWS マネジメントコンソール を使用して AWS Event Fork Pipelines サンプルアプリケーションをデプロイしてテストする方法を示します。

Important

AWS Event Fork Pipelines サンプルアプリケーションのデプロイが完了したら、不要な料金が発生しないように、AWS CloudFormation スタックは削除してください。詳細については、AWSCloudFormation ユーザーガイド の「AWS CloudFormation コンソールでのスタックの削除」を参照してください。

43

Page 49: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をデプロイしてテストする

トピック• AWS Event Fork Pipelines ユースケースの例 (p. 44)• ステップ 1: サンプルアプリケーションをデプロイするには (p. 45)• ステップ 2: サンプルアプリケーションを実行するには (p. 46)• ステップ 3: サンプルアプリケーションとそのパイプラインの実行を検証するには (p. 47)• ステップ 4: 復旧のために問題をシミュレートしてイベントを再生するには (p. 48)

AWS Event Fork Pipelines ユースケースの例次のシナリオでは、AWS Event Fork Pipelines を使用するイベント起動型のサーバーレス e コマースアプリケーションについて説明します。この e コマースアプリケーション例を AWS Serverless ApplicationRepository で使用し、AWS Lambda コンソールを使用して AWS アカウントにデプロイします。そこで例をテストし、そのソースコードを GitHub で確認できます。

この e コマースアプリケーションでは、API Gateway でホストされ、AWS Lambda 関数CheckoutApiBackendFunction で支援された RESTful API を通じて購入者から注文を受けます。この関数は、すべての受注を Amazon SNS トピック (CheckoutEventsTopic) に発行します。このトピックでは、これらの受注を 4 つの異なるパイプラインにファンアウトします。

最初のパイプラインは、e コマースアプリケーションの所有者によって設計および実装された通常のチェックアウト処理パイプラインです。このパイプラインには、すべての受注をバッファ処理するAmazon SQS キュー CheckoutQueue、キューをポーリングしてこれらの注文を処理する AWS Lambda関数 CheckoutFunction、およびすべての受注を安全に保存する DynamoDB テーブル CheckoutTableがあります。

AWS Event Fork Pipelines を適用する

e コマースアプリケーションのコンポーネントは、主要ビジネスロジックを処理します。ただし、e コマースアプリケーションの所有者は以下にも対処する必要があります。

• コンプライアンス — 安全な、圧縮されたバックアップの保管時の暗号化と機密情報のサニタイズ• レジリエンス — フルフィルメントプロセスの中断が発生した場合の最新の注文の再生• 検索可能性 — 受注に対する分析の実行とメトリクスの生成

44

Page 50: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をデプロイしてテストする

このイベント処理ロジックを実装する代わりに、アプリケーション所有者は AWS Event Fork Pipelines をCheckoutEventsTopic Amazon SNS トピックにサブスクライブできます。

• イベントのストレージおよびバックアップパイプライン (p. 119) は、データを変換して、クレジットカード詳細の削除、データの 60 秒間のバッファ処理、GZIP を使用した圧縮、Amazon S3 のデフォルトのカスタマーマスターキー (CMK) を使用した暗号化を行うように設定されています。この CMKは、AWS によって管理され、AWS Key Management Service (AWS KMS) を使用します。

詳細については、Amazon Kinesis Data Firehose 開発者ガイド の「送信先に Amazon S3 を選択する」、「Amazon Kinesis Data Firehose のデータ変換」、および「設定の構成」を参照してください。

• 「イベントの検索および分析パイプライン (p. 120)」には、30 秒間のインデックス再試行期間、検索ドメインでインデックスの作成に失敗した注文を保存するためのバケット、およびインデックスを作成した注文のセットを制限するためのフィルタポリシーが設定されています。

詳細については、Amazon Kinesis Data Firehose 開発者ガイド の「送信先に Amazon ES を選択する」を参照してください。

• イベントの再生パイプライン (p. 120) には、e コマースアプリケーションの所有者によって設計および実装された通常の注文処理パイプラインの Amazon SQS キュー部分が設定されています。

詳細については、Amazon Simple Queue Service 開発者ガイド の「キュー名および URL」を参照してください。

次の JSON フィルタポリシーは、イベントの検索および分析パイプラインの設定で設定されます。これは、合計金額が 100 USD 以上の受注とのみ一致します。詳細については、「メッセージのフィルタ処理 (p. 70)」を参照してください。

{ "amount": [{ "numeric": [ ">=", 100 ] }] }

AWS Event Fork Pipelines パターンを使用すると、e コマースアプリケーションの所有者は、イベント処理用の差別化につながらないロジックのコーディングに伴いがちな開発オーバーヘッドを回避できます。代わりに、所有者は AWS Event Fork Pipelines を AWS Serverless Application Repository から AWS アカウント内に直接デプロイできます。

ステップ 1: サンプルアプリケーションをデプロイするには1. AWS Lambda コンソールにサインインします。2. ナビゲーションパネルで [関数] を選択し、[関数の作成] を選択します。3. [関数の作成] ページで、次の操作を実行します。

a. [Browse serverless app repository (サーバーレスアプリケーションリポジトリの参照)]、[Publicapplications (パブリックアプリケーション)]、[Show apps that create custom IAM roles orresource policies (カスタム IAM ロールまたはリソースポリシーを作成するアプリケーションの表示)] を選択します。

b. fork-example-ecommerce-checkout-api を検索し、このアプリケーションを選択します。4. [fork-example-ecommerce-checkout-api] ページで、以下の操作を行います。

a. [Application settings (アプリケーション設定)] セクションで、[Application name (アプリケーション名)] に名前 (fork-example-ecommerce-my-app など) を入力します。

Note

• リソースを後で簡単に見つけられるように、プレフィックス fork-example-ecommerce を保持します。

45

Page 51: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をデプロイしてテストする

• 名前は、デプロイごとに一意にする必要があります。アプリケーション名を再利用すると、デプロイでは、スタックを新規作成せずに、以前にデプロイした AWSCloudFormation スタックを単に更新します。

b. (省略可能) アプリケーションの Lambda 関数の実行に関して、次のいずれかの [LogLevel] 設定を入力します。

• DEBUG

• ERROR

• INFO (デフォルト)• WARNING

5. [I acknowledge that this app creates custom IAM roles, resource policies and deploys nestedapplications (このアプリケーションがカスタム IAM ロール、リソースポリシーを作成し、ネストされたアプリケーションをデプロイすることを承認します)] を選択して、ページの下部にある [デプロイ]を選択します。

[fork-example-ecommerce-my-app のデプロイステータス] ページに、Lambda によって [Your applicationis being deployed (アプリケーションをデプロイ中)] ステータスが表示されます。

[リソース] セクションで、AWS CloudFormation によってスタックの作成が開始され、各リソースの[CREATE_IN_PROGRESS] ステータスが表示されます。プロセスが完了すると、AWS CloudFormation に[CREATE_COMPLETE] ステータスが表示されます。

Note

すべてのリソースがデプロイされるまで 20~30 分かかる場合があります。

デプロイが完了すると、Lambda によって [Your application has been deployed (アプリケーションはデプロイ済みです)] ステータスが表示されます。

ステップ 2: サンプルアプリケーションを実行するには1. AWS Lambda コンソールのナビゲーションパネルで、[アプリケーション] を選択します。2. [アプリケーション] ページの検索フィールドで、serverlessrepo-fork-example-

ecommerce-my-app を検索し、このアプリケーションを選択します。3. [リソース] セクションで、以下の操作を行います。

a. タイプが ApiGateway RestApi であるリソースを見つけるには、すべてのリソースを [Type (タイプ)] (ServerlessRestApi など) でソートし、リソースを展開します。

b. 2 つのネストされたリソース (ApiGateway デプロイタイプと ApiGateway ステージタイプ) が表示されます。

c. リンク [Prod API エンドポイント] をコピーし、これに /checkout を付加します。次に例を示します。

https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout

4. 次の JSON を test_event.json という名前のファイルにコピーします。

{ "id": 15311, "date": "2019-03-25T23:41:11-08:00", "status": "confirmed", "customer": { "id": 65144, "name": "John Doe",

46

Page 52: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をデプロイしてテストする

"email": "[email protected]" }, "payment": { "id": 2509, "amount": 450.00, "currency": "usd", "method": "credit", "card-network": "visa", "card-number": "1234 5678 9012 3456", "card-expiry": "10/2022", "card-owner": "John Doe", "card-cvv": "123" }, "shipping": { "id": 7600, "time": 2, "unit": "days", "method": "courier" }, "items": [{ "id": 6512, "product": 8711, "name": "Hockey Jersey - Large", "quantity": 1, "price": 400.00, "subtotal": 400.00 }, { "id": 9954, "product": 7600, "name": "Hockey Puck", "quantity": 2, "price": 25.00, "subtotal": 50.00 }]}

5. API エンドポイントに HTTPS リクエストを送信するには、curl コマンドを実行してサンプルイベントペイロードを入力として渡します。次に例を示します。

curl -d "$(cat test_event.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout

API は、次の空のレスポンスを返し、実行が成功したことを示します。

{ }

ステップ 3: サンプルアプリケーションとそのパイプラインの実行を検証するには

ステップ 1: サンプルのチェックアウトパイプラインの実行を検証するには

1. Amazon DynamoDB コンソールにサインインします。2. ナビゲーションパネルで、[テーブル] を選択します。3. serverlessrepo-fork-example を検索して CheckoutTable を選択します。4. テーブルの詳細ページで [項目] を選択し、作成済みの項目を選択します。

保存済みの属性が表示されます。

47

Page 53: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をデプロイしてテストする

ステップ 2: イベントのストレージおよびバックアップパイプラインの実行を検証するには

1. Amazon S3 コンソールにサインインします。2. ナビゲーションパネルで [バケット] を選択します。3. serverlessrepo-fork-example を検索して、CheckoutBucket を選択します。4. .gz を拡張子とするファイルが見つかるまで、ディレクトリ階層を移動します。5. ファイルをダウンロードするには、[アクション]、[開く] の順に選択します。6. パイプラインには、コンプライアンスの理由でクレジットカード情報をサニタイズする Lambda 関数

が設定されています。

保存済みの JSON ペイロードにクレジットカード情報が含まれていないことを確認するために、ファイルを解凍します。

ステップ 3: イベントの検索および分析パイプラインの実行を検証するには

1. Amazon Elasticsearch Service コンソールにサインインします。2. ナビゲーションパネルの [My domains (マイドメイン)] で、serverl-analyt というプレフィックス

が付いたドメインを選択します。3. パイプラインには、数値一致条件を設定する Amazon SNS サブスクリプションフィルタポリシーが設

定されています。

金額が 100 USD を超える注文を参照するためにイベントのインデックスが作成されていることを確認するには、[serverl-analyt-abcdefgh1ijk] ページで、[Indices (インデックス)]、[checkout_events] の順に選択します。

ステップ 4: イベントの再生パイプラインの実行を検証するには

1. Amazon SQS コンソールにサインインします。2. キューのリストで、serverlessrepo-fork-example を検索して ReplayQueue を選択します。3. [キュー操作]、[メッセージの表示/削除] の順に選択します。4. [fork-example-ecommerce-my-app...ReplayP-ReplayQueue-123ABCD4E5F6 のメッセージの表示/削

除] ダイアログボックスで、[メッセージのポーリングを開始] を選択します。5. イベントがキューに入っていることを確認するには、キューに表示されているメッセージの横にある

[詳細] を選択します。

ステップ 4: 復旧のために問題をシミュレートしてイベントを再生するにはステップ 1: シミュレートした問題を有効にして別の API リクエストを送信するには

1. AWS Lambda コンソールにサインインします。2. ナビゲーションパネルで [関数] を選択します。3. serverlessrepo-fork-example を検索して CheckoutFunction を選択します。4. [fork-example-ecommerce-my-app-CheckoutFunction-ABCDEF...] ページの [環境変数] セクション

で、BUG_ENABLED 変数を true に設定して [保存] を選択します。5. 次の JSON を test_event_2.json という名前のファイルにコピーします。

48

Page 54: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をデプロイしてテストする

{ "id": 9917, "date": "2019-03-26T21:11:10-08:00", "status": "confirmed", "customer": { "id": 56999, "name": "Marcia Oliveira", "email": "[email protected]" }, "payment": { "id": 3311, "amount": 75.00, "currency": "usd", "method": "credit", "card-network": "mastercard", "card-number": "1234 5678 9012 3456", "card-expiry": "12/2025", "card-owner": "Marcia Oliveira", "card-cvv": "321" }, "shipping": { "id": 9900, "time": 20, "unit": "days", "method": "plane" }, "items": [{ "id": 9993, "product": 3120, "name": "Hockey Stick", "quantity": 1, "price": 75.00, "subtotal": 75.00 }] }

6. API エンドポイントに HTTPS リクエストを送信するには、curl コマンドを実行してサンプルイベントペイロードを入力として渡します。次に例を示します。

curl -d "$(cat test_event_2.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout

API は、次の空のレスポンスを返し、実行が成功したことを示します。

{ }

ステップ 2: シミュレートしたデータの破損を検証するには

1. Amazon DynamoDB コンソールにサインインします。2. ナビゲーションパネルで、[テーブル] を選択します。3. serverlessrepo-fork-example を検索して CheckoutTable を選択します。4. テーブルの詳細ページで [項目] を選択し、作成済みの項目を選択します。

保存済みの属性が表示されます。一部の属性は [CORRUPTED!] とマークされています。

49

Page 55: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をトピックにサブスクライブする

ステップ 3: シミュレートした問題を無効にするには

1. AWS Lambda コンソールにサインインします。2. ナビゲーションパネルで [関数] を選択します。3. serverlessrepo-fork-example を検索して CheckoutFunction を選択します。4. [fork-example-ecommerce-my-app-CheckoutFunction-ABCDEF...] ページの [環境変数] セクション

で、BUG_ENABLED 変数を false に設定して [保存] を選択します。

ステップ 4: 再生を有効にして問題から復旧するには

1. AWS Lambda コンソールのナビゲーションパネルで、[関数] を選択します。2. serverlessrepo-fork-example を検索して ReplayFunction を選択します。3. [Designer (デザイナー)] セクションを展開して [SQS] タイルを選択し、次に [SQS] セクションで [有

効] を選択します。

Note

Amazon SQS のイベントソーストリガーが有効になるまで約 1 分かかります。4. [保存] を選択します。5. 復旧された属性を表示するには、Amazon DynamoDB コンソールに戻ります。6. 再生を無効にするには、AWS Lambda コンソールに戻り、ReplayFunction の Amazon SQS イベ

ントソーストリガーを無効にします。

AWS Event Fork Pipelines を Amazon SNS トピックにサブスクライブするイベント駆動アプリケーションの開発を迅速化するには、 AWS Event Fork Pipelines を使用するイベント処理パイプラインを Amazon SNS トピックにサブスクライブできます。AWS Event Fork Pipelines は、オープンソースのネストされたアプリケーションのスイートです。このスイートは、AWS サーバーレスアプリケーションモデル (AWS SAM) に基づいており、AWS Event Fork Pipelines suite から AWS アカウント内に直接デプロイできます ([Show apps that create custom IAM roles or resource policies (カスタム IAMロールまたはリソースポリシーを作成するアプリケーションの表示)] を選択します)。詳細については、「AWS Event Fork Pipelines の詳細 (p. 118)」を参照してください。

以下のチュートリアルでは、AWS マネジメントコンソール を使用してパイプラインをデプロイし、次にAWS Event Fork Pipelines を Amazon SNS トピックにサブスクライブする方法を示します。開始する前に、Amazon SNS トピックを作成 (p. 8)します。

パイプラインを構成するリソースを削除するには、AWS Lambda コンソールの [アプリケーション] ページで、SAM テンプレートセクションを展開し、[CloudFormation stack (CloudFormation スタック)]、[OtherActions (他のアクション)]、[Delete Stack (スタックの削除)] の順に選択します。

トピック• チュートリアル: イベントのストレージおよびバックアップパイプラインをデプロイしてサブスクライ

ブするには (p. 51)• チュートリアル: イベントの検索および分析パイプラインをデプロイしてサブスクライブするに

は (p. 52)• チュートリアル: イベントの再生パイプラインをデプロイしてサブスクライブするには (p. 55)

50

Page 56: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をトピックにサブスクライブする

チュートリアル: イベントのストレージおよびバックアップパイプラインをデプロイしてサブスクライブするにはこのチュートリアルでは、イベントのストレージおよびバックアップパイプライン (p. 119)をデプロイして Amazon SNS トピックにサブスクライブする方法を示します。このプロセスでは、パイプラインに関連付けられた AWS SAM テンプレートを自動的に AWS CloudFormation スタックに変換し、このスタックをAWS アカウント内にデプロイします。また、このプロセスでは、イベントのストレージおよびバックアップパイプラインを構成する、以下のようなリソースのセットを作成して設定します。

• Amazon SQS キュー• Lambda 関数• Kinesis Data Firehose 配信ストリーム• Amazon S3 バックアップバケット

S3 バケットを送信先とするストリームの設定の詳細については、Amazon Kinesis Data Firehose API リファレンス の「S3DestinationConfiguration」を参照してください。

イベントの変換の詳細と、イベントのバッファ処理/圧縮/暗号化の設定の詳細については、AmazonKinesis Data Firehose 開発者ガイド の「Amazon Kinesis Data Firehose 配信ストリームの作成」を参照してください。

イベントのフィルタ処理の詳細については、このガイドの「Amazon SNS サブスクリプションフィルタポリシー (p. 70)」を参照してください。

1. AWS Lambda コンソールにサインインします。2. ナビゲーションパネルで [関数] を選択し、[関数の作成] を選択します。3. [関数の作成] ページで、次の操作を実行します。

a. [Browse serverless app repository (サーバーレスアプリケーションリポジトリの参照)]、[Publicapplications (パブリックアプリケーション)]、[Show apps that create custom IAM roles orresource policies (カスタム IAM ロールまたはリソースポリシーを作成するアプリケーションの表示)] を選択します。

b. fork-event-storage-backup-pipeline を検索し、このアプリケーションを選択します。4. [fork-event-storage-backup-pipeline] ページで、以下の操作を行います。

a. [Application settings (アプリケーション設定)] セクションで、[Application name (アプリケーション名)] に名前 (my-app-backup など) を入力します。

Note

• 名前は、デプロイごとに一意にする必要があります。アプリケーション名を再利用すると、デプロイでは、スタックを新規作成せずに、以前にデプロイした AWSCloudFormation スタックを単に更新します。

b. (省略可能) [BucketArn] に、着信イベントをロードする先の S3 バケットの ARN を入力します。値を入力しないと、新しい S3 バケットが AWS アカウントに作成されます。

c. (省略可能) [DataTransformationFunctionArn] に、着信イベントを変換する Lambda 関数の ARNを入力します。値を入力しないと、データ変換は無効になります。

d. (省略可能) アプリケーションの Lambda 関数の実行に関して、次のいずれかの [LogLevel] 設定を入力します。

• DEBUG

• ERROR

• INFO (デフォルト)

51

Page 57: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をトピックにサブスクライブする

• WARNING

e. [TopicArn] に、このフォークパイプラインのインスタンスをサブスクライブする Amazon SNS トピックの ARN を入力します。

f. (省略可能) [StreamBufferingIntervalInSeconds] および [StreamBufferingSizeInMBs] に、着信イベントのバッファ処理を設定するための値を入力します。値を入力しないと、300 秒と 5 MB が使用されます。

g. (省略可能) 着信イベントを圧縮する形式として次の [StreamCompressionFormat] 設定のいずれかを入力します。

• GZIP

• SNAPPY

• UNCOMPRESSED (デフォルト)• ZIP

h. (省略可能) [StreamPrefix] に、S3 バックアップバケットに保存されているファイルを指定するための文字列プレフィックスを入力します。値を入力しないと、プレフィックスは使用されません。

i. (省略可能) [SubscriptionFilterPolicy] に、着信イベントをフィルタ処理するために使用するAmazon SNS サブスクリプションフィルタポリシーを JSON 形式で入力します。フィルタポリシーは、S3 バックアップバケットに保存するイベントを決定します。値を入力しないと、フィルタ処理は使用されません (すべてのイベントが保存されます)。

j. [I acknowledge that this app creates custom IAM roles, resource policies and deploys nestedapplications (このアプリケーションがカスタム IAM ロール、リソースポリシーを作成し、ネストされたアプリケーションをデプロイすることを承認します)] を選択して、[デプロイ] を選択します。

[my-app のデプロイステータス] ページに、Lambda によって [Your application is being deployed (アプリケーションをデプロイ中)] ステータスが表示されます。

[リソース] セクションで、AWS CloudFormation によってスタックの作成が開始され、各リソースの[CREATE_IN_PROGRESS] ステータスが表示されます。プロセスが完了すると、AWS CloudFormation に[CREATE_COMPLETE] ステータスが表示されます。

デプロイが完了すると、Lambda によって [Your application has been deployed (アプリケーションはデプロイ済みです)] ステータスが表示されます。

Amazon SNS トピックに発行されたメッセージは、イベントのストレージおよびバックアップパイプラインによってプロビジョニングされた S3 バックアップバケットに自動的に保存されます。

チュートリアル: イベントの検索および分析パイプラインをデプロイしてサブスクライブするにはこのチュートリアルでは、イベントの検索および分析パイプライン (p. 120)をデプロイして AmazonSNS トピックにサブスクライブする方法を示します。このプロセスでは、パイプラインに関連付けられたAWS SAM テンプレートを自動的に AWS CloudFormation スタックに変換し、このスタックを AWS アカウント内にデプロイします。また、このプロセスでは、イベントの検索および分析パイプラインを構成する、以下のようなリソースのセットを作成して設定します。

• Amazon SQS キュー• Lambda 関数• Kinesis Data Firehose 配信ストリーム• Amazon Elasticsearch Service ドメイン• Amazon S3 配信不能バケット

52

Page 58: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をトピックにサブスクライブする

インデックスを送信先とするストリームの設定の詳細については、Amazon Kinesis Data Firehose API リファレンス の「ElasticsearchDestinationConfiguration」を参照してください。

イベントの変換の詳細と、イベントのバッファ処理/圧縮/暗号化の設定の詳細については、AmazonKinesis Data Firehose 開発者ガイド の「Amazon Kinesis Data Firehose 配信ストリームの作成」を参照してください。

イベントのフィルタ処理の詳細については、このガイドの「Amazon SNS サブスクリプションフィルタポリシー (p. 70)」を参照してください。

1. AWS Lambda コンソールにサインインします。2. ナビゲーションパネルで [関数] を選択し、[関数の作成] を選択します。3. [関数の作成] ページで、次の操作を実行します。

a. [Browse serverless app repository (サーバーレスアプリケーションリポジトリの参照)]、[Publicapplications (パブリックアプリケーション)]、[Show apps that create custom IAM roles orresource policies (カスタム IAM ロールまたはリソースポリシーを作成するアプリケーションの表示)] を選択します。

b. fork-event-search-analytics-pipeline を検索し、このアプリケーションを選択します。

4. [fork-event-search-analytics-pipeline] ページで、以下の操作を行います。

a. [Application settings (アプリケーション設定)] セクションで、[Application name (アプリケーション名)] に名前 (my-app-search など) を入力します。

Note

名前は、デプロイごとに一意にする必要があります。アプリケーション名を再利用すると、デプロイでは、スタックを新規作成せずに、以前にデプロイした AWSCloudFormation スタックを単に更新します。

b. (省略可能) [DataTransformationFunctionArn] に、着信イベントの変換に使用する Lambda 関数のARN を入力します。値を入力しないと、データ変換は無効になります。

c. (省略可能) アプリケーションの Lambda 関数の実行に関して、次のいずれかの [LogLevel] 設定を入力します。

• DEBUG

• ERROR

• INFO (デフォルト)• WARNING

d. (省略可能) [SearchDomainArn] に、Amazon ES ドメインの ARN を入力します。このドメインは、必要なコンピューティングおよびストレージ機能を設定するクラスターです。値を入力しないと、新しいドメインがデフォルト設定で作成されます。

e. [TopicArn] に、このフォークパイプラインのインスタンスをサブスクライブする Amazon SNS トピックの ARN を入力します。

f. [SearchIndexName] に、イベントの検索と分析用の Amazon ES インデックスの名前を入力します。

Note

インデックス名には、次の制限が適用されます。

• 大文字を含めることはできません• 次の文字を含めることはできません: \ / * ? " < > | ` , #• 次の文字で始めることはできません: - + _• 次の形式にすることはできません: . ..• 80 文字より長くすることはできません

53

Page 59: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をトピックにサブスクライブする

• 255 バイトより長くすることはできません• コロンを含めることはできません (Amazon ES 7.0 から)

g. (省略可能) Amazon ES インデックスのローテーション期間として、次の[SearchIndexRotationPeriod] 設定のいずれかを入力します。

• NoRotation (デフォルト)• OneDay

• OneHour

• OneMonth

• OneWeek

インデックスのローテーションでは、インデックス名にタイムスタンプを付加し、古いデータの有効期限切れをわかりやすくします。

h. [SearchTypeName] に、インデックスでイベントを整理するための Amazon ES タイプの名前を入力します。

Note

• Amazon ES タイプ名には任意の文字 (null バイトを除く) を含めることができますが、先頭に _ を使用することはできません。

• Amazon ES 6.x の場合、インデックスあたりのタイプ数は 1 つのみです。別のタイプが既にある既存のインデックスに新しいタイプを指定すると、Kinesis Data Firehoseはランタイムエラーを返します。

i. (省略可能) [StreamBufferingIntervalInSeconds] および [StreamBufferingSizeInMBs] に、着信イベントのバッファ処理を設定するための値を入力します。値を入力しないと、300 秒と 5 MB が使用されます。

j. (省略可能) 着信イベントを圧縮する形式として次の [StreamCompressionFormat] 設定のいずれかを入力します。

• GZIP

• SNAPPY

• UNCOMPRESSED (デフォルト)• ZIP

k. (省略可能) [StreamPrefix] に、S3 配信不能バケットに保存されているファイルを指定するための文字列プレフィックスを入力します。値を入力しないと、プレフィックスは使用されません。

l. (省略可能) [StreamRetryDurationInSecons] に、Kinesis Data Firehose が Amazon ES インデックスでイベントのインデックスを作成できない場合の再試行期間を入力します。値を入力しないと、300 秒が使用されます。

m. (省略可能) [SubscriptionFilterPolicy] に、着信イベントをフィルタ処理するために使用するAmazon SNS サブスクリプションフィルタポリシーを JSON 形式で入力します。フィルタポリシーは、Amazon ES インデックスでインデックスを作成するイベントを決定します。値を入力しないと、フィルタ処理は使用されません (すべてのイベントにインデックスが作成されます)。

n. [I acknowledge that this app creates custom IAM roles, resource policies and deploys nestedapplications (このアプリケーションがカスタム IAM ロール、リソースポリシーを作成し、ネストされたアプリケーションをデプロイすることを承認します)] を選択して、[デプロイ] を選択します。

[my-app-search のデプロイステータス] ページに、Lambda によって [Your application is being deployed(アプリケーションをデプロイ中)] ステータスが表示されます。

54

Page 60: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をトピックにサブスクライブする

[リソース] セクションで、AWS CloudFormation によってスタックの作成が開始され、各リソースの[CREATE_IN_PROGRESS] ステータスが表示されます。プロセスが完了すると、AWS CloudFormation に[CREATE_COMPLETE] ステータスが表示されます。

デプロイが完了すると、Lambda によって [Your application has been deployed (アプリケーションはデプロイ済みです)] ステータスが表示されます。

Amazon SNS トピックに発行されたメッセージは、イベントの検索および分析パイプラインによってプロビジョニングされた Amazon ES インデックスで自動的にインデックスが作成されます。パイプラインでイベントのインデックスを作成できない場合、イベントは S3 配信不能バケットに保存されます。

チュートリアル: イベントの再生パイプラインをデプロイしてサブスクライブするにはこのチュートリアルでは、イベントの再生パイプライン (p. 120)をデプロイして Amazon SNS トピックにサブスクライブする方法を示します。このプロセスでは、パイプラインに関連付けられた AWS SAM テンプレートを自動的に AWS CloudFormation スタックに変換し、このスタックを AWS アカウント内にデプロイします。また、このプロセスでは、イベントの再生パイプラインを構成する Amazon SQS キューやLambda 関数などのリソースのセットを作成して設定します。

イベントのフィルタ処理の詳細については、このガイドの「Amazon SNS サブスクリプションフィルタポリシー (p. 70)」を参照してください。

1. AWS Lambda コンソールにサインインします。2. ナビゲーションパネルで [関数] を選択し、[関数の作成] を選択します。3. [関数の作成] ページで、次の操作を実行します。

a. [Browse serverless app repository (サーバーレスアプリケーションリポジトリの参照)]、[Publicapplications (パブリックアプリケーション)]、[Show apps that create custom IAM roles orresource policies (カスタム IAM ロールまたはリソースポリシーを作成するアプリケーションの表示)] を選択します。

b. fork-event-replay-pipeline を検索し、このアプリケーションを選択します。4. [fork-event-replay-pipeline] ページで、以下の操作を行います。

a. [Application settings (アプリケーション設定)] セクションで、[Application name (アプリケーション名)] に名前 (my-app-replay など) を入力します。

Note

名前は、デプロイごとに一意にする必要があります。アプリケーション名を再利用すると、デプロイでは、スタックを新規作成せずに、以前にデプロイした AWSCloudFormation スタックを単に更新します。

b. (省略可能) アプリケーションの Lambda 関数の実行に関して、次のいずれかの [LogLevel] 設定を入力します。

• DEBUG

• ERROR

• INFO (デフォルト)• WARNING

c. (省略可能) [ReplayQueueRetentionPeriodInSeconds] に、Amazon SQS 再生キューでメッセージを保持する時間を秒単位で入力します。値を入力しないと、1,209,600 秒 (14 日間) が使用されます。

d. [TopicArn] に、このフォークパイプラインのインスタンスをサブスクライブする Amazon SNS トピックの ARN を入力します。

e. [DestinationQueueName] に、Lambda 再生関数がメッセージを転送する先の Amazon SQSキューの名前を入力します。

55

Page 61: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines をトピックにサブスクライブする

f. (省略可能) [SubscriptionFilterPolicy] に、着信イベントをフィルタ処理するために使用するAmazon SNS サブスクリプションフィルタポリシーを JSON 形式で入力します。フィルタポリシーは、再生用にバッファ処理するイベントを決定します。値を入力しないと、フィルタ処理は使用されません (すべてのイベントが再生用にバッファ処理されます)。

g. [I acknowledge that this app creates custom IAM roles, resource policies and deploys nestedapplications (このアプリケーションがカスタム IAM ロール、リソースポリシーを作成し、ネストされたアプリケーションをデプロイすることを承認します)] を選択して、[デプロイ] を選択します。

[my-app-replay のデプロイステータス] ページに、Lambda によって [Your application is being deployed(アプリケーションをデプロイ中)] ステータスが表示されます。

[リソース] セクションで、AWS CloudFormation によってスタックの作成が開始され、各リソースの[CREATE_IN_PROGRESS] ステータスが表示されます。プロセスが完了すると、AWS CloudFormation に[CREATE_COMPLETE] ステータスが表示されます。

デプロイが完了すると、Lambda によって [Your application has been deployed (アプリケーションはデプロイ済みです)] ステータスが表示されます。

Amazon SNS トピックに発行されたメッセージは、イベントの再生パイプラインによってプロビジョニングされた Amazon SQS キューで自動的に再生用にバッファ処理されます。

Note

再生は、デフォルトでは無効になります。再生を有効にするには、Lambda コンソールで関数のページに移動し、[Designer (デザイナー)] セクションを展開して [SQS] タイルを選択します。次に [SQS] セクションで [有効] を選択します。

56

Page 62: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド一般的なシナリオ

Amazon SNS の詳細このセクションでは、Amazon SNS トピックとメッセージの属性について説明します。また、メッセージのフィルタ処理、メッセージと JSON の形式、ラージペイロードと raw メッセージの配信についても説明します。

トピック• 一般的な Amazon SNS シナリオ (p. 57)• Amazon SNS メッセージ配信ステータス (p. 58)• メッセージ配信の再試行 (p. 61)• Amazon SNS デッドレターキュー (p. 65)• Amazon SNS メッセージ属性 (p. 67)• Amazon SNS メッセージのフィルタ処理 (p. 70)• Amazon SNS メッセージと JSON の形式 (p. 83)• Amazon SNS ラージペイロードと raw メッセージの配信 (p. 90)• Amazon SNS タグ (p. 90)

一般的な Amazon SNS シナリオファンアウト「ファンアウト」シナリオでは、Amazon SNS メッセージがトピックに送信され、その後レプリケートされて、複数の Amazon SQS キュー、HTTP エンドポイント、E メールアドレスにプッシュされます。これで並列非同期処理が可能になります。たとえば、ある製品が注文されるたびにトピックに Amazon SNSメッセージを送信するアプリケーションを開発できます。そうすると、そのトピックにサブスクライブされている Amazon SQS キューは、新しい注文に関する同一の通知を受け取ります。キューの 1 つにアタッチされた Amazon EC2 サーバーインスタンスは、注文の処理や受理を扱ことができ、一方で、他のサーバーインスタンスは、受信したすべての注文を分析するためにデータウェアハウスにアタッチできます。

「ファンアウト」のもう 1 つの使用方法は、本番環境に送信されるデータを、開発環境を使用してレプリケートすることです。前の例から発展させて、新しい受注用に同じトピックに別のキューをサブスクライブすることもできます。次に、この新しいキューを開発環境にアタッチすることで、本稼働環境から受け取ったデータを使用してアプリケーションの改善とテストを継続することができます。Amazon SQSキューへの Amazon SNS メッセージの送信の詳細については、「受信者として Amazon SQS キューを使用する場合 (p. 93)」を参照してください。HTTP/S エンドポイントへの Amazon SNS メッセージの送信に関する詳細については、「受信者として HTTP/S エンドポイントを使用する場合 (p. 106)」を参照してください。

57

Page 63: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアプリケーションおよびシステムアラート

アプリケーションおよびシステムアラートアプリケーションおよびシステムアラートは、事前定義されたしきい値によってトリガーされ、指定したユーザーに SMS や E メールで送信される通知です。たとえば、多くの AWS サービスが Amazon SNS を使用するため、Amazon EC2 Auto Scaling グループに対する特定の変更などのイベントが発生した場合、ただちに通知を受信することができます。

プッシュ E メールとテキストメッセージプッシュ E メールとテキストメッセージは、E メール/SMS で個人またはグループにメッセージを転送するための 2 つの方法です。たとえば、Amazon SNS を使用して、的を絞ったニュースの見出しを E メールまたは SMS でサブスクライバーにプッシュすることもできます。E メールまたは SMS のテキストを受け取ると、関心がある読者は、ウェブサイトにアクセスするか、アプリケーションを起動して、より多くの情報を得ることができます。Amazon SNS を使用して SMS 通知を送信する方法に関する詳細は、「受信者が携帯電話番号の場合のユーザー通知に Amazon SNS を使用する (SMS 送信) (p. 153)」を参照してください。

モバイルプッシュ通知モバイルプッシュ通知を使用すると、モバイルアプリケーションに直接メッセージを送信できます。たとえば、Amazon SNS を使用して、更新が利用可能であることを示す通知をアプリケーションに送信できます。通知メッセージには、更新をダウンロードおよびインストールするためのリンクを含めることができます。Amazon SNS を使用してモバイルエンドポイントに直接通知メッセージを送信する方法に関する詳細は、「受信者がモバイルアプリケーションの場合のユーザー通知に Amazon SNS を使用する (モバイルプッシュ) (p. 123)」を参照してください。

メッセージの耐久性Amazon SNS は、受け取ったすべてのメッセージの耐久性の高いストレージを提供します。AmazonSNS は、パブリッシュリクエストを受け取ると、ディスクにメッセージの複数のコピーを保存します。Amazon SNS がお客様に対してリクエストの受け取りを確認する前に、複数の独立した場所にメッセージを保存します。この場所はアベイラビリティーゾーンと呼ばれます。メッセージは、米国東部(バージニア北部) リージョン などの選択した AWS リージョン内にあるアベイラビリティーゾーンに保存されます。1 つのアベイラビリティーゾーンで障害が発生した場合でも (非常にまれです)、Amazon SNSは引き続き動作し、メッセージの耐久性が維持されます。

Amazon SNS メッセージ配信ステータスAmazon SNS では、以下の Amazon SNS エンドポイントでトピックに送信された通知メッセージの配信ステータスをログに記録できます。

• アプリケーション• HTTP• Lambda• SQS

メッセージの配信ステータスの属性を設定した後、Amazon SNS エンドポイントをサブスクライブしたトピックにメッセージが送信されると、ログエントリが CloudWatch Logs に送信されるようになります。メッセージの配信ステータスを記録することは、以下のように運用をよりよく把握するために役立ちます。

58

Page 64: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS マネジメントコンソール を使用した配信ステータスのログ記録の設定

• メッセージが Amazon SNS エンドポイントに配信されたかどうかを知ることができます。• Amazon SNS エンドポイントから Amazon SNS に送信された応答を識別します。• メッセージのドウェル時間(発行のタイムスタンプから Amazon SNS エンドポイントへの配信直前まで

の時間)を決定します。

メッセージの配信ステータスのトピック属性を設定するには、AWS マネジメントコンソール、AWSSoftware Development Kit (SDK)、またはクエリ API を使用できます。

トピック• AWS マネジメントコンソール を使用した配信ステータスのログ記録の設定 (p. 59)• AWS SDK を使用して、Amazon SNS エンドポイントにサブスクライブしたトピックのメッセージ配

信ステータス属性を設定する (p. 59)

AWS マネジメントコンソール を使用した配信ステータスのログ記録の設定1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. [トピック] ページで、トピックを選択して [編集] を選択します。4. [Edit MyTopic (ササササササの編集)] ページで、 [Delivery status logging (配信ステータスのログ記録)] セ

クションを展開します。5. 配信ステータスをログに記録するプロトコルを選択します (Lambda など)。6. [Success sample rate (成功したサンプル率)] (CloudWatch Logs を受信する成功したメッセージの割

合) を入力します。7. [IAM roles (IAM ロール)] サブセクションで、次のいずれかの操作を行います。

• アカウントから既存のサービスロールを選択するには、[Use existing service role (既存のサービスロールを使用)] を選択して成功および失敗した配信の IAM ロールを指定します。

• アカウントに新しいサービスを作成するには、[Create new service role (新しいサービスロールを作成)]、[Create new roles (新しいロールの作成)] の順に選択して、IAM コンソールで成功および失敗した配信の IAM ロールを定義します。

CloudWatch Logs を使用する書き込みアクセス許可を Amazon SNS に自動的に付与するには、[Allow (許可)] を選択します。

8. [Save changes] を選択します。

これで、メッセージ配信ステータスがある CloudWatch Logs を表示して解析できるようになりました。CloudWatch の使用方法の詳細については、「CloudWatch のドキュメント」を参照してください。

AWS SDK を使用して、Amazon SNS エンドポイントにサブスクライブしたトピックのメッセージ配信ステータス属性を設定するAWS SDK には、Amazon SNS でメッセージの配信ステータスの属性を使用するための API がいくつかの言語で用意されています。

59

Page 65: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS SDK を使用して、Amazon SNS エンドポイントにサブスクライブしたトピック

のメッセージ配信ステータス属性を設定する

トピック属性メッセージの配信ステータスには、次のトピック属性名の値を使用できます。

アプリケーション

• ApplicationSuccessFeedbackRoleArn

• ApplicationSuccessFeedbackSampleRate

• ApplicationFailureFeedbackRoleArn

Note

Amazon SNS アプリケーションエンドポイントに送信される通知メッセージのメッセージ配信ステータスのトピックの属性を設定できることに加えて、プッシュ通知サービスに送信されるプッシュ通知メッセージの配信ステータスのアプリケーション属性を設定することもできます。詳細については、「メッセージの配信ステータスの Amazon SNS アプリケーション属性を使用する」を参照してください。

HTTP

• HTTPSuccessFeedbackRoleArn

• HTTPSuccessFeedbackSampleRate

• HTTPFailureFeedbackRoleArn

Lambda

• LambdaSuccessFeedbackRoleArn

• LambdaSuccessFeedbackSampleRate

• LambdaFailureFeedbackRoleArn

SQS

• SQSSuccessFeedbackRoleArn

• SQSSuccessFeedbackSampleRate

• SQSFailureFeedbackRoleArn

<ENDPOINT>SuccessFeedbackRoleArn および <ENDPOINT>FailureFeedbackRoleArn 属性は、お客様に代わって CloudWatch Logs を使用する書き込みアクセス許可を Amazon SNS に付与するために使用します。<ENDPOINT>SuccessFeedbackSampleRate 属性は、成功した配信メッセージのサンプルレートの割合(0-100)を指定するためのものです。<ENDPOINT>FailureFeedbackRoleArn 属性を設定した後は、メッセージの配信に失敗すると、必ず CloudWatch Logs が生成されます。

トピック属性を設定する AWS SDK の例以下の例では、AWS SDK で提供されている Amazon SNS クライアントを使用してトピック属性を設定する方法について説明します。

AWS SDK for Java

以下の Java の例で示しているのは、Amazon SNS エンドポイントをサブスクライブしたトピックに送信された通知メッセージの配信ステータスに対して、SetTopicAttributes API によりトピックの属性を設定する方法です。この例では、topicArn、attribName、および attribValue に文字列値が設定されたことを前提としています。

60

Page 66: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージ配信の再試行

final static String topicArn = ("arn:aws:sns:us-east-2:123456789012:MyTopic");final static String attribName = ("LambdaSuccessFeedbackRoleArn");final static String attribValue = ("arn:aws:iam::123456789012:role/SNSSuccessFeedback");

SetTopicAttributesRequest setTopicAttributesRequest = new SetTopicAttributesRequest();setTopicAttributesRequest.withTopicArn(topicArn);setTopicAttributesRequest.setAttributeName(attribName);setTopicAttributesRequest.setAttributeValue(attribValue);

SDK for Java の詳細については、「AWS SDK for Java の使用開始」を参照してください。AWS SDK for .NET

以下の .NET の例で示しているのは、Amazon SNS エンドポイントをサブスクライブしたトピックに送信された通知メッセージの配信ステータスに対して、SetTopicAttributes API によりトピックの属性を設定する方法です。この例では、topicArn、attribName、および attribValue に文字列値が設定されたことを前提としています。

static String topicArn = "arn:aws:sns:us-east-2:123456789012:MyTopic";static String attribName = "LambdaSuccessFeedbackRoleArn";String attribValue = "arn:aws:iam::123456789012:role/SNSSuccessFeedback";

SetTopicAttributesRequest setTopicAttributesRequest = new SetTopicAttributesRequest { TopicArn = topicArn, AttributeName = attribName, AttributeValue = attribValue};

AWS SDK for .NET の詳細については、「AWS SDK for .NET の開始方法」を参照してください。

メッセージ配信の再試行Amazon SNS は、各配信プロトコルの配信ポリシーを定義します。配信ポリシーは、サーバー側のエラーが発生したとき (サブスクライブされたエンドポイントをホストするシステムが利用できなくなったとき)に Amazon SNS がメッセージの配信を再試行する方法を定義します。配信ポリシーがすべて使用されると、Amazon SNS は配信の再試行を停止し、メッセージを破棄します。ただし、サブスクリプションにデッドレターキューがアタッチされている場合は除きます。詳細については、「Amazon SNS デッドレターキュー (p. 65)」を参照してください。

配信プロトコルとポリシーNote

• HTTP/S を除き、Amazon SNS で定義された配信ポリシーを変更することはできません。他の配信プロトコルは、カスタム配信ポリシーをサポートしていません。

• Amazon SNS は、配信の再試行にジッタリングを適用します。詳細については、AWS アーキテクチャブログの「Exponential Backoff and Jitter」の投稿を参照してください。

61

Page 67: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド配信ポリシーの段階

エンドポイントタイプ

配信プロトコル

即時の再試行 (遅延なし) 段階

バックオフ前段階

バックオフ段階

バックオフ後段階

合計試行回数

AmazonSQS

AWSが管理するエンドポイント

AWSLambda

3 回、遅延なし

2 回、1 秒間隔で

10 回、エクスポネンシャルバックオフで 1秒から 20 秒まで

100,000 万回、20 秒間隔で

100,015回、23 日間

SMTP

SMS

カスタマー管理のエンドポイント

モバイルプッシュ

0 回、遅延なし

2 回、10 秒間隔で

10 回、エクスポネンシャルバックオフで 10秒から 600秒まで (10分)

38 回、600秒 (10 分) 間隔で

50 回、6 時間以上

配信ポリシーの段階次の図は、配信ポリシーの段階を示しています。

各配信ポリシーは、4 つの段階で構成されます。

1. 即時の再試行段階 (遅延なし) – この段階は遅延なしの段階とも呼ばれ、最初の配信の試行の直後に発生します。この段階では再試行間の遅延時間はありません。

2. バックオフ前段階 – この段階は、即時の再試行段階の次になります。Amazon SNS は、バックオフ関数を適用する前に、この段階を使用して一連の再試行を試みます。この段階では、再試行回数と再試行間の遅延量を指定します。

3. バックオフ段階 – この段階では、再試行バックオフ関数を使用して、再試行間の遅延を制御します。この段階では、最小遅延、最大遅延、および遅延が最小遅延から最大遅延までどれだけ速く増加するかを定義する再試行バックオフ関数を設定します。バックオフ関数は、数論的、指数、幾何学的、または一次です。

62

Page 68: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド配信ポリシーの作成

4. バックオフ後段階 – バックオフ段階の後にこの段階が続きます。再試行回数とその間の遅延量を指定します。これが最終段階です。

配信ポリシーの作成配信ポリシーとその 4 つの段階を使用して、Amazon SNS が HTTP/S エンドポイントへのメッセージ配信を再試行する方法を定義できます。Amazon SNS では、HTTP サーバーの容量に基づいてポリシーをカスタマイズする場合など、HTTP エンドポイントのデフォルトの再試行ポリシーを上書きできます。

HTTP/S 配信ポリシーは、サブスクリプションレベルまたはトピックレベルで JSON オブジェクトとして設定できます。トピックレベルでポリシーを定義すると、そのトピックに関連付けられたすべての HTTP/S サブスクリプションに適用されます。

HTTP/S サーバーの容量に応じて配信ポリシーをカスタマイズする必要があります。ポリシーは、トピック属性またはサブスクリプション属性として設定できます。トピック内のすべての HTTP/S サブスクリプションが同じ HTTP/S サーバーをターゲットにする場合は、トピックのすべての HTTP/S サブスクリプションで有効になるように、配信ポリシーをトピック属性として設定することをお勧めします。それ以外の場合は、ポリシーがターゲットとする HTTP/S サーバーの容量に応じて、トピック内の HTTP/S サブスクリプションごとに配信ポリシーを作成する必要があります。

次の JSON オブジェクトは、失敗した HTTP/S 配信を再試行するように Amazon SNS に次のように指示する配信ポリシーを表します。

1. 遅延なし段階ですぐに 3 回2. バックオフ前段階で 2 回 (1 秒間隔で)3. 10 回 (1 秒から 60 秒までのエクスポネンシャルバックオフで)4. 35 回 (60 秒間隔で)

Amazon SNS は、合計 50 回試行してからメッセージを破棄します。

Note

また、この配信ポリシーでは、配信を毎秒 10 以下に抑えるよう Amazon SNS に指示しています。

{ "healthyRetryPolicy": { "minDelayTarget": 1, "maxDelayTarget": 60, "numRetries": 50, "numNoDelayRetries": 3, "numMinDelayRetries": 2, "numMaxDelayRetries": 35, "backoffFunction": "exponential" }, "throttlePolicy": { "maxReceivesPerSecond": 10 }}

配信ポリシーは、再試行ポリシーとスロットルポリシーで構成されます。配信ポリシーには、合計で 8 つの属性があります。

ポリシー 説明 制約事項

minDelayTarget 再試行の最小遅延。 0 から最大遅延まで

63

Page 69: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド配信ポリシーの作成

ポリシー 説明 制約事項単位: 秒 デフォルト: 20

maxDelayTarget 再試行の最大遅延。

単位: 秒

最小遅延から 3,600 まで

デフォルト: 20

numRetries 即時再試行、バックオフ前再試行、バックオフ再試行、ポストバックオフ再試行の合計数。

0~100

デフォルト: 3

numNoDelayRetries 即時に行う再試行の回数。再試行の間に遅延はありません。

0 以上

デフォルト: 0

numMinDelayRetries バックオフ前段階での再試行回数と、これらの間に指定された最小遅延時間。

0 以上

デフォルト: 0

numMaxDelayRetries バックオフ後段階での再試行回数と、その間の最大遅延。

0 以上

デフォルト: 0

backoffFunction 再試行間のバックオフのモデル。

次の 4 つのオプションのいずれか。

• 数論的• 指数• 幾何学的• 一次

デフォルト: linear

maxReceivesPerSecond サブスクリプションごとの 1 秒あたりの配信の最大数。

1 以上

デフォルト: スロットリングなし

Amazon SNS は、次の式を使用して、バックオフ段階での再試行回数を計算します。

numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries

3 つのパラメータを使用して、バックオフ段階での再試行の頻度を制御できます。

• minDelayTarget – バックオフ段階の最初の再試行に関連する遅延を定義します。• maxDelayTarget – バックオフ段階の最後の再試行に関連する遅延を定義します。• backoffFunction – バックオフ段階の最初の再試行と最後の再試行の間のすべての再試行に関連する

遅延時間を計算するために Amazon SNS で使用されるアルゴリズムを定義します。4 つの再試行バックオフ関数の 1 つを使用できます。

次の図は、各再試行バックオフ関数が、バックオフ段階での再試行に関連する遅延にどのように影響するかを示しています。再試行の合計回数を 10、最小遅延を 5 秒、最大遅延を 260 秒に設定した配信ポリシーです。縦軸は、10 回ごとの再試行に関連する遅延時間を秒単位で表します。横軸は、最初の試行から10 回目の試行までの再試行回数を表します。

64

Page 70: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデッドレターキュー

Amazon SNS デッドレターキューデッドレターキューは、Amazon SNS サブスクリプションが正常にサブスクライバーに配信されなかったメッセージをターゲットにできる Amazon SQS キューです。クライアントエラーまたはサーバーエラーにより配信できなかったメッセージは、追加の分析や再処理のためにデッドレターキューに維持されます。詳細については、Amazon SNS サブスクリプションの Amazon SNS デッドレターキューを設定する (p. 18) および メッセージ配信の再試行 (p. 61) を参照してください。

Note

• Amazon SNS サブスクリプションと Amazon SQS キューは同じ AWS アカウントとリージョンにある必要があります。

• 現在、Amazon SNS サブスクリプションのデッドレターキューとして Amazon SQS FIFOキューを使用できません。

• 暗号化された Amazon SQS キューをデッドレターキューとして使用するには、AWS KMS APIアクションに Amazon SNS サービスの一次アクセスを付与するキーポリシーがあるカスタムCMK を使用する必要があります。詳細については、本ガイドの「保管時の暗号化 (p. 187)」および Amazon Simple Queue Service 開発者ガイド の「サーバー側の暗号化 (SSE) およびAWS KMS を使用した Amazon SQS データの保護」を参照してください。

トピック• メッセージ配信が失敗する理由 (p. 65)• デッドレターキューのしくみ (p. 66)• メッセージがデッドレターキューに移動する仕組み (p. 66)• メッセージをデッドレターキューから移動する方法 (p. 67)• デッドレターキューのモニタリングとログ記録方法 (p. 67)

メッセージ配信が失敗する理由一般に、Amazon SNS がクライアント側またはサーバー側のエラーにより、サブスクライブされたエンドポイントにアクセスできない場合、メッセージの配信は失敗します。Amazon SNS がクライアント側のエラーを受け取った場合、または対応する再試行ポリシーで指定された再試行回数を超えるメッセージ

65

Page 71: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデッドレターキューのしくみ

のサーバー側エラーを受信し続ける場合、Amazon SNS はデッドレターキューがサブスクリプションにアタッチされていない限り、メッセージを破棄します。配信に失敗しても、サブスクリプションのステータスは変更されません。詳細については、「メッセージ配信の再試行 (p. 61)」を参照してください。

クライアント側のエラーAmazon SNS に古いサブスクリプションのメタデータがあると、クライアント側のエラーが発生する可能性があります。これらのエラーは、通常、所有者がエンドポイント (Amazon SNS トピックにサブスクライブされている Lambda 関数など) を削除した場合や、サブスクライブしているエンドポイントにアタッチされているポリシーを、Amazon SNS がエンドポイントにメッセージを配信できないように所有者が変更した場合に発生します。Amazon SNS は、クライアント側のエラーの結果として失敗したメッセージ配信を再試行しません。

サーバー側のエラーサーバー側のエラーは、サブスクライブされたエンドポイントを担当するシステムが利用できなくなったり、Amazon SNS からの有効なリクエストを処理できないことを示す例外を返す場合に発生します。サーバー側のエラーが発生すると、Amazon SNS は一次バックオフ関数またはエクスポネンシャルバックオフ関数を使用して、失敗した配信を再試行します。Amazon SQS または AWS Lambda によってバックアップされた AWS 管理のエンドポイントに起因するサーバー側エラーについては、Amazon SNS は 23 日間にわたって 100,015 回まで配信を再試行します。

カスタマー管理のエンドポイント (HTTP、SMTP、SMS、モバイルプッシュなど) も、サーバー側のエラーを引き起こす可能性があります。Amazon SNS は、これらのタイプのエンドポイントにも配信を再試行します。HTTP エンドポイントはお客様定義の再試行ポリシーをサポートしますが、Amazon SNS はSMTP、SMS、およびモバイルプッシュエンドポイントに対して、内部配信再試行ポリシーを 6 時間にわたって 50 回に設定します。

デッドレターキューのしくみメッセージの配信はサブスクリプションレベルで行われるため、デッドレターキューは (トピックではなく) Amazon SNS サブスクリプションにアタッチされます。これにより、各メッセージの元のターゲットエンドポイントをより簡単に識別できます。

Amazon SNS サブスクリプションに関連付けられたデッドレターキューは、通常の Amazon SQS キューです。メッセージ保持期間の詳細については、『Amazon Simple Queue Service 開発者ガイド』の「メッセージに関連する制限」を参照してください。Amazon SQS SetQueueAttributes API アクションを使用して、メッセージの保持期間を変更できます。アプリケーションの復元性を高めるために、デッドレターキューの最大保持期間を 14 日に設定することをお勧めします。

メッセージがデッドレターキューに移動する仕組みメッセージは、再処理ポリシーを使用してデッドレターキューに移動されます。再処理ポリシーは、デッドレターキューの ARN を参照する JSON オブジェクトです。deadLetterTargetArn 属性は ARN を指定します。ARN は、Amazon SNS サブスクリプションと同じ AWS アカウントおよびリージョンのAmazon SQS キューを指している必要があります。詳細については、「Amazon SNS サブスクリプションの Amazon SNS デッドレターキューを設定する (p. 18)」を参照してください。

Note

現在、Amazon SNS サブスクリプションのデッドレターキューとして Amazon SQS FIFO キューを使用できません。

次の JSON オブジェクトは、SNS サブスクリプションにアタッチされた再処理ポリシーのサンプルです。

{ "deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"}

66

Page 72: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージをデッドレターキューから移動する方法

メッセージをデッドレターキューから移動する方法メッセージをデッドレターキューから移動するには、次の 2 つの方法があります。

• Amazon SQS コンシューマロジックの作成を避ける – デッドレターキューをイベントソースとしてLambda 関数に設定して、デッドレターキューを吸い出します。

• Amazon SQS コンシューマロジックを作成する – Amazon SQS API、AWS SDK、または AWS CLI を使用して、デッドレターキュー内のメッセージのポーリング、処理、削除を行うカスタムコンシューマーロジックを記述します。

デッドレターキューのモニタリングとログ記録方法Amazon CloudWatch メトリクスを使用して、Amazon SNS サブスクリプションに関連付けられたデッドレターキューをモニタリングできます。すべての Amazon SQS キューは 5 分間隔で CloudWatch メトリクスを出力します。詳細については、Amazon Simple Queue Service 開発者ガイドの「使用可能な Amazon SQS の CloudWatch メトリクス」を参照してください。デッドレターキューを持つすべての Amazon SNS サブスクリプションも、CloudWatch メトリクスを出力します。詳細については、「CloudWatch メトリクスを使用した Amazon SNS トピックのモニタリング (p. 221)」を参照してください。

デッドレターキューのアクティビティを通知するには、CloudWatch メトリクスとアラームを使用できます。たとえば、デッドレターキューが常に空であると予想される場合、NumberOfMessagesSent メトリクスの CloudWatch アラームを作成できます。アラームのしきい値を 0 に設定し、アラームがオフになったときに通知する Amazon SNS トピックを指定できます。この Amazon SNS トピックは、任意のエンドポイントタイプ (E メールアドレス、電話番号、モバイルポケットベルアプリなど) にアラーム通知を配信できます。

CloudWatch Logs を使用して、Amazon SNS 配信が失敗する原因となる例外や、デッドレターキューに送信されるメッセージを調査できます。Amazon SNS は、成功した配信と失敗した配信の両方を CloudWatch にログ記録できます。詳細については、「Amazon SNS メッセージ配信ステータス (p. 58)」を参照してください。

Amazon SNS メッセージ属性Amazon SNS では、メッセージに関する構造化メタデータ項目 (タイムスタンプ、地理空間データ、署名、識別子など) を指定できるメッセージ属性の配信をサポートしています。各メッセージには最大 10 個の属性を指定できます。

メッセージ属性はオプションであり、メッセージ本文とは別個のものですが、同時に送信されます。受信者は、この情報を使用して、メッセージ本文を最初に処理する必要なしでメッセージを処理する方法を決定できます。

AWS マネジメントコンソール または AWS SDK for Java を使用して、属性を使ってメッセージを送信する詳細については、「属性を使用して Amazon SNS トピックにメッセージを発行する (p. 23)」チュートリアルを参照してください。

Note

メッセージ属性は、メッセージ構造が JSON ではなく String である場合にのみ送信されます。

また、モバイルエンドポイント用のプッシュ通知メッセージを構築するためにメッセージ属性を使用することもできます。このシナリオでは、メッセージ属性はプッシュ通知メッセージの構築のみに使用されます。属性は、Amazon SQS エンドポイントにメッセージ属性とともにメッセージを送信する場合とは異なり、エンドポイントには配信されません。

67

Page 73: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージ属性の項目および検証

メッセージ属性を使用して、サブスクリプションフィルタポリシーでメッセージをフィルタリング可能にすることもできます。フィルタポリシーは、トピックのサブスクリプションに適用もできます。フィルタポリシーを適用すると、サブスクリプションは、ポリシーが受け入れる属性を持つメッセージのみを受信します。詳細については、「メッセージのフィルタ処理 (p. 70)」を参照してください。

メッセージ属性の項目および検証各メッセージ属性は、次の項目で構成されています。

• 名前 – メッセージ属性名には、A-Z、a-z、0-9、下線(_)、ハイフン(-)、ピリオド(.)を使用できます。名前の先頭と末尾をピリオドにすることはできず、ピリオドを連続して使用することはできません。名前では大文字と小文字が区別され、メッセージのすべての属性名間で一意にする必要があります。名前の長さは最大 256 文字です。名前の先頭を「AWS.」や「Amazon.」(または、大文字と小文字が異なるあらゆる変化形) にすることはできません。これらのプレフィックスは Amazon Web Servicesで使用するために予約されているからです。

• 型 – サポートされるメッセージ属性のデータ型は、String、String.Array、Number、Binaryです。データ型のコンテンツには、メッセージ本文と同じ制限があります。データ型では大文字と小文字が区別され、長さは最大 256 バイトです。詳細については、「メッセージ属性のデータ型と検証 (p. 68)」セクションを参照してください。

• 値 – ユーザー指定のメッセージ属性値。文字列データ型の場合、値属性のコンテンツにはメッセージ本文と同じ制限があります。詳細については、『Amazon Simple Notification Service API Reference』の「Publish」アクションを参照してください。

名前、型、値を空または Null にすることはできません。さらに、メッセージ本文を空または Null にすることもできません。メッセージ属性のすべての部分 (名前、型、値を含む) は、メッセージサイズの制限に含められます。制限は 256 KB です。

メッセージ属性のデータ型と検証メッセージ属性のデータ型は、メッセージ属性が Amazon SNS によって処理される方法を特定します。たとえば、型が数値の場合、Amazon SNS はその属性が数値であることを検証します。

Amazon SNS では、以下の論理データ型がサポートされています。

• 文字列 – 文字列は、UTF-8 バイナリエンコードされた Unicode です。コードの値のリストについては、http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters を参照してください。

• String.Array – 複数の値を含むことができる文字列として書式設定される配列。この値は、文字列、数値、またはキーワード (true、false、null) とすることができます。

• 数値 – 数値は正または負の整数か、浮動小数点数です。数値には、整数、浮動小数点数、倍精度浮動小数点数が通常サポートするほとんどの値を包含できる十分な範囲と精度があります。数値は -109~109

までの値とすることができ、小数点以下 5 桁の精度を持ちます。先頭と末尾の 0 は切り捨てられます。• Binary – Binary 型の属性には、圧縮データ、暗号化データ、イメージなど、任意のバイナリデータが保

存されます。

モバイルプッシュ通知の予約済みメッセージ属性次の表は、プッシュ通知メッセージを構築するために使用できるモバイルプッシュ通知サービスの予約済みメッセージ属性の一覧です。

プッシュ通知サービス 予約済みメッセージ属性

ADM AWS.SNS.MOBILE.ADM.TTL

68

Page 74: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドモバイルプッシュ通知の予約済みメッセージ属性

プッシュ通知サービス 予約済みメッセージ属性

AWS.SNS.MOBILE.APNS_MDM.TTL

AWS.SNS.MOBILE.APNS_MDM_SANDBOX.TTL

AWS.SNS.MOBILE.APNS_PASSBOOK.TTL

AWS.SNS.MOBILE.APNS_PASSBOOK_SANDBOX.TTL

AWS.SNS.MOBILE.APNS_SANDBOX.TTL

AWS.SNS.MOBILE.APNS_VOIP.TTL

AWS.SNS.MOBILE.APNS_VOIP_SANDBOX.TTL

AWS.SNS.MOBILE.APNS.COLLAPSE_ID

AWS.SNS.MOBILE.APNS.PRIORITY

AWS.SNS.MOBILE.APNS.PUSH_TYPE

AWS.SNS.MOBILE.APNS.TOPIC

AWS.SNS.MOBILE.APNS.TTL

APNs

AWS.SNS.MOBILE.PREFERRED_AUTHENTICATION_METHOD

AWS.SNS.MOBILE.BAIDU.DeployStatus

AWS.SNS.MOBILE.BAIDU.MessageKey

AWS.SNS.MOBILE.BAIDU.MessageType

Baidu

AWS.SNS.MOBILE.BAIDU.TTL

AWS.SNS.MOBILE.FCM.TTLFCM

AWS.SNS.MOBILE.GCM.TTL

AWS.SNS.MOBILE.MACOS_SANDBOX.TTLmacOS

AWS.SNS.MOBILE.MACOS.TTL

AWS.SNS.MOBILE.MPNS.NotificationClass

AWS.SNS.MOBILE.MPNS.TTL

MPNS

AWS.SNS.MOBILE.MPNS.Type

AWS.SNS.MOBILE.WNS.CachePolicy

AWS.SNS.MOBILE.WNS.Group

AWS.SNS.MOBILE.WNS.Match

AWS.SNS.MOBILE.WNS.SuppressPopup

AWS.SNS.MOBILE.WNS.Tag

AWS.SNS.MOBILE.WNS.TTL

WNS

AWS.SNS.MOBILE.WNS.Type

69

Page 75: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージのフィルタ処理

Amazon SNS メッセージのフィルタ処理デフォルトでは、Amazon SNS トピックの受信者は、トピックに対して発行されたすべてのメッセージを受信します。メッセージのサブセットを受信する場合、受信者はトピックのサブスクリプションにフィルタポリシーを割り当てる必要があります。

フィルタポリシーは、受信者が受信するメッセージを定義する属性が含まれているシンプルな JSON オブジェクトです。トピックにメッセージを発行すると、Amazon SNS はトピックの各サブスクリプションフィルタポリシー内の属性と、メッセージ属性を比較します。一致する属性があると、Amazon SNS は受信者にメッセージを送信します。それ以外の場合、Amazon SNS はメッセージを送信することなく、受信者をスキップします。サブスクリプションにフィルタポリシーがない場合は、そのトピックに発行されたすべてのメッセージがサブスクリプションで受信されます。

メッセージのフィルタ条件をトピックのサブスクリプションに統合することで、Amazon SNS の使用を簡略化できます。これにより、受信者からはメッセージのフィルタ処理ロジックをオフロードし、発行者からはメッセージのルーティングロジックをオフロードできるため、メッセージをフィルタ処理するために条件ごとに別個のトピックを作成する必要がなくなります。単一のトピックを使用することで、属性を使用してメッセージを差別化できます。各受信者は、そのフィルタポリシーで許可されたメッセージのみを受信および処理します。

たとえば、単一のトピックを使用して、小売サイトのトランザクションで生成されたすべてのメッセージを発行できます。トランザクション状態を示すには、各メッセージに対して属性(order_placed、order_cancelled、order_declined など) を割り当てることができます。フィルタポリシーでサブスクリプションを作成することで、メッセージのトランザクション状態を処理するように設計されたキューに各メッセージをルーティングできます。

詳細については、以下を参照してください。

• トピックにパブリッシュされたメッセージをフィルタする• 属性文字列値の一致 (ホワイトリスト、ブラックリスト、プレフィックスマッチング) (p. 73)• 属性数値の一致 (ホワイトリスト、ブラックリスト、および範囲一致) (p. 74)• 属性キーの一致 (p. 75)

トピック• Amazon SNS サブスクリプションフィルタポリシー (p. 70)• チュートリアル: サブスクリプションフィルタポリシーを適用する (p. 76)• チュートリアル: サブスクリプションフィルタポリシーを削除する (p. 79)• Java コレクションとしてのサブスクリプションフィルタポリシー (p. 80)

Amazon SNS サブスクリプションフィルタポリシーサブスクリプションフィルタポリシーを使用すると、属性名を指定して、属性名ごとに値のリストを割り当てることができます。詳細については、「メッセージのフィルタ処理 (p. 70)」を参照してください。

Amazon SNS がサブスクリプションフィルタポリシーに対してメッセージ属性を評価する際に、ポリシーに指定されていないメッセージ属性は無視されます。

サブスクリプションは、以下の条件に該当するメッセージを受け入れます。

• フィルタポリシーの各属性名が、メッセージに割り当てられた属性名と一致する。• 一致する属性名ごとに、以下の間に、少なくとも 1 つの一致が存在する。

70

Page 76: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションフィルタポリシー

• フィルタポリシー内の属性名の値• メッセージ属性

トピック• メッセージ例と属性 (p. 71)• フィルタポリシーの例 (p. 72)• フィルタポリシーの制約 (p. 72)• 属性文字列値の一致 (p. 73)• 属性数値の一致 (p. 74)• 属性キーの一致 (p. 75)• AND/OR ロジック (p. 76)

メッセージ例と属性次の例は、顧客のトランザクションを発行する Amazon SNS トピックから送信されるメッセージペイロードを示しています。MessageAttributes フィールドには、トランザクションを記述する以下の属性が含まれます。

• 顧客の興味• ストア名• イベント状態• 購入価格 (USD)

このメッセージには MessageAttributes フィールドが含まれるため、フィルタポリシーを含むすべてのトピックのサブスクリプションでは、メッセージを選択的に許可または拒否することができます。

{ "Type": "Notification", "MessageId": "a1b2c34d-567e-8f90-g1h2-i345j67klmn8", "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic", "Message": "message-body-with-transaction-details", "Timestamp": "2019-11-03T23:28:01.631Z", "SignatureVersion": "4", "Signature": "signature", "UnsubscribeURL": "unsubscribe-url", "MessageAttributes": { "customer_interests": { "Type": "String.Array", "Value": "[\"soccer\", \"rugby\", \"hockey\"]" }, "store": { "Type": "String", "Value":"example_corp" }, "event": { "Type": "String", "Value": "order_placed" }, "price_usd": { "Type": "Number", "Value":210.75 } }}

71

Page 77: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションフィルタポリシー

メッセージへの属性の適用の詳細については、「Amazon SNS メッセージ属性 (p. 67)」を参照してください。

フィルタポリシーの例以下のフィルタポリシーでは、属性の名前と値に基づいてメッセージを許可または拒否します。

メッセージを許可するポリシー次のサブスクリプションフィルタポリシーの属性は、メッセージ例に割り当てられた属性に一致します。

このポリシーの 1 つの属性が、メッセージに割り当てられた属性と一致しなかった場合、ポリシーはメッセージを拒否します。

{ "store": ["example_corp"], "event": [{"anything-but": "order_cancelled"}], "customer_interests": [ "rugby", "football", "baseball" ], "price_usd": [{"numeric": [">=", 100]}]}

メッセージを拒否するポリシー次のサブスクリプションフィルタポリシーでは、その属性と、メッセージ例に割り当てられた属性の間に、複数の不一致があります。encrypted 属性名はメッセージ属性に存在していないため、メッセージに割り当てられている値にかかわらず、このポリシー属性によってメッセージは拒否されます。

不一致が発生すると、ポリシーはメッセージを拒否します。

{ "store": ["example_corp"], "event": ["order_cancelled"], "encrypted": [false], "customer_interests": [ "basketball", "baseball" ]}

フィルタポリシーの制約フィルタポリシーを作成する場合は、以下の制約に留意してください。

• String データ型の場合、ポリシーとメッセージの属性の比較では、文字列の大文字と小文字が区別されます。

• 数値ポリシー属性は -109~109 までの値とすることができ、小数点以下 5 桁の精度を持ちます。• 値の組み合わせの合計は 150 以下でなければなりません。各配列の値の最大数を乗算して、組み合わせ

の合計を計算します。

次のポリシーについて考えます。

{ "key_a": ["value_one", "value_two", "value_three"], "key_b": ["value_one"], "key_c": ["value_one", "value_two"]

72

Page 78: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションフィルタポリシー

}

最初の配列には 3 つの値、2 番目には 1 つの値、3 番目には 2 つの値があります。組み合わせの合計は次のように計算されます。

3 x 1 x 2 = 6

• Amazon SNS は、以下のデータ型に該当するメッセージ属性とのみポリシー属性を比較します。• String

• String.Array

• Number

• Amazon SNS は、データ型が Binary のメッセージ属性を無視します。• フィルタポリシーの JSON には以下のものが含まれます。

• 引用符で囲まれた文字列• 数字• 引用符なしのキーワード true、false、および null

• Amazon SNS API を使用する場合は、フィルタポリシーの JSON を有効な UTF-8 文字列として渡す必要があります。

• フィルタポリシーは、最大 5 個の属性名を持つことができます。• ポリシーの最大サイズは 256 KB です。• デフォルトでは、リージョンごとに、AWS アカウントあたり最大 200 個のフィルタポリシーを持つこ

とができます。この限度を引き上げるには、限度引き上げリクエストを送信します。

属性文字列値の一致文字列値を使用してメッセージ属性とフィルタメッセージを一致させることができます。JSON ポリシーでは、文字列値を二重引用符で囲みます。

次の文字列オペレーションを使用してメッセージ属性と一致させることができます。

完全一致 (ホワイトリスト)完全一致は、ポリシー属性値が 1 つ以上のメッセージ属性値と一致した場合に発生します。

次のポリシー属性について考えます。

"customer_interests": ["rugby", "tennis"]

このポリシー属性は、以下のメッセージ属性と一致します。

"customer_interests": {"Type": "String", "Value": "rugby"}

"customer_interests": {"Type": "String", "Value": "tennis"}

ただし、次のメッセージ属性とは一致しません。

"customer_interests": {"Type": "String", "Value": "baseball"}

「以外」の一致 (ブラックリスト)ポリシー属性値に anything-but キーワードが含まれている場合、このポリシー属性値のいずれも含まれていないすべてのメッセージ属性と一致します。

73

Page 79: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションフィルタポリシー

次のポリシー属性について考えます。

"customer_interests": [{"anything-but": ["rugby", "tennis"]}]

このポリシー属性は、以下のメッセージ属性のいずれとも一致します。

"customer_interests": {"Type": "String", "Value": "baseball"}

"customer_interests": {"Type": "String", "Value": "football"}

また、次のメッセージ属性とも一致します (含まれている値が rugby でも tennis でもないため)。

"customer_interests": {"Type": "String.Array", "Value": "[\"rugby\", \"baseball\"]"}

ただし、次のメッセージ属性とは一致しません。

"customer_interests": {"Type": "String", "Value": "rugby"}

プレフィックスマッチングポリシー属性に prefix キーワードが含まれている場合、ポリシー属性は、指定した文字で始まる任意のメッセージ属性値と一致します。

次のポリシー属性について考えます。

"customer_interests": [{"prefix": "bas"}]

このポリシー属性は、以下のメッセージ属性のいずれとも一致します。

"customer_interests": {"Type": "String", "Value": "baseball"}

"customer_interests": {"Type": "String", "Value": "basketball"}

ただし、次のメッセージ属性とは一致しません。

"customer_interests": {"Type": "String", "Value": "rugby"}

属性数値の一致数値の一致を使用して、メッセージ属性とフィルタメッセージを一致させることができます。JSON ポリシーでは、数値を二重引用符で囲みません。次の数値オペレーションを使用してメッセージ属性と一致させることができます。

完全一致 (ホワイトリスト)ポリシー属性値に numeric キーワードと = 演算子が含まれている場合、同じ名前および等しい数値を持つ任意のメッセージ属性と一致します。

次のポリシー属性について考えます。

"price_usd": [{"numeric": ["=",301.5]}]

このポリシー属性は、以下のメッセージ属性のいずれとも一致します。

74

Page 80: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションフィルタポリシー

"price_usd": {"Type": "Number", "Value": 301.5}

"price_usd": {"Type": "Number", "Value": 3.015e2}

「以外」の一致 (ブラックリスト)ポリシー属性値に anything-but キーワードが含まれている場合、このポリシー属性値のいずれも含まれていないすべてのメッセージ属性と一致します。

次のポリシー属性について考えます。

"price": [{"anything-but": [100, 500]}]

このポリシー属性は、以下のメッセージ属性のいずれとも一致します。

"price": {"Type": "Number", "Value": 101}

"price": {"Type": "Number", "Value": 100.1}

また、次のメッセージ属性とも一致します (含まれている値が 100 でも 500 でもないため)。

"price": {"Type": "Number.Array", "Value": "[100, 50]"}

ただし、次のメッセージ属性とは一致しません。

"price": {"Type": "Number", "Value": 100}

値範囲の一致数値ポリシー属性には、= 演算子に加えて、<、<=、>、および >= を含めることができます。

次のポリシー属性について考えます。

"price_usd": [{"numeric": ["<", 0]}]

このポリシー属性は、負の数値を持つ任意のメッセージ属性と一致します。

別のポリシー属性について考えます。

"price_usd": [{"numeric": [">", 0, "<=", 150]}]

このポリシー属性は、最大 150 までの正の数値を持つメッセージ属性と一致します。

属性キーの一致exists 演算子を使用して、フィルタポリシーにキーがリストされている属性が入力メッセージにあるかどうかをチェックできます。

次のポリシー属性について考えます。

"store": [{"exists": true}]

次のような、少なくとも store 属性キーを持つすべてのメッセージに一致します。

75

Page 81: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: サブスクリプショ

ンフィルタポリシーを適用する

"store": "fans""customer_interests": ["baseball", "basketball"]

ただし、次のような、store 属性キーがないメッセージには一致しません。

"customer_interests": ["baseball", "basketball"]

AND/OR ロジックAND/OR ロジックを含むオペレーションを使用してメッセージ属性と一致させることができます。

AND ロジック複数の属性名を使用して AND ロジックを適用できます。

次のポリシーについて考えます。

{ "customer_interests": ["rugby"], "price_usd": [{"numeric": [">", 100]}]}

このポリシーは、customer_interests の値が rugby に設定され、さらに price_usd が 100 を超える値に設定されている任意のメッセージ属性と一致します。

OR ロジック属性名に複数の値を割り当てることで OR ロジックを適用できます。

次のポリシー属性について考えます。

"customer_interests": ["rugby", "football", "baseball"]

このポリシー属性は、customer_interests の値が rugby、football、または baseball に設定されている任意のメッセージ属性と一致します。

チュートリアル: サブスクリプションフィルタポリシーを適用するAmazon SNS コンソールを使用して、Amazon SNS サブスクリプションにフィルタポリシーを適用できます。または、プログラムでポリシーを適用するには、Amazon SNS API、AWS Command Line Interface(AWS CLI)、または Amazon SNS 対応の AWS SDK (AWS SDK for Java など) を使用できます。

AWS マネジメントコンソール1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[サブスクリプション] を選択します。3. サブスクリプションを選択したら、[Edit (編集)] を選択します。4. [Edit EXAMPLE1-23bc-4567-d890-ef12g3hij456 (例1-23bc-4567-d890-ef12g3hij456 の編集)]

ページで、[Subscription filter policy (サブスクリプションフィルタポリシー)] セクションを展開します。

5. [JSON editor (JSON エディタ)] フィールドで、フィルタポリシーの JSON 本文を提供します。6. [Save changes] を選択します。

76

Page 82: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: サブスクリプショ

ンフィルタポリシーを適用する

Amazon SNS により、フィルタポリシーがサブスクリプションに適用されます。

AWS CLIAWS Command Line Interface (AWS CLI) を使用してフィルタポリシーを適用するには、以下の例に示すように set-subscription-attributes コマンドを使用します。

$ aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name FilterPolicy --attribute-value '{\"store\":[\"example_corp\"],\"event\":[\"order_placed\"]}'

--attribute-name オプションで、FilterPolicy を指定します。--attribute-value で、JSONポリシーを指定します。

ポリシーに有効な JSON を提供するには、属性名と値を二重引用符で囲みます。また、ポリシーの引数全体を引用符で囲む必要があります。引用符のエスケープを避けるため、例に示すように、一重引用符を使用してポリシーを囲み、二重引用符を使用して JSON 名と値を囲みます。

フィルタポリシーが適用されたことを確認するには、get-subscription-attributes コマンドを使用します。ターミナル出力の属性には、次の例に示すように、FilterPolicy キーのフィルタポリシーが表示されます。

$ aws sns get-subscription-attributes --subscription-arn arn:aws:sns: ...{ "Attributes": { "Endpoint": "endpoint . . .", "Protocol": "https", "RawMessageDelivery": "false", "EffectiveDeliveryPolicy": "delivery policy . . .", "ConfirmationWasAuthenticated": "true", "FilterPolicy": "{\"store\": [\"example_corp\"], \"event\": [\"order_placed\"]}", "Owner": "111122223333", "SubscriptionArn": "arn:aws:sns: . . .", "TopicArn": "arn:aws:sns: . . ." }}

AWS SDK for Java以下の例では、AWS SDK で提供されている Amazon SNS クライアントを使用して、フィルタポリシーを適用する方法について説明します。

AWS SDK for Java

AWS SDK for Java を使用してフィルタポリシーを適用するには、AmazonSNS クライアントの setSubscriptionAttributes メソッドを使用します。次の例のように、SetSubscriptionAttributesRequest オブジェクトを引数として指定します。

AmazonSNS snsClient = AmazonSNSClientBuilder.defaultClient();String filterPolicyString = "{\"store\":[\"example_corp\"],\"event\":[\"order_placed\"]}";SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest(subscriptionArn, "FilterPolicy", filterPolicyString);snsClient.setSubscriptionAttributes(request);

SetSubscriptionAttributesRequest オブジェクトを初期化するには、次の引数を指定します。

77

Page 83: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: サブスクリプショ

ンフィルタポリシーを適用する

• subscriptionArn – ポリシーを適用するサブスクリプションの Amazon リソースネーム (ARN)。• attributeName – "FilterPolicy" であることが必要です。• attributeValue – 文字列としての JSON フィルタポリシー。文字列ポリシーは二重引用符で囲

む必要があるため、\"store\" のように、属性名と値を囲む二重引用符を忘れずにエスケープしてください。

SetSubscriptionAttributesRequest クラスでは、フィルタポリシーを文字列として受け取ります。ポリシーを Java コレクションとして定義する場合は、各属性名を値のリストと関連付けるマップを作成します。サブスクリプションにポリシーを割り当てるには、最初にマップのコンテンツからポリシーの文字列バージョンを作成します。次にその文字列を attributeValue 引数としてSetSubscriptionAttributesRequest に渡します。

AWS SDK for .NET

AWS SDK for .NET を使用してフィルタポリシーを適用するには、AmazonSNS クライアントの SetSubscriptionAttributes メソッドを使用します。次の例のように、SetSubscriptionAttributesRequest オブジェクトを引数として指定します。

AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient();String filterPolicyString = "{\"store\":[\"example_corp\"],\"event\":[\"order_placed\"]}";SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest(subscriptionArn, "FilterPolicy", filterPolicyString);snsClient.setSubscriptionAttributes(request);

SetSubscriptionAttributesRequest オブジェクトを初期化するには、次の引数を指定します。

• subscriptionArn – ポリシーを適用するサブスクリプションの Amazon リソースネーム (ARN)。• attributeName – "FilterPolicy" であることが必要です。• attributeValue – 文字列としての JSON フィルタポリシー。文字列ポリシーは二重引用符で囲

む必要があるため、\"store\" のように、属性名と値を囲む二重引用符を忘れずにエスケープしてください。

SetSubscriptionAttributesRequest クラスでは、フィルタポリシーを文字列として受け取ります。ポリシーを C# コレクションとして定義する場合は、各属性名を値のリストと関連付けるディクショナリを作成します。サブスクリプションにポリシーを割り当てるには、最初にディクショナリのコンテンツからポリシーの文字列バージョンを作成します。次にその文字列を attributeValue 引数として SetSubscriptionAttributesRequest に渡します。

Amazon SNS APIAmazon SNSAPI を使用してフィルタポリシーを適用するには、SetSubscriptionAttributesアクションをリクエストします。AttributeName パラメータを FilterPolicy に設定し、AttributeValue パラメータをフィルタポリシーの JSON に設定します。

AWS CloudFormationAWS CloudFormation を使用してフィルタポリシーを適用するには、JSON または YAML テンプレートを使用して AWS CloudFormation スタックを作成します。詳細については、『AWS CloudFormation ユーザーガイド』の AWS::SNS::Subscription リソースの FilterPolicy プロパティと、サンプル AWSCloudFormation テンプレートを参照してください。

1. AWS CloudFormation コンソールにサインインします。2. [Create Stack] を選択します。

78

Page 84: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドチュートリアル: サブスクリプショ

ンフィルタポリシーを削除する

3. [テンプレートの選択] ページで、[テンプレートを Amazon S3 にアップロード] を選択してから、ファイルを選択して [次へ] を選択します。

4. [詳細の指定] ページで、以下の作業を行います。

a. [スタックの名前] に「MyFilterPolicyStack」と入力します。b. [myHttpEndpoint] に、トピックにサブスクライブする HTTP エンドポイントを入力します。

Tip

HTTP エンドポイントがない場合は作成します。5. [Options] ページで、[Next] を選択します。6. [Review (確認)] ページで、[ Create (作成)] を選択します。

チュートリアル: サブスクリプションフィルタポリシーを削除するサブスクリプションに送信されるメッセージのフィルタ処理を停止するには、サブスクリプションフィルタポリシーを空の JSON 本文で上書きすることで削除します。このポリシーを削除したら、サブスクリプションは発行されるすべてのメッセージを受け取るようになります。

AWS マネジメントコンソール1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[サブスクリプション] を選択します。3. サブスクリプションを選択したら、[Edit (編集)] を選択します。4. [Edit EXAMPLE1-23bc-4567-d890-ef12g3hij456 (例1-23bc-4567-d890-ef12g3hij456 の編集)]

ページで、[Subscription filter policy (サブスクリプションフィルタポリシー)] セクションを展開します。

5. [JSON editor (JSON エディタ)] フィールドで、フィルタポリシーの空の JSON 本文を提供します({})。

6. [Save changes] を選択します。

Amazon SNS により、フィルタポリシーがサブスクリプションに適用されます。

AWS CLIAWS CLI を使用してフィルタポリシーを削除するには、set-subscription-attributes コマンドを使用し、--attribute-value 引数に空の JSON 本文を指定します。

$ aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name FilterPolicy --attribute-value "{}"

AWS SDK for Java以下の例では、AWS SDK で提供されている Amazon SNS クライアントを使用してフィルタポリシーを削除する方法について説明します。

AWS SDK for Java

AWS SDK for Java を使用してフィルタポリシーを削除するには、AmazonSNS クライアントのsetSubscriptionAttributes メソッドを使用します。フィルタポリシーとして空の JSON 本文を含む文字列を指定します。

79

Page 85: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドJava コレクションとしてのサブスクリプションフィルタポリシー

AmazonSNS snsClient = AmazonSNSClientBuilder.defaultClient();SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest(subscriptionArn, "FilterPolicy", "{}");snsClient.setSubscriptionAttributes(request);

AWS SDK for .NET

AWS SDK for .NET を使用してフィルタポリシーを削除するには、AmazonSNS クライアントのSetSubscriptionAttributes メソッドを使用します。フィルタポリシーとして空の JSON 本文を含む文字列を指定します。

AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient();SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest(subscriptionArn, "FilterPolicy", "{}");snsClient.SetSubscriptionAttributes(request);

Amazon SNS APIAmazon SNS API を使用してフィルタポリシーを削除するには、SetSubscriptionAttributesアクションへのリクエストを行います。AttributeName パラメータを FilterPolicy に設定し、AttributeValue パラメータに空の JSON 本文を指定します。

Java コレクションとしてのサブスクリプションフィルタポリシーAWS SDK for Java を使用してサブスクリプションフィルタポリシーを Amazon SNS クライアントに提供するには、以下のプロセスを使用してポリシーを文字列として渡す必要があります。

1. ポリシーをコレクションとして定義するには、各属性名を値のリストと関連付けるマップを作成します。

2. サブスクリプションにポリシーを割り当てるには、マップのコンテンツからポリシーの文字列バージョンを作成します。

3. この文字列を Amazon SNS クライアントに渡します。

Java の使用例次の Java コード例は、サブスクリプションフィルタポリシーを Amazon SNS クライアントに提供するプロセスを示しています。

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */

80

Page 86: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドJava コレクションとしてのサブスクリプションフィルタポリシー

import com.amazonaws.services.sns.AmazonSNS;import com.amazonaws.services.sns.model.SetSubscriptionAttributesRequest;

import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.stream.Collectors;

// The class stores the filterPolicy field as a map.public class SNSMessageFilterPolicy {

private final Map<String, Attribute> filterPolicy = new HashMap<>();

// You can use the addAttribute(), addAttributePrefix(), and addAttributeAnythingBut() // methods to add attributes to your policy. These methods accept the attribute name as a string, // and they are specialized to accept different value types. You can pass values as strings, // lists of strings, numbers, or number ranges and you can also add the attributes anything-but // and prefix. public void addAttribute(final String attributeName, final String attributeValue) { filterPolicy.put(attributeName, new Attribute<>(AttributeType.String, attributeValue)); }

public void addAttribute(final String attributeName, final ArrayList<String> attributeValues) { final ArrayList<Attribute> attributes = new ArrayList<>(); for (final String s : attributeValues) { attributes.add(new Attribute<>(AttributeType.String, s)); } filterPolicy.put(attributeName, new Attribute<>(AttributeType.List, attributes)); }

public void addAttributePrefix(final String attributeName, final String prefix) { filterPolicy.put(attributeName, new Attribute<>(AttributeType.Prefix, prefix)); }

public void addAttributeAnythingBut(final String attributeName, final String value) { filterPolicy.put(attributeName, new Attribute<>(AttributeType.AnythingBut, value)); }

public <T extends Number> void addAttribute(final String attributeName, final String op, final T value) { filterPolicy.put(attributeName, new Attribute<>(AttributeType.Numeric, new NumericValue<>(op, value))); }

public <T extends Number> void addAttributeRange( final String attributeName, final String lowerOp, final T lower, final String upperOp, final T upper) { filterPolicy.put(attributeName, new Attribute<>(AttributeType.Numeric, new NumericValue<>(lowerOp, lower, upperOp, upper))); }

// To apply your policy to a subscription, use the apply() method, providing the client and the // subscription ARN. This method produces a policy string from the contents of the filterPolicy map,

81

Page 87: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドJava コレクションとしてのサブスクリプションフィルタポリシー

// and then applies the policy to the specified subscription. public void apply(final AmazonSNS snsClient, final String subscriptionArn) { final SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest(subscriptionArn, "FilterPolicy", formatFilterPolicy()); snsClient.setSubscriptionAttributes(request); }

private String formatFilterPolicy() { return filterPolicy.entrySet() .stream() .map(entry -> "\"" + entry.getKey() + "\": [" + entry.getValue() + "]") .collect(Collectors.joining(", ", "{", "}")); }

private enum AttributeType { String, Numeric, Prefix, List, AnythingBut }

private class Attribute<T> { final T value; final AttributeType type;

Attribute(final AttributeType type, final T value) { this.value = value; this.type = type; }

public String toString() { switch (type) { case Prefix: return String.format("{\"prefix\":\"%s\"}", value.toString()); case Numeric: return String.format("{\"numeric\":%s}", value.toString()); case List: final List list = (List)value; final ArrayList<T> values = new ArrayList<T>(list); return values .stream() .map(Object::toString) .collect(Collectors.joining(",")); case AnythingBut: return String.format("{\"anything-but\":\"%s\"}", value); default: return String.format("\"%s\"", value); } } }

private class NumericValue<T extends Number> { private final T lower; private final T upper; private final String lowerOp; private final String upperOp;

NumericValue(final String op, final T value) { lower = value; lowerOp = op; upper = null; upperOp = null; }

NumericValue(final String lowerOp, final T lower, final String upperOp, final T upper) { this.lower = lower; this.lowerOp = lowerOp;

82

Page 88: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージと JSON の形式

this.upper = upper; this.upperOp = upperOp; }

public String toString() { final StringBuilder s = new StringBuilder("[") .append('\"') .append(lowerOp) .append("\",") .append(lower); if (upper != null) { s.append(",\"") .append(upperOp). append("\","). append(upper); } s.append("]"); return s.toString(); } }}

次の Java コードの抜粋は、SNSMessageFilterPolicy クラスの例を初期化して使用する方法を示しています。

// Initialize the example filter policy class.final SNSMessageFilterPolicy fp = new SNSMessageFilterPolicy();

// Add a filter policy attribute with a single value.fp.addAttribute("store", "example_corp");fp.addAttribute("event", "order_placed");

// Add a prefix attribute.filterPolicy.addAttributePrefix("customer_interests", "bas");

// Add an anything-but attribute.filterPolicy.addAttributeAnythingBut("customer_interests", "baseball");

// Add a filter policy attribute with a list of values.final ArrayList<String> attributeValues = new ArrayList<>();attributeValues.add("rugby");attributeValues.add("soccer");attributeValues.add("hockey");fp.addAttribute("customer_interests", attributeValues);

// Add a numeric attribute.filterPolicy.addAttribute("price_usd", "=", 0);

// Add a numeric attribute with a range.filterPolicy.addAttributeRange("price_usd", ">", 0, "<=", 100);

// Apply the filter policy attributes to an Amazon SNS subscription.fp.apply(snsClient, subscriptionArn);

Amazon SNS メッセージと JSON の形式Amazon SNS では以下の形式が使用されます。

トピック• HTTP/HTTPS ヘッダー (p. 84)

83

Page 89: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドHTTP/HTTPS ヘッダー

• HTTP/HTTPS 受信登録の確認の JSON 形式 (p. 84)• HTTP/HTTPS 通知の JSON 形式 (p. 86)• HTTP/HTTPS 受信登録の解除の JSON 形式 (p. 87)• SetSubscriptionAttributes 配信ポリシーの JSON 形式 (p. 88)• SetTopicAttributes 配信ポリシーの JSON 形式 (p. 89)

HTTP/HTTPS ヘッダーAmazon SNS が受信登録の確認、通知、または受信登録解除の確認メッセージを HTTP/HTTPS エンドポイントに送信するときは、Amazon SNS 固有の多くのヘッダー値とともに POST メッセージを送信します。これらのヘッダー値を使用すると、JSON メッセージ本文を解析して Type 値を読み取ることなく、メッセージタイプの識別などの操作を行うことができます。

x-amz-sns-message-type

メッセージのタイプ。指定できる値は、SubscriptionConfirmation、Notification、およびUnsubscribeConfirmation です。

x-amz-sns-message-id

共通のユニークな識別子。発行される各メッセージで一意です。再試行間に Amazon SNS が再送信する通知の場合、元のメッセージのメッセージ ID が使用されます。

x-amz-sns-topic-arn

このメッセージの発行先トピックの Amazon リソースネーム (ARN)。x-amz-sns-subscription-arn

このエンドポイントへの受信登録の ARN。

次の HTTP POST ヘッダーは、HTTP エンドポイントへの通知メッセージのヘッダーの例です。

POST / HTTP/1.1x-amz-sns-message-type: Notificationx-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1bx-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopicx-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55Content-Length: 1336Content-Type: text/plain; charset=UTF-8Host: myhost.example.comConnection: Keep-AliveUser-Agent: Amazon Simple Notification Service Agent

HTTP/HTTPS 受信登録の確認の JSON 形式HTTP/HTTPS エンドポイントを受信登録すると、Amazon SNS は HTTP/HTTPS エンドポイントに受信登録の確認メッセージを送信します。このメッセージには、受信登録を確認するためにアクセスする必要がある SubscribeURL 値が含まれています (または、Token 値を ConfirmSubscription で使用できます)。

Note

受信登録が確認されるまで、Amazon SNS はこのエンドポイントに通知を送信しません。

受信登録の確認メッセージは、次の名前と値のペアを持つ JSON ドキュメントを含むメッセージ本文がある POST メッセージです。

84

Page 90: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドHTTP/HTTPS 受信登録の確認の JSON 形式

Message

メッセージについて説明する文字列。受信登録の確認の場合、この文字列は次のようになります。

You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.

MessageId

共通のユニークな識別子。発行される各メッセージで一意です。再試行間に Amazon SNS が再送信するメッセージの場合、元のメッセージのメッセージ ID が使用されます。

Signature

Message、MessageId、Type、Timestamp、および TopicArn 値の Base64 エンコードされた"SHA1withRSA" 署名。

SignatureVersion

使用される Amazon SNS 署名のバージョン。SigningCertURL

メッセージの署名に使用された証明書の URL。SubscribeURL

受信登録を確認するためにアクセスする必要がある URL。または、代わりに Token をConfirmSubscription アクションに使用して受信登録を確認することもできます。

Timestamp

受信登録の確認が送信された日時 (GMT)。Token

受信登録を確認するために ConfirmSubscription アクションで使用する値。または、SubscribeURLにアクセスできます。

TopicArn

このエンドポイントが受信登録しているトピックの Amazon リソースネーム (ARN)。Type

メッセージのタイプ。受信登録の確認の場合、タイプは SubscriptionConfirmation です。

次の HTTP POST メッセージは、HTTP エンドポイントへの SubscriptionConfirmation メッセージの例です。

POST / HTTP/1.1x-amz-sns-message-type: SubscriptionConfirmationx-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1bx-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopicContent-Length: 1336Content-Type: text/plain; charset=UTF-8Host: myhost.example.comConnection: Keep-AliveUser-Agent: Amazon Simple Notification Service Agent

{ "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",

85

Page 91: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドHTTP/HTTPS 通知の JSON 形式

"Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...", "Timestamp" : "2012-04-26T20:45:04.751Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"}

HTTP/HTTPS 通知の JSON 形式Amazon SNS が受信登録している HTTP または HTTPS エンドポイントに通知を送信すると、エンドポイントに送信される POST メッセージには、次の名前と値のペアを持つ JSON ドキュメントを含むメッセージ本文があります。

Message

通知がトピックに発行されたときに指定された Message の値。MessageId

共通のユニークな識別子。発行される各メッセージで一意です。再試行間に Amazon SNS が再送信する通知の場合、元のメッセージのメッセージ ID が使用されます。

Signature

Message、MessageId、Subject (存在する場合)、Type、Timestamp、TopicArn 値の Base64 エンコードされた SHA1withRSA 署名。

SignatureVersion

使用される Amazon SNS 署名のバージョン。SigningCertURL

メッセージの署名に使用された証明書の URL。Subject

通知がトピックに公開されたときに指定された Subject パラメータ。Note

このパラメータはオプションです。Subject が指定されていない場合、この名前と値のペアは、この JSON ドキュメントに表示されません。

Timestamp

通知が公開されたときの日時 (GMT)。TopicArn

このメッセージの発行先トピックの Amazon リソースネーム (ARN)。Type

メッセージのタイプ。通知の場合、タイプは Notification です。UnsubscribeURL

このトピックからエンドポイントの受信登録を解除するために使用できる URL。この URL にアクセスすると、Amazon SNS はエンドポイントの受信登録を解除し、このエンドポイントへの通知の送信を停止します。

86

Page 92: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドHTTP/HTTPS 受信登録の解除の JSON 形式

次の HTTP POST メッセージは、HTTP エンドポイントへの通知メッセージの例です。

POST / HTTP/1.1x-amz-sns-message-type: Notificationx-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopicx-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96Content-Length: 773Content-Type: text/plain; charset=UTF-8Host: myhost.example.comConnection: Keep-AliveUser-Agent: Amazon Simple Notification Service Agent

{ "Type" : "Notification", "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "My First Message", "Message" : "Hello world!", "Timestamp" : "2012-05-02T00:54:06.655Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEw6JRN...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"}

HTTP/HTTPS 受信登録の解除の JSON 形式HTTP/HTTPS エンドポイントの受信登録がトピックから解除されると、Amazon SNS はエンドポイントに登録解除の確認メッセージを送信します。

受信登録解除の確認メッセージは、次の名前と値のペアを持つ JSON ドキュメントを含むメッセージ本文がある POST メッセージです。

Message

メッセージについて説明する文字列。受信登録解除の確認の場合、この文字列は次のようになります。

You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.

MessageId

共通のユニークな識別子。発行される各メッセージで一意です。再試行間に Amazon SNS が再送信するメッセージの場合、元のメッセージのメッセージ ID が使用されます。

Signature

Message、MessageId、Type、Timestamp、および TopicArn 値の Base64 エンコードされた"SHA1withRSA" 署名。

SignatureVersion

使用される Amazon SNS 署名のバージョン。

87

Page 93: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドSetSubscriptionAttributes 配信ポリシーの JSON 形式

SigningCertURL

メッセージの署名に使用された証明書の URL。SubscribeURL

受信登録を再確認するためにアクセスする必要がある URL。または、代わりに Token をConfirmSubscription アクションに使用して受信登録を再確認することもできます。

Timestamp

受信登録解除の確認が送信された日時 (GMT)。Token

受信登録を再確認するために ConfirmSubscription アクションで使用できる値。または、SubscribeURL にアクセスできます。

TopicArn

このエンドポイントが受信登録を解除されたトピックの Amazon リソースネーム (ARN)。Type

メッセージのタイプ。受信登録解除の確認の場合、タイプは UnsubscribeConfirmation です。

次の HTTP POST メッセージは、HTTP エンドポイントへの UnsubscribeConfirmation メッセージの例です。

POST / HTTP/1.1x-amz-sns-message-type: UnsubscribeConfirmationx-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7dx-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopicx-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55Content-Length: 1399Content-Type: text/plain; charset=UTF-8Host: myhost.example.comConnection: Keep-AliveUser-Agent: Amazon Simple Notification Service Agent

{ "Type" : "UnsubscribeConfirmation", "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...", "Timestamp" : "2012-04-26T20:06:41.581Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEHXgJm...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }

SetSubscriptionAttributes 配信ポリシーの JSON 形式SetSubscriptionAttributes アクションにリクエストを送信し、AttributeName パラメータをDeliveryPolicy の値に設定する場合、AttributeValue パラメータの値は有効な JSON のオブジェクトである必要があります。たとえば、次の例では、配信ポリシーを合計 5 回の再試行に設定します。

88

Page 94: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドSetTopicAttributes 配信ポリシーの JSON 形式

http://sns.us-east-2.amazonaws.com/?Action=SetSubscriptionAttributes&SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca&AttributeName=DeliveryPolicy&AttributeValue={"healthyRetryPolicy":{"numRetries":5}}...

AttributeValue パラメータの値には、次の JSON 形式を使用します。

{ "healthyRetryPolicy" : { "minDelayTarget" : int, "maxDelayTarget" : int, "numRetries" : int, "numMaxDelayRetries" : int, "backoffFunction" : "linear|arithmetic|geometric|exponential" }, "throttlePolicy" : { "maxReceivesPerSecond" : int }}

SetSubscriptionAttribute アクションの詳細については、『Amazon Simple Notification Service APIReference』の「SetSubscriptionAttributes」を参照してください。

SetTopicAttributes 配信ポリシーの JSON 形式SetTopicAttributes アクションにリクエストを送信し、AttributeName パラメータの値をDeliveryPolicy に設定する場合、AttributeValue パラメータの値は有効な JSON のオブジェクトである必要があります。たとえば、次の例では、配信ポリシーを合計 5 回の再試行に設定します。

http://sns.us-east-2.amazonaws.com/?Action=SetTopicAttributes&TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic&AttributeName=DeliveryPolicy&AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}}...

AttributeValue パラメータの値には、次の JSON 形式を使用します。

{ "http" : { "defaultHealthyRetryPolicy" : { "minDelayTarget": int, "maxDelayTarget": int, "numRetries": int, "numMaxDelayRetries": int, "backoffFunction": "linear|arithmetic|geometric|exponential" }, "disableSubscriptionOverrides" : Boolean, "defaultThrottlePolicy" : { "maxReceivesPerSecond" : int } }}

SetTopicAttribute アクションの詳細については、Amazon Simple Notification Service API Referenceの「SetTopicAttributes」を参照してください。

89

Page 95: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドラージペイロードメッセージと Raw メッセージの配信

Amazon SNS ラージペイロードと raw メッセージの配信

Amazon SNS と Amazon SQS を使用すると、大きなペイロード (64〜256 キロバイトのサイズ) を送受信できます。

Note

大きなペイロードを送信するには、署名バージョン 4 をサポートする AWS SDK を使用する必要があります。

Amazon SQS および HTTP/S エンドポイントによるメッセージの JSON フォーマット処理を回避するために、Amazon SNS は raw メッセージの配信も許可します。

• Amazon SQS エンドポイントに対して raw メッセージの配信を有効にすると、発行されたメッセージからすべての Amazon SNS メタデータが削除され、メッセージはそのまま送信されます。

• HTTP/S エンドポイントに対して raw メッセージの配信を有効にすると、値が true に設定されたHTTP ヘッダー x-amz-sns-rawdelivery がメッセージに追加されます。これは、メッセージがJSON フォーマットなしで発行されたことを示します。

AWS SDK を使用した raw メッセージの配信を有効にするには、SetSubscriptionAttribute API アクションを使用し、RawMessageDelivery 属性の値を true に設定する必要があります。

AWS マネジメントコンソール を使用して raw メッセージ配信を有効にする1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. [トピック] ページで、Amazon SQS または HTTP/S エンドポイントをサブスクライブするトピックを

選択します。4. [MyTopic] ページの [サブスクリプション] セクションでサブスクリプションを選択したら、[編集] を

選択します。5. [Edit EXAMPLE1-23bc-4567-d890-ef12g3hij456 (例1-23bc-4567-d890-ef12g3hij456 の編集)]

ページの [Details (詳細)] セクションで、[Enable raw message delivery (raw メッセージ配信の有効化)]を選択します。

6. [Save changes] を選択します。

Amazon SNS タグAmazon SNS リソースを整理および識別するには (コスト配分やタグ付けされたトピックの整理と検索のため)、トピックの目的、所有者または環境を識別するメタデータタグを追加することができます。これは、多くのトピックがある場合に特に便利です。AWS マネジメントコンソール あるいは AWS SDK forJava (および TagResource、UntagResource、ListTagsForResource API アクション) を使用してAmazon SNS トピックを管理する詳細については、「Amazon SNS トピックのタグの一覧表示、追加、および削除 (p. 16)」チュートリアルを参照してください。

Note

現在、タグベースのアクセスコントロールは使用できません。

90

Page 96: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドタグ

コスト配分タグを使用して AWS の請求書を整理し、自分のコスト構造を反映できます。そのためには、サインアップして AWS アカウントの請求書にタグキーおよび値を含めます。詳細については、AWSBilling and Cost Management ユーザーガイドの「月別コスト配分レポートの設定」を参照してください。

各タグは、ユーザー定義の 1 つのキーと 1 つの値で構成されます。たとえば、次のようなタグをトピックに付けると、本番稼働用とテスト用のトピックを簡単に識別できます。

トピック キー 値

MyTopicA TopicType Production

MyTopicB TopicType Testing

Note

タグを使用する場合は、以下のガイドラインに留意してください。

• We don't recommend adding more than 50 tags to a topic.• タグに意味論的意味はありません。Amazon SNS は、タグを文字列として解釈します。• タグの大文字と小文字は区別されます。• 新しいタグのキーが既存のタグのキーと同じである場合、既存のタグは上書きされます。• Tagging actions are limited to 10 TPS per AWS account, per AWS region. If your application

requires a higher throughput, submit a request.

91

Page 97: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド受信者として AWS Lambda 関数を使用する場合

システム間メッセージングでのAmazon SNS の使用

このセクションでは、Lambda 関数、Amazon SQS キュー、HTTP/S エンドポイント、AWS Event ForkPipelines などの受信者とのシステム間メッセージングに Amazon SNS を使用する方法について説明します。

トピック• 受信者が AWS Lambda 関数の場合のシステム間メッセージングに Amazon SNS を使用する (p. 92)• 受信者が Amazon SQS キューの場合のシステム間メッセージングに Amazon SNS を使用す

る (p. 93)• 受信者が HTTP/S エンドポイントの場合のシステム間メッセージングに Amazon SNS を使用す

る (p. 106)• AWS Event Fork Pipelines を受信者とするシステム間メッセージングで Amazon SNS を使用す

る (p. 118)

受信者が AWS Lambda 関数の場合のシステム間メッセージングに Amazon SNS を使用する

Amazon SNS と AWS Lambda は統合されているため、Amazon SNS 通知を使用して Lambda 関数を呼び出すことができます。Lambda 関数がサブスクライブしている SNS トピックにメッセージが発行されると、発行されたメッセージのペイロードで Lambda 関数が呼び出されます。Lambda 関数は、メッセージペイロードを入力パラメータとして受け取り、メッセージの情報の操作、他の SNS トピックへのメッセージの発行、または他の AWS サービスへのメッセージの送信を行うことができます。

さらに、Amazon SNS は、Lambda エンドポイントに送信されたメッセージ通知のメッセージ配信ステータス属性もサポートします。詳細については、「Amazon SNS メッセージ配信ステータス (p. 58)」を参照してください。

前提条件Amazon SNS 通知を使用して Lambda 関数を呼び出すには、以下が必要になります。

• Lambda 関数• Amazon SNS トピック

Lambda 関数の作成の詳細については、「AWS Lambda の使用開始」を参照してください。Amazon SNSトピックの作成については、「トピックの作成」を参照してください。

AWS マネジメントコンソール を使用して Lambda エンドポイントで Amazon SNS を設定する1. Amazon SNS コンソールにサインインします。

92

Page 98: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド受信者として Amazon SQS キューを使用する場合

2. ナビゲーションパネルで、[トピック] を選択します。3. [Topics (トピック)] ページでトピックを選択します。4. [Subscriptions (サブスクリプション)] セクションで、[Create subscription (サブスクリプションの作

成)] を選択します。5. [Create subscription (サブスクリプションの作成)] ページで [Details (詳細)] セクションで、以下を実行

します。

a. 選択した [Topic ARN (トピック ARN)] を確認します。b. [プロトコル] で AWS Lambda を選択します。c. [Endpoint (エンドポイント)] に関数の ARN を入力します。d. [Create subscription] を選択します。

Lambda 関数がサブスクライブしている SNS トピックにメッセージが発行されると、発行されたメッセージのペイロードで Lambda 関数が呼び出されます。Amazon SNS、Lambda、および AmazonDynamoDB を使用してサンプルメッセージ履歴ストアを作成する方法については、AWS モバイル開発ブログ「Amazon SNS を介して AWS Lambda 機能を呼び出す」を参照してください。

受信者が Amazon SQS キューの場合のシステム間メッセージングに Amazon SNS を使用する

Amazon SNS は、Amazon Simple Queue Service (Amazon SQS) と密接に連動します。どちらのサービスも開発者にさまざまなメリットを提供します。Amazon SNS を利用すれば、アプリケーションは「プッシュ」メカニズムを使用して、複数の受信者にタイミングが重要なメッセージを送信することができます。そのため更新を定期的に確認または「ポーリング」する必要性がなくなります。Amazon SQS は、ポーリングモデルを通してメッセージを交換するために分散型アプリケーションによって使用されるメッセージキューサービスであり、このサービスを使用すると、送信および受信コンポーネントを、各コンポーネントを同時に使用できない場合でも、切り離すことができます。—Amazon SNS と Amazon SQSを組み合わせて使用することで、イベントの即時通知を必要とするアプリケーションにメッセージを配信できるだけでなく、他のアプリケーションのメッセージは、後で処理できるように Amazon SQS キューに保持することもできます。

Amazon SQS キューを Amazon SNS トピックにサブスクライブすると、そのトピックにメッセージを発行することができ、Amazon SNS が Amazon SQS メッセージをサブスクライブされたキューに送信します。Amazon SQS メッセージには、トピックに発行されたが件名とメッセージに加え、JSON ドキュメントのメッセージに関するメタデータが含まれます。Amazon SQS メッセージは、以下の JSON ドキュメントと同様になります。

{ "Type" : "Notification", "MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "Testing publish to subscribed queues", "Message" : "Hello world!", "Timestamp" : "2012-03-29T05:12:16.901Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEnTrFPa3...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-ab0e-4ec2-88e0-db410a0f2bee"}

93

Page 99: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 1: キューとトピックの ARN を取得する

Important

現在、Amazon SNS は Amazon SQS FIFO キューと互換性がありません。以下の手順に従う代わりに、Amazon SQS コンソールを使用して Amazon SQS キューをAmazon SNS トピックにサブスクライブすることにより、プロセスを簡素化できます。詳細については、「Amazon SNS トピックへのキューのサブスクライブ」を参照してください。

Amazon SNS トピックから Amazon SQS キューにメッセージを送信できるようにするには、以下の手順を実行します。

1. メッセージの送信先にするキューとキューをサブスクライブするトピックの Amazon ResourceName(ARN)を取得します。 (p. 94)

2. Amazon SNS トピックに sqs:SendMessage 許可を付与し、キューにメッセージを送信できるようにします。 (p. 95)

3. キューを Amazon SNS トピックにサブスクライブします。 (p. 95)4. IAM ユーザーまたは AWS アカウントに、Amazon SNS トピックに発行し、Amazon SQS キューから

のメッセージを読むために適切な許可を与えます。 (p. 96)5. トピックにメッセージを発行し、キューからのメッセージを読むことでテストします。 (p. 98)

別の AWS アカウントにあるキューにメッセージを送信するようにトピックをセットアップする方法については、「別のアカウントの Amazon SQS キューに対する Amazon SNS メッセージの送信 (p. 99)」を参照してください。

2 つのキューにメッセージを送信するトピックを作成する AWS CloudFormation テンプレートについては、「AWS CloudFormation テンプレートを使用して Amazon SQS キューにメッセージを送信するトピックを作成する (p. 101)」を参照してください。

ステップ 1: キューとトピックの ARN を取得するトピックにキューをサブスクライブするときは、キューの ARN のコピーが必要です。同様に、トピックがキューにメッセージを送ることを許可するには、トピックの ARN のコピーが必要です。

キューの ARN を取得するには、Amazon SQS コンソールまたは GetQueueAttributes API アクションを使用できます。

キューの ARN を Amazon SQS コンソールから取得するには

1. AWS マネジメントコンソールにサインインし、Amazon SQS コンソール (https://console.aws.amazon.com/sqs/) を開きます。

2. ARN を取得するキューのチェックボックスをオンにします。3. [Details] タブから、Amazon SNS トピックへのサブスクライブに使用できるように ARN 値をコピー

します。

トピックの ARN を取得するには、Amazon SNS コンソール、sns-get-topic-attributes コマンド、または GetQueueAttributes API アクションを使用できます。

トピックの ARN を Amazon SNS コンソールから取得するには

1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、ARN を取得するトピックを選択します。3. [トピックの詳細] セクションで、Amazon SNS トピックがキューにメッセージを送信することを許可

するために使用できるように、[トピック ARN] の値をコピーします。

94

Page 100: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 2: Amazon SQS キューにメッセージを送信するアクセス許可を Amazon SNS トピックに付与する

ステップ 2: Amazon SQS キューにメッセージを送信するアクセス許可を Amazon SNS トピックに付与するAmazon SNS トピックがキューにメッセージを送信できるようにするには、Amazon SNS トピックにsqs:SendMessage アクションの実行を許可するようにキューのポリシーを設定する必要があります。

トピックにキューをサブスクライブする前に、トピックとキューが必要です。トピックやキューをまだ作成していない場合は、ここで作成します。詳細については、「トピックの作成」および Amazon SimpleQueue Service 開発者ガイド の「キューの作成」を参照してください。

キューにポリシーを設定するには、Amazon SQS コンソールまたは SetQueueAttributes API アクションを使用できます。開始する前に、キューにメッセージを送信できるようにするトピックの ARN があることを確認してください。

Amazon SQS コンソールを使用してキューに SendMessage ポリシーを設定するには

1. AWS マネジメントコンソールにサインインし、Amazon SQS コンソール (https://console.aws.amazon.com/sqs/) を開きます。

2. ポリシーを設定するキューのチェックボックスをオンにし、[Permissions (アクセス許可)] タブを選択してから、[アクセス許可の追加] を選択します。

3. [アクセス許可の追加] ダイアログボックスで、[効果] には [許可]、[プリンシパル] には [全員 (*)] を選択し、[アクション] ドロップダウンから [SendMessage] を選択します。

4. トピックにアクションを許可する条件を追加します。[条件の追加 (オプション)] を選択し、[条件] では[ArnEquals]、[キー] では [aws:SourceArn] を選択して、[値] にトピックの ARN を貼り付けます。[条件の追加] を選択します。新しい条件は、ボックスの最下部に表示されます (必要に応じて下方にスクロールして確認します)。

5. [Add Permission] を選択します。

独自のポリシードキュメントを作成する場合は、次のようなポリシーを作成します。このポリシーは、マイトピック がマイキューにメッセージを送ることを許可します。

{ "Statement": [{ "Effect":"Allow", "Principal":"*", "Action":"sqs:SendMessage", "Resource":"arn:aws:sqs:us-east-2:123456789012:MyQueue", "Condition":{ "ArnEquals":{ "aws:SourceArn":"arn:aws:sns:us-east-2:123456789012:MyTopic" } } }]}

ステップ 3: キューを Amazon SNS トピックにサブスクライブするトピックを介してキューにメッセージを送信するには、キューを Amazon SNS トピックにサブスクライブする必要があります。キューは ARN で指定します。トピックにサブスクライブするには、Amazon SNS

95

Page 101: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 4: 適切なトピックおよびキューアクショ

ンに対するアクセス許可をユーザーに付与する

コンソール、sns-subscribe CLI コマンド、または Subscribe API アクションを使用できます。開始する前に、サブスクライブするキューの ARN があることを確認してください。

1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. [Topics (トピック)] ページでトピックを選択します。4. [MyTopic (ママママママ)] ページの [Subscriptions (サブスクリプション)] ページで、[Create subscription

(サブスクリプションの作成)] を選択します。5. [Create subscription (サブスクリプションの作成)] ページで [Details (詳細)] セクションで、以下を実行

します。

a. [Topic ARN (トピックの ARN)] を確認します。b. [プロトコル] で [Amazon SQS] を選択します。c. [Endpoint (エンドポイント)] に Amazon SQS キューの ARN を入力します。d. [Create Subscription (サブスクリプションの作成)] を選択します。

サブスクリプションが確認されると、新しいサブスクリプションの [Subscription ID] にサブスクリプション ID が表示されます。キューの所有者がサブスクリプションを作成する場合、サブスクリプションは自動的に確認され、瞬時にアクティブになります。

通常は、自分のアカウントの自分のトピックに自分のキューをサブスクライブします。ただし、別のアカウントのキューを自分のトピックにサブスクライブすることもできます。サブスクリプションを作成するユーザーがキューの所有者ではない場合 (たとえば、アカウント A のユーザーがアカウント A のトピックにアカウント B のキューをサブスクライブする場合)、サブスクリプションの確認が必用です。別のアカウントのキューをサブスクライブし、サブスクリプションを確認する方法の詳細については、「別のアカウントの Amazon SQS キューに対する Amazon SNS メッセージの送信 (p. 99)」を参照してください。

ステップ 4: 適切なトピックおよびキューアクションに対するアクセス許可をユーザーに付与する適切なユーザーのみに Amazon SNS トピックへのメッセージの発行および Amazon SQS キューからのメッセージの読み取り/削除を許可するには、AWS Identity and Access Management (IAM) を使用する必要があります。IAM ユーザーのトピックとキューのアクションをコントロールする方法の詳細については、「Amazon SNS でのアイデンティティベースのポリシーの使用 (p. 210)」、および Amazon SimpleQueue Service 開発者ガイド の「AWS アカウントへのユーザーアクセスのコントロール」を参照してください。

トピックまたはキューへのアクセスは、次の 2 つの方法で制御します。

• IAM ユーザーまたはグループにポリシーを追加する (p. 97)。ユーザーにトピックやキューへのアクセス許可を付与する最も簡単な方法として、グループを作成し、そのグループに適切なポリシーとユーザーを追加することができます。個々のユーザーに設定するポリシーを継続的に追跡するよりも、グループに対してユーザーを追加または削除する方がはるかに簡単です。

• トピックまたはキューにポリシーを追加する (p. 97)。別の AWS アカウントにトピックやキューへのアクセス許可を付与する必用がある場合、そのプリンシパルとして、アクセス許可を付与する AWS アカウントを持っているポリシーを追加することが唯一の方法です。

ほとんどの場合は、最初の方法 (ポリシーをグループに適用し、適切なユーザーをグループに追加または削除することでアクセス許可を管理する) を使用します。別のアカウントのユーザーにアクセス許可を付与する場合は、2 番目の方法を使用する必要があります。

96

Page 102: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 4: 適切なトピックおよびキューアクショ

ンに対するアクセス許可をユーザーに付与する

IAM ユーザーまたはグループへのポリシーの追加IAM ユーザーまたはグループに次のポリシーを追加した場合、そのユーザーまたはそのグループのメンバーに、「マイトピック」トピックで sns:Publish アクションを実行する許可が付与されます。

{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" }]}

IAM ユーザーまたはグループに次のポリシーを追加した場合、ユーザーまたはそのグループのメンバーに、キュー「マイキュー 1」と「マイキュー 2」に対して sqs:ReceiveMessage およびsqs:DeleteMessage アクションを実行する許可が付与されます。

{ "Statement":[{ "Effect":"Allow", "Action":[ "sqs:ReceiveMessage", "sqs:DeleteMessage" ], "Resource":[ "arn:aws:sns:us-east-2:123456789012:MyQueue1", "arn:aws:sns:us-east-2:123456789012:MyQueue2" ] }]}

トピックまたはキューへのポリシーの追加以下のサンプルポリシーは、トピックとキューに別のアカウントのアクセス許可を付与する方法を示しています。

Note

別の AWS アカウントにアカウントのリソースへのアクセス許可を付与する場合、管理レベルのアクセス (ワイルドカードアクセス) の権限を持っている IAM ユーザーにも、そのリソースへのアクセス許可が付与されます。他の IAM アカウントの他のすべてのユーザーは、自動的にリソースへのアクセスが拒否されます。その AWS アカウントの特定の IAM ユーザーにリソースへのアクセス許可を付与する場合、管理レベルアクセスの権限を持っているアカウントまたは IAM ユーザーは、そのリソースのアクセス許可をそれらの IAM ユーザーに委任する必要があります。クロスアカウントの委任の詳細については、『IAM の使用ガイド』の「クロスアカウントアクセスの有効化」を参照してください。

アカウント 123456789012 の MyTopic トピックに次のポリシーを追加した場合、そのトピックでsns:Publish アクションを実行するアクセス許可をアカウント 111122223333 に付与したことになります。

{ "Statement":[{ "Effect":"Allow", "Principal":{ "AWS":"111122223333" }, "Action":"sns:Publish", "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"

97

Page 103: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 5: トピックのキューサブスクリプションをテストする

}]}

アカウント 123456789012 のキュー MyQueue に次のポリシーを追加した場合、そのキューでsqs:ReceiveMessage および sqs:DeleteMessage アクションを実行する許可をアカウント111122223333 に付与したことになります。

{ "Statement":[{ "Effect":"Allow", "Principal":{ "AWS":"111122223333" }, "Action":[ "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource":[ "arn:aws:sns:us-east-2:123456789012:MyQueue" ] }]}

ステップ 5: トピックのキューサブスクリプションをテストするトピックのキューサブスクリプションは、トピックに発行し、トピックがキューに送信したメッセージを表示することでテストできます。

Amazon SNS コンソールを使用してトピックに発行するには

1. トピックに発行するアクセス許可を持っている AWS アカウントまたは IAM ユーザーの認証情報を使用して、AWS マネジメントコンソール にサインインし、Amazon SNS コンソール (https://console.aws.amazon.com/sns/) を開きます。

2. ナビゲーションパネルで、トピックを選択し、[トピックに発行] を選択します。3. [件名] ボックスに件名 (「Testing publish to queue」など) を入力し、[メッセージ] ボックスに

任意のテキスト (「Hello world!」など) を入力して、[メッセージの発行] を選択します。「Yourmessage has been successfully published.」というメッセージが表示されます。

Amazon SQS コンソールを使用してトピックからのメッセージを表示するには

1. キュー内のメッセージを表示するアクセス許可を持っている AWS アカウントまたは IAM ユーザーの認証情報を使用して、AWS マネジメントコンソール にサインインし、Amazon SQS コンソール(https://console.aws.amazon.com/sqs/) を開きます。

2. トピックにサブスクライブしているキューのチェックボックスをオンにします。3. [キュー操作] ドロップダウンリストから、[メッセージの表示/削除] を選択して、[メッセージのポーリ

ングを開始] を選択します。タイプが [Notification] のメッセージが表示されます。4. [本文] 列で、[詳細] を選択します。[メッセージ詳細] ボックスに、トピックに発行した件名とメッセー

ジを含む JSON ドキュメントが表示されます。メッセージは、以下の JSON ドキュメントのように見えます。

{ "Type" : "Notification", "MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",

98

Page 104: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド別のアカウントのキューへのメッセージの送信

"Subject" : "Testing publish to subscribed queues", "Message" : "Hello world!", "Timestamp" : "2012-03-29T05:12:16.901Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEnTrFPa3...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-ab0e-4ec2-88e0-db410a0f2bee"}

5. [閉じる] を選択します。キューに通知メッセージを送信するトピックへの発行は、正常に終了しました。

別のアカウントの Amazon SQS キューに対するAmazon SNS メッセージの送信別のアカウントの Amazon SQS キューに 1 つ以上のサブスクリプションがある Amazon SNS トピックに通知を発行できます。同じアカウント内にある場合と同じ方法でトピックとキューをセットアップします(「受信者として Amazon SQS キューを使用する場合 (p. 93)」を参照)。唯一の相違点はサブスクリプションの確認の処理方法で、トピックへのキューのサブスクライブ方法によって異なります。

トピック• キューの所有者がサブスクリプションを作成する (p. 99)• キュー作成サブスクリプションを所有していないユーザー (p. 100)

キューの所有者がサブスクリプションを作成するキューの所有者がサブスクリプションを作成するとき、サブスクリプションを確認する必要はありません。Subscribe アクションが完了するとすぐに、キューはトピックからの通知の受信を開始します。キュー所有者がトピック所有者のトピックにサブスクライブできるようにするには、トピック所有者が、トピックに対して Subscribe アクションを呼び出す許可をキュー所有者のアカウントに付与する必要があります。

ステップ 1: AWS マネジメントコンソール を使用してトピックポリシーを設定するには

1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択します。3. トピックを選択し、[編集] を選択します。4. [Edit MyTopic (MyTopic の編集)] ページで、[アクセスポリシー] セクションを展開します。5. 以下のポリシーを入力します。

{ "Statement":[{ "Effect":"Allow", "Principal":{ "AWS":"111122223333" }, "Action":"sns:Subscribe", "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic" }]}

99

Page 105: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド別のアカウントのキューへのメッセージの送信

このポリシーは、123456789012 アカウント内で MyTopic に sns:Subscribe を呼び出す許可を111122223333 アカウントに付与します。

6. [Save changes (変更の保存)] を選択します。

111122223333 アカウントに対する認証情報があるユーザーは、MyTopic に登録できます。

ステップ 2: AWS マネジメントコンソール を使用して別の AWS アカウントのトピックに Amazon SQS キューのサブスクリプションを追加するには

開始する前に、トピックおよびキューの ARN を保持していて、キューにメッセージを送信する許可がトピックに付与されている (p. 95)ことを確認してください。

1. ナビゲーションパネルで、[サブスクリプション] を選択します。2. [サブスクリプション] ページで [サブスクリプションの作成] を選択する3. [Create subscription (サブスクリプションの作成)] ページで [Details (詳細)] セクションで、以下を実行

します。

a. [トピック ARN] にトピックの ARN を入力します。b. [プロトコル] で [Amazon SQS] を選択します。c. [エンドポイント] にキューの ARN を入力します。d. [Create subscription] を選択します。

Note

• サービスと通信できるようにするには、キューに Amazon SNS へのアクセス許可が必要です。

• キューの所有者であるため、サブスクリプションを確認する必要はありません。

キュー作成サブスクリプションを所有していないユーザーサブスクリプションを作成するユーザーがキューの所有者ではない場合、このサブスクリプションを確認する必要があります。

Subscribe アクションを使用すると、Amazon SNS はサブスクリプションの確認をキューに送信します。サブスクリプション ID が [Pending Confirmation (確認保留中)] に設定されたサブスクリプションがAmazon SNS コンソールに表示されます。

サブスクリプションを確認するには、キューからメッセージを読み取る権限を持つユーザーがサブスクリプション URL にアクセスする必要があります。サブスクリプションが確認されるまで、トピックに対して発行された通知はキューに送信されません。サブスクリプションを確認するには、Amazon SQS コンソールまたは ReceiveMessage アクションを使用できます。

Note

トピックにエンドポイントをサブスクライブする前に、キューに sqs:SendMessage アクセス許可を設定してこのキューがトピックからメッセージを受信できるようにする必要があります。詳細については、「キューにメッセージを送信するアクセス許可をトピックに付与する (p. 95)」を参照してください。

AWS マネジメントコンソール コンソールを使用してサブスクリプションを確認するには

1. Amazon SQS コンソールにサインインします。2. トピックへのサブスクリプションが保留になっているキューを選択します。

100

Page 106: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS CloudFormation テンプレートを使用して AmazonSQS キューにメッセージを送信するトピックを作成する

3. 「Queue Actions (キュー操作)」、「View/Delete Messages (メッセージの表示/削除)」の順に選択し、「Start Polling for Messages (メッセージのポーリングの開始)」を選択します。

サブスクリプションの確認を含むメッセージがキューで受信されます。4. [Body (本文)] 列で、次の操作を行います。

a. 「More Details (詳細)」を選択します。b. [Message Details (メッセージの詳細)] ダイアログボックスで、[SubscribeURL] の値を見つけてメ

モします。たとえば、

https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...

5. ウェブブラウザで、URL に移動します。

XML 応答が表示されます。たとえば、

<ConfirmSubscriptionResponse> <ConfirmSubscriptionResult> <SubscriptionArn>arn:aws:sns:us-east-2:123456789012:MyTopic:1234a567-bc89-012d-3e45-6fg7h890123i</SubscriptionArn> </ConfirmSubscriptionResult> <ResponseMetadata> <RequestId>abcd1efg-23hi-jkl4-m5no-p67q8rstuvw9</RequestId> </ResponseMetadata></ConfirmSubscriptionResponse>

サブスクライブしたキューは、トピックからメッセージを受信する準備ができています。6. (オプション) Amazon SNS コンソールでトピックサブスクリプションを表示すると、[Subscription ID

(サブスクリプション ID)] 列の [Pending Confirmation (確認保留中)] メッセージがサブスクリプションARN に置き換えられていることがわかります。

AWS CloudFormation テンプレートを使用してAmazon SQS キューにメッセージを送信するトピックを作成するAWS CloudFormation では、テンプレートファイルを使用して、AWS リソースの集合を単一のユニットとして作成/制御することができます。このセクションでは、キューに発行するトピックのデプロイを容易にするサンプルテンプレートを使用します。このテンプレートは、2 つのキューの作成、キューにサブスクリプションを持つトピックの作成、トピックがキューにメッセージを送信できるようにするポリシーのキューへの追加、これらのリソースへのアクセスを制御する IAM ユーザーとグループの作成を行って、セットアップ手順を代行します。

AWS CloudFormation テンプレートを使用して AWS リソースをデプロイする方法の詳細は、『AWSCloudFormation ユーザーガイド』の「使用開始」を参照してください。

AWS CloudFormation テンプレートを使用して AWS アカウント内のトピックとキューをセットアップするこのサンプルテンプレートでは、1 つは IAM グループのメンバーがトピックに発行するため、もう 1 つはキューからのメッセージを読み取るために、それぞれ適切なアクセス許可を付与された 2 つの AmazonSQS キューにメッセージを送信できる Amazon SNS トピックを作成します。このテンプレートは、各グループに追加される IAM ユーザーも作成します。

101

Page 107: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS CloudFormation テンプレートを使用して AmazonSQS キューにメッセージを送信するトピックを作成する

このテンプレート (https://s3.amazonaws.com//cloudformation-templates-us-east-1/SNSToSQS.template)は、AWS CloudFormation のサンプルテンプレートページからダウンロードできます。

MySNSTopic は 2 つのサブスクライブされたエンドポイント(マイキュー 1 とマイキュー 2 という 2 つのAmazon SQS キュー)に発行するようにセットアップされます。MyPublishTopicGroup は、Publish APIアクションまたは sns-publish コマンドを使用して MySNSTopic に発行することを許可されたメンバーが所属する IAM グループです。テンプレートは、MyPublishUser と MyQueueUser という IAM ユーザーを作成し、ログインプロファイルとアクセスキーを設定します。このテンプレートを使用してスタックを作成するユーザーは、入力パラメータとしてログインプロファイル用のパスワードを指定します。テンプレートは、2 人の IAM ユーザー用に MyPublishUserKey と MyQueueUserKey というアクセスキーを作成します。AddUserToMyPublishTopicGroup は MyPublishTopicGroup に MyPublishUser を追加して、グループに割り当てられたアクセス許可がユーザーに付与されるようにします。

MyRDMessageQueueGroup は IAM グループで、そのメンバーは、ReceiveMessage およびDeleteMessage API アクションを使用して 2 つの Amazon SQS キューからメッセージを読み取り/削除することを許可されます。AddUserToMyQueueGroup は MyQueueUser を MyRDMessageQueueGroup に追加して、グループに割り当てられたアクセス許可がユーザーに付与されるようにします。MyQueuePolicyは、MySNSTopic が 2 つのキューに通知を発行する許可を割り当てます。

{ "AWSTemplateFormatVersion": "2010-09-09",

"Description": "This Template creates an Amazon SNS topic that can send messages to two Amazon SQS queues with appropriate permissions for one IAM user to publish to the topic and another to read messages from the queues. MySNSTopic is set up to publish to two subscribed endpoints, which are two Amazon SQS queues (MyQueue1 and MyQueue2). MyPublishUser is an IAM user that can publish to MySNSTopic using the Publish API. MyTopicPolicy assigns that permission to MyPublishUser. MyQueueUser is an IAM user that can read messages from the two Amazon SQS queues. MyQueuePolicy assigns those permissions to MyQueueUser. It also assigns permission for MySNSTopic to publish its notifications to the two queues. The template creates access keys for the two IAM users with MyPublishUserKey and MyQueueUserKey. You will be billed for the AWS resources used if you create a stack from this template.",

"Parameters": { "MyPublishUserPassword": { "NoEcho": "true", "Type": "String", "Description": "Password for the IAM user MyPublishUser", "MinLength": "1", "MaxLength": "41", "AllowedPattern": "[a-zA-Z0-9]*", "ConstraintDescription": "must contain only alphanumeric characters." }, "MyQueueUserPassword": { "NoEcho": "true", "Type": "String", "Description": "Password for the IAM user MyQueueUser", "MinLength": "1", "MaxLength": "41", "AllowedPattern": "[a-zA-Z0-9]*", "ConstraintDescription": "must contain only alphanumeric characters." } },

"Resources": { "MySNSTopic": { "Type": "AWS::SNS::Topic", "Properties": { "Subscription": [{ "Endpoint": { "Fn::GetAtt": ["MyQueue1", "Arn"]

102

Page 108: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS CloudFormation テンプレートを使用して AmazonSQS キューにメッセージを送信するトピックを作成する

}, "Protocol": "sqs" }, { "Endpoint": { "Fn::GetAtt": ["MyQueue2", "Arn"] }, "Protocol": "sqs" } ] } }, "MyQueue1": { "Type": "AWS::SQS::Queue" }, "MyQueue2": { "Type": "AWS::SQS::Queue" }, "MyPublishUser": { "Type": "AWS::IAM::User", "Properties": { "LoginProfile": { "Password": { "Ref": "MyPublishUserPassword" } } } }, "MyPublishUserKey": { "Type": "AWS::IAM::AccessKey", "Properties": { "UserName": { "Ref": "MyPublishUser" } } }, "MyPublishTopicGroup": { "Type": "AWS::IAM::Group", "Properties": { "Policies": [{ "PolicyName": "MyTopicGroupPolicy", "PolicyDocument": { "Statement": [{ "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": { "Ref": "MySNSTopic" } }] } }] } }, "AddUserToMyPublishTopicGroup": { "Type": "AWS::IAM::UserToGroupAddition", "Properties": { "GroupName": { "Ref": "MyPublishTopicGroup" }, "Users": [{ "Ref": "MyPublishUser" }] } },

103

Page 109: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS CloudFormation テンプレートを使用して AmazonSQS キューにメッセージを送信するトピックを作成する

"MyQueueUser": { "Type": "AWS::IAM::User", "Properties": { "LoginProfile": { "Password": { "Ref": "MyQueueUserPassword" } } } }, "MyQueueUserKey": { "Type": "AWS::IAM::AccessKey", "Properties": { "UserName": { "Ref": "MyQueueUser" } } }, "MyRDMessageQueueGroup": { "Type": "AWS::IAM::Group", "Properties": { "Policies": [{ "PolicyName": "MyQueueGroupPolicy", "PolicyDocument": { "Statement": [{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": [{ "Fn::GetAtt": ["MyQueue1", "Arn"] }, { "Fn::GetAtt": ["MyQueue2", "Arn"] } ] }] } }] } }, "AddUserToMyQueueGroup": { "Type": "AWS::IAM::UserToGroupAddition", "Properties": { "GroupName": { "Ref": "MyRDMessageQueueGroup" }, "Users": [{ "Ref": "MyQueueUser" }] } }, "MyQueuePolicy": { "Type": "AWS::SQS::QueuePolicy", "Properties": { "PolicyDocument": { "Statement": [{ "Effect": "Allow", "Principal": "*", "Action": ["sqs:SendMessage"], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": { "Ref": "MySNSTopic"

104

Page 110: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS CloudFormation テンプレートを使用して AmazonSQS キューにメッセージを送信するトピックを作成する

} } } }] }, "Queues": [{ "Ref": "MyQueue1" }, { "Ref": "MyQueue2" }] } } }, "Outputs": { "MySNSTopicTopicARN": { "Value": { "Ref": "MySNSTopic" } }, "MyQueue1Info": { "Value": { "Fn::Join": [ " ", [ "ARN:", { "Fn::GetAtt": ["MyQueue1", "Arn"] }, "URL:", { "Ref": "MyQueue1" } ] ] } }, "MyQueue2Info": { "Value": { "Fn::Join": [ " ", [ "ARN:", { "Fn::GetAtt": ["MyQueue2", "Arn"] }, "URL:", { "Ref": "MyQueue2" } ] ] } }, "MyPublishUserInfo": { "Value": { "Fn::Join": [ " ", [ "ARN:", { "Fn::GetAtt": ["MyPublishUser", "Arn"] }, "Access Key:", { "Ref": "MyPublishUserKey" },

105

Page 111: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド受信者として HTTP/S エンドポイントを使用する場合

"Secret Key:", { "Fn::GetAtt": ["MyPublishUserKey", "SecretAccessKey"] } ] ] } }, "MyQueueUserInfo": { "Value": { "Fn::Join": [ " ", [ "ARN:", { "Fn::GetAtt": ["MyQueueUser", "Arn"] }, "Access Key:", { "Ref": "MyQueueUserKey" }, "Secret Key:", { "Fn::GetAtt": ["MyQueueUserKey", "SecretAccessKey"] } ] ] } } }}

受信者が HTTP/S エンドポイントの場合のシステム間メッセージングに Amazon SNS を使用する

Amazon SNS を使用して、1 つ以上の HTTP または HTTPS エンドポイントに通知メッセージを送信できます。エンドポイントをトピックにサブスクライブすると、トピックに通知を発行することができます。Amazon SNS は HTTP POST リクエストを送信し、通知の内容をサブスクライブしたエンドポイントに配信します。エンドポイントを受信登録する際は、Amazon SNS が POST リクエストをエンドポイントに送信するときに HTTP を使用するか HTTPS を使用するかを選択します。HTTPS を使用する場合は、以下に対して Amazon SNS のサポートを利用できます。

• Server Name Indication(SNI) — これにより、Amazon SNS は複数のドメインをホストするために複数の証明書を必要とするサーバーなど、SNI を必要とする HTTPS エンドポイントをサポートすることができます。SNI の詳細については、「Server Name Indication」を参照してください。

• Basic and Digest Access Authentication — これにより、HTTP POST リクエストで HTTPS URL にユーザー名とパスワードを指定できます (https://user:[email protected]、https://[email protected] など)。HTTPS を使用する場合、ユーザー名とパスワードは確立された SSL 接続で暗号化されます。ドメイン名のみがプレーンテキストで送信されます。Basic and Digest AccessAuthentication の詳細については、RFC-2617 を参照してください。

Note

クライアントサービスは HTTP/1.1 401 Unauthorized ヘッダーレスポンスをサポートできる必要があります。

106

Page 112: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 1: エンドポイントで Amazon SNS メッ

セージを処理する準備が完了していることを確認する

リクエストには、JSON ドキュメントの通知に関するメタデータとともに、トピックに発行された件名とメッセージが含まれます。リクエストは以下の HTTP POST リクエストのようになります。HTTP ヘッダーおよびリクエストボディの JSON 形式の詳細については、「HTTP/HTTPS ヘッダー (p. 84)」および「HTTP/HTTPS 通知の JSON 形式 (p. 86)」を参照してください。

POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: da41e39f-ea4d-435a-b922-c6aae3915ebe x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 761 Content-Type: text/plain; charset=UTF-8 Host: ec2-50-17-44-49.compute-1.amazonaws.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "Notification", "MessageId" : "da41e39f-ea4d-435a-b922-c6aae3915ebe", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "test", "Message" : "test message", "Timestamp" : "2012-04-25T21:49:25.719Z", "SignatureVersion" : "1", "Signature" : "EXAMPLElDMXvB8r9R83tGoNn0ecwd5UjllzsvSvbItzfaMpN2nk5HVSw7XnOn/49IkxDKz8YrlH2qJXj2iZB0Zo2O71c4qQk1fMUDi3LGpij7RCW7AW9vYYsSqIKRnFS94ilu7NFhUzLiieYr4BKHpdTmdD6c0esKEYBpabxDSc=", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"}

Amazon SNS トピックが HTTP または HTTPS エンドポイントにメッセージを送信できるようにするには、以下の手順に従います。

エンドポイントで Amazon SNS メッセージを処理する準備が完了していることを確認する (p. 107)

HTTP/HTTPS エンドポイントを Amazon SNS トピックにサブスクライブする (p. 110)

ステップ 3: サブスクリプションを確認する (p. 111)

ステップ 4: サブスクリプションの配信再試行ポリシーを設定する(オプション) (p. 111)

ステップ 5: トピックに発行するアクセス許可をユーザーに付与する (オプション) (p. 111)

ステップ 6: HTTP/HTTPS エンドポイントにメッセージを送信する (p. 112)

ステップ 1: エンドポイントで Amazon SNS メッセージを処理する準備が完了していることを確認するHTTP または HTTPS エンドポイントをトピックにサブスクライブする前に、Amazon SNS がササブスクライブプションの確認および通知メッセージの送信に使用する HTTP POST のリクエストを処理する能力が HTTP または HTTPS エンドポイントにあることを確認する必要があります。通常、これは AmazonSNS からの HTTP リクエストを処理するウェブアプリケーション (たとえば、エンドポイントが Apacheと Tomcat で Linux を実行している場合は Java servlet) の作成とデプロイを意味します。HTTP エンドポイントをサブスクライブする場合、Amazon SNS はサブスクリプションの確認リクエストを送信します。サブスクリプションを作成するときに、エンドポイントはこのリクエストを受信して処理する準備ができている必要があります。Amazon SNS はこの時点でこのリクエストを送信するためです。Amazon SNS は

107

Page 113: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 1: エンドポイントで Amazon SNS メッ

セージを処理する準備が完了していることを確認する

ユーザーがサブスクリプションを確認するまでエンドポイントに通知を送信しません。Amazon SNS は、サブスクリプションを確認すると、サブスクライブしたトピックで発行アクションが実行されたときにエンドポイントに通知を送信します。

サブスクリプションの確認および通知メッセージを処理するようにエンドポイントを設定するには

1. コードは、Amazon SNS がエンドポイントに送信する HTTP POST リクエストの HTTP ヘッダーを読み取る必要があります。また、コードは Amazon SNS が送信したメッセージのタイプを示すヘッダーフィールド x-amz-sns-message-type を探す必要があります。ヘッダーを確認すると、HTTP リクエストの本文を解析することなく、メッセージタイプを判断できます。処理する必要がある 2 つのタイプ (SubscriptionConfirmation および Notification) があります。UnsubscribeConfirmation メッセージは、サブスクリプションがトピックから削除された場合のみ使用されます。

HTTP ヘッダーの詳細については、「HTTP/HTTPS ヘッダー (p. 84)」を参照してください。以下のHTTP POST のリクエストはサブスクリプションの確認メッセージの例です。

POST / HTTP/1.1 x-amz-sns-message-type: SubscriptionConfirmation x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37f...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...", "Timestamp" : "2012-04-26T20:45:04.751Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEpH+...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"}

2. コードは Amazon SNS メッセージを構成する名前と値のペアを読み取る HTTP POST リクエストの本文で JSON ドキュメントを解析する必要があります。制御文字のエスケープ表現を ASCII 文字値に戻す変換(\n を改行文字に変換するなど)を実行する JSON パーサーを使用します。Jackson JSONプロセッサなどの既存の JSON パーサーを使用するか、または独自のパーサーを記述できます。件名フィールドとメッセージフィールドで有効な JSON としてテキストを送信するためには、AmazonSNS は一部の制御文字を、JSON ドキュメントに含めることができるエスケープ表現に変換する必要があります。エンドポイントに送信される POST リクエストの本文で JSON ドキュメントを受信する場合で、トピックに対して発行された元の件名およびメッセージとまったく同じ表現が必要なときは、エスケープした文字を元の文字値に戻す変換を実行する必要があります。これは、署名では署名する文字列の一部としてメッセージと件名が元の形式で使用されるため、通知の署名を確認する場合に重要です。

3. Amazon SNS によって送信された通知、サブスクリプションの確認、またはサブスクリプション解除の確認メッセージの信頼性を確認する必要があります。エンドポイントは、Amazon SNS メッセージに含まれている情報を使用して署名を再作成し、署名を Amazon SNS がメッセージとともに送信した

108

Page 114: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 1: エンドポイントで Amazon SNS メッ

セージを処理する準備が完了していることを確認する

署名と照合することで、メッセージの内容を確認できるようにします。メッセージの署名の確認の詳細については、「Amazon SNS メッセージの署名の確認 (p. 113)」を参照してください。

4. コードは、ヘッダーフィールド x-amz-sns-message-type で指定したタイプに基づいて、HTTPリクエストの本文に含まれている JSON ドキュメントを読み取り、メッセージを処理する必要があります。メッセージの 2 つの主要なタイプを処理するためのガイドラインを以下に示します。

SubscriptionConfirmation

SubscribeURL の値を読み取り、その URL にアクセスします。サブスクリプションを確認し、エンドポイントで通知の受信を開始するには、(URL に HTTP GET リクエストを送信するなどして) SubscribeURL URL にアクセスする必要があります。SubscribeURL の例については、前の手順の HTTP リクエストの例を参照してください。SubscriptionConfirmation メッセージの形式の詳細については、「HTTP/HTTPS 受信登録の確認の JSON 形式 (p. 84)」を参照してください。URL にアクセスすると、以下の XML ドキュメントのような応答があります。ドキュメントは、ConfirmSubscriptionResult 要素内でエンドポイントのサブスクリプション ARNを返します。

<ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/"> <ConfirmSubscriptionResult> <SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn> </ConfirmSubscriptionResult> <ResponseMetadata> <RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId> </ResponseMetadata></ConfirmSubscriptionResponse>

SubscribeURL にアクセスする代わりに、ConfirmSubscription アクションをSubscriptionConfirmation メッセージの対応する値に設定した Token とともに使って受信登録を確認できます。トピックの所有者とサブスクリプションの所有者がエンドポイントのサブスクリプションを解除できるようにするには、AWS 署名とともに ConfirmSubscription アクションを呼び出します。

通知

Subject および Message の値を読み取り、トピックに発行された通知情報を取得します。

Notification メッセージの形式の詳細については、「HTTP/HTTPS ヘッダー (p. 84)」を参照してください。以下の HTTP POST リクエストは、エンドポイント example.com に送信される通知メッセージの例です。

POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324 x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96 Content-Length: 773 Content-Type: text/plain; charset=UTF-8 Host: example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "Notification", "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "My First Message", "Message" : "Hello world!", "Timestamp" : "2012-05-02T00:54:06.655Z", "SignatureVersion" : "1",

109

Page 115: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 2: HTTP/HTTPS エンドポイントをAmazon SNS トピックにサブスクライブする

"Signature" : "EXAMPLEw6JRN...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"}

5. エンドポイントが Amazon SNS からの HTTP POST メッセージに適切なステータスコードで応答することを確認します。接続は 15 秒でタイムアウトします。エンドポイントが、接続がタイムアウトする前に応答しないか、200 ~ 4xx の範囲外のステータスコードを返す場合、Amazon SNS はメッセージの配信を失敗とみなします。–

6. コードが Amazon SNS からのメッセージ配信の再試行を処理できることを確認します。Amazon SNSは、エンドポイントから正常な応答を受け取らない場合、そのメッセージの配信をもう一度試みます。これはサブスクリプションの確認メッセージを含むすべてのメッセージに適用されます。デフォルトでは、メッセージの最初の配信が失敗した場合、Amazon SNS は試行の失敗の間隔として 20 秒に設定された遅延時間で、最大 3 回再試行を試みます。

Note

メッセージのリクエストは 15 秒後にタイムアウトします。つまり、メッセージ配信の失敗がタイムアウトによって起きた場合、Amazon SNS は前回の配信の試行から約 35 秒後に再試行します。エンドポイントに別の配信ポリシーを設定できます。

つまり、Amazon SNS は、配信ヘッダーフィールド x-amz-sns-message-id の後でのみ再試行を開始します。受信メッセージとともに処理したメッセージ ID を比較することで、メッセージが再試行であるかどうかを判断することができます。

7. HTTPS エンドポイントをサブスクライブする場合、エンドポイントに、信頼された認証機関 (CA) からのサーバー証明書があることを確認します。Amazon SNS は、信頼された CA によって署名されたサーバー証明書がある HTTPS エンドポイントにのみメッセージを送信します。Amazon SNS

8. Amazon SNS メッセージを受信するために作成したコードをデプロイします。エンドポイントをサブスクライブするときに、エンドポイントは少なくともサブスクリプションの確認メッセージを受信する準備ができている必要があります。

ステップ 2: HTTP/HTTPS エンドポイントを AmazonSNS トピックにサブスクライブするトピックを通じて HTTP または HTTPS エンドポイントにメッセージを送信するには、エンドポイントを Amazon SNS トピックにサブスクライブする必要があります。エンドポイントを指定するには、そのURL を使用します。トピックにサブスクライブするには、Amazon SNS コンソール、sns-subscribe コマンド、または Subscribe API アクションを使用できます。開始する前に、サブスクライブするエンドポイントの URL があり、ステップ 1 で説明したように、エンドポイントで確認メッセージや通知メッセージを受信する準備ができていることを確認します。

Amazon SNS コンソールを使って HTTP または HTTPS エンドポイントをトピックに受信登録するには

1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[トピック] を選択し、トピックを選択します。3. [その他のアクション] ドロップダウンリストを選択してから、[トピックへのサブスクリプション] を

選択します。4. [Protocol] ドロップダウンリストで [HTTP] または [HTTPS] を選択します。5. [Endpoint (エンドポイント)] ボックスで、メッセージの送信先となるトピックのエンドポイントの

URL を貼り付け、[サブスクリプションの作成] を選択します。

110

Page 116: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 3: サブスクリプションを確認する

6. [Subscription request received! (サブスクリプションリクエストを受け取りました)] メッセージが表示されたら、[Close (閉じる)] を選択します。

新しいサブスクライブリプションの [Subscription ID (サブスクリプション ID)]に、PendingConfirmation と表示されます。サブスクリプションを確認すると、[Subscription ID (サブスクリプション ID)] にサブスクリプション ID が表示されます。

ステップ 3: サブスクリプションを確認するエンドポイントをサブスクライブすると、Amazon SNS はエンドポイントにサブスクリプションの確認メッセージを送信します。ステップ 1 (p. 107) で説明しているアクションを実行するコードは、すでにエンドポイントにデプロイしています。具体的には、エンドポイントのコードは、サブスクリプションの確認メッセージから SubscribeURL 値を取得し、SubscribeURL そのもので指定された場所にアクセスするか、この場所を利用可能にして、ユーザーがウェブブラウザを使用するなどして手動でSubscribeURL にアクセスできるようにする必要があります。Amazon SNS は、サブスクリプションが確認されるまでエンドポイントにメッセージを送信しません。SubscribeURL にアクセスすると、応答にはサブスクリプションの ARN を指定する SubscriptionArn 要素を含む XML ドキュメントが含まれます。Amazon SNS コンソールを使用して、サブスクリプションが確認されたことを検証できます。[Subscription ID (サブスクリプション ID)] には、最初にサブスクリプションを追加したときに表示されたPendingConfirmation 値の代わりに、サブスクリプションの ARN が表示されます。

ステップ 4: サブスクリプションの配信再試行ポリシーを設定する(オプション)デフォルトでは、メッセージの最初の配信が失敗した場合、Amazon SNS は試行の失敗の間隔として 20秒に設定された遅延時間で、最大 3 回再試行を試みます。ステップ 1 (p. 107) で説明しているように、エンドポイントには再試行されたメッセージを処理できるコードが必要です。トピックまたはサブスクリプションで配信ポリシーを設定することで、Amazon SNS が失敗したメッセージを再試行する頻度と間隔をコントロールできます。トピックまたは特定のサブスクリプションで配信ポリシーを設定できます。

ステップ 5: トピックに発行するアクセス許可をユーザーに付与する (オプション)デフォルトでは、トピックの所有者にはトピックを発行するアクセス許可があります。その他のユーザーやアプリケーションがトピックに発行できるようにするには、AWS Identity and AccessManagement(IAM)を使ってトピックへの発行許可を付与する必要があります。Amazon SNS アクションに対するアクセス許可を IAM ユーザーに付与する方法の詳細については、「Amazon SNS でのアイデンティティベースのポリシーの使用 (p. 210)」を参照してください。

トピックへのアクセスは、以下の 2 つの方法でコントロールできます。

• IAM ユーザーまたはグループにポリシーを追加する。トピックへのアクセス許可をユーザーに付与する最も簡単な方法では、グループを作成し、適切なポリシーをグループに追加して、そのグループにユーザーを追加します。個々のユーザーに設定するポリシーを継続的に追跡するよりも、グループに対してユーザーを追加または削除する方がはるかに簡単です。

• トピックにポリシーを追加する。別の AWS アカウントにトピックへのアクセス許可を追加する場合、そのプリンシパルとして、アクセス許可を付与する AWS アカウントを持っているポリシーを追加することが唯一の方法です。

ほとんどの場合は、最初の方法 (ポリシーをグループに適用し、適切なユーザーをグループに追加または削除することでアクセス許可を管理する) を使用します。別のアカウントのユーザーにアクセス許可を付与する必要がある場合は、2 番目の方法を使用します。

111

Page 117: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドステップ 6: HTTP/HTTPS エンドポイントにメッセージを送信する

IAM ユーザーまたはグループに次のポリシーを追加した場合、そのユーザーまたはそのグループのメンバーに、「マイトピック」トピックで sns:Publish アクションを実行する許可が付与されます。

{ "Statement":[{ "Sid":"AllowPublishToMyTopic", "Effect":"Allow", "Action":"sns:Publish", "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic" }]}

以下の例のポリシーでは、トピックへのアクセス許可を別のアカウントに付与する方法を示しています。

Note

別の AWS アカウントにアカウントのリソースへのアクセス許可を付与する場合、管理レベルのアクセス (ワイルドカードアクセス) の権限を持っている IAM ユーザーにも、そのリソースへのアクセス許可が付与されます。他の IAM アカウントの他のすべてのユーザーは、自動的にリソースへのアクセスが拒否されます。その AWS アカウントの特定の IAM ユーザーにリソースへのアクセス許可を付与する場合、管理レベルアクセスの権限を持っているアカウントまたは IAM ユーザーは、そのリソースのアクセス許可をそれらの IAM ユーザーに委任する必要があります。クロスアカウントの委任の詳細については、『IAM の使用ガイド』の「クロスアカウントアクセスの有効化」を参照してください。

アカウント 123456789012 の MyTopic トピックに次のポリシーを追加した場合、そのトピックでsns:Publish アクションを実行するアクセス許可をアカウント 111122223333 に付与したことになります。

{ "Statement":[{ "Sid":"Allow-publish-to-topic", "Effect":"Allow", "Principal":{ "AWS":"111122223333" }, "Action":"sns:Publish", "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic" }]}

ステップ 6: HTTP/HTTPS エンドポイントにメッセージを送信するトピックに発行することで、トピックのサブスクリプションにメッセージを送信できます。トピックに発行するには、Amazon SNS コンソール、sns-publish CLI コマンド、または Publish API アクションを使用できます。

ステップ 1 (p. 107) を実行した場合、エンドポイントでデプロイしたコードで通知を処理できます。

Amazon SNS コンソールを使用してトピックに発行するには

1. トピックに発行するアクセス許可を持っている AWS アカウントまたは IAM ユーザーの認証情報を使用して、AWS マネジメントコンソール にサインインし、Amazon SNS コンソール (https://console.aws.amazon.com/sns/) を開きます。

2. ナビゲーションパネルで、[トピック] を選択し、トピックを選択します。3. [トピックに発行] ボタンを選択します。

112

Page 118: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージ署名の確認

4. [件名] ボックスに件名 (「Testing publish to my endpoint」など) を入力します。5. [Message (メッセージ)] ボックスにテキスト (「Hello world!」など) を入力し、[メッセージの発

行] を選択します。

「Your message has been successfully published.」というメッセージが表示されます。

Amazon SNS メッセージの署名の確認Amazon SNS によって送信された通知、サブスクリプションの確認、またはサブスクリプション解除の確認メッセージの信頼性を確認する必要があります。エンドポイントは、Amazon SNS メッセージに含まれる情報を使用して、署名する文字列と署名を再作成し、メッセージの内容から再作成した署名を、Amazon SNS がメッセージとともに送信した署名を照合してメッセージの内容を確認できるようにします。

なりすまし攻撃を防ぐには、Amazon SNS によって送信されたメッセージを検証するときに、以下の操作を行う必要があります。

• Amazon SNS から証明書を取得するときは必ず HTTPS を使用する。• 証明書の信頼性を検証する。• 証明書が Amazon SNS から受信されたことを確認する。• 可能であれば、サポートされている Amazon SNS 用 AWS SDK のいずれかを使用してメッセージを検

証および確認する。たとえば AWS SDK for PHP では、MessageValidator クラスの isValid メソッドを使用します。

Amazon SNS メッセージを処理する Java サーブレットのコード例については、「Amazon SNS エンドポイント Java Servlet のコード例 (p. 115)」を参照してください。

HTTP クエリベースのリクエストの使用時に Amazon SNS メッセージの署名を確認するには

1. Amazon SNS がエンドポイントに送信した HTTP POST リクエストの本文で、JSON ドキュメント名前から名前と値のペアを抽出します。署名する文字列を作成するために、名前と値のペアの一部の値を使用します。Amazon SNS メッセージの署名を確認する場合は、Message および Subject の値で、エスケープした制御文字を元の文字表現に変換し直すことが重要です。これらの値では、署名する文字列の一部として使用するときに、元の形式になっている必要があります。JSON ドキュメントを解析する方法の詳細については、「エンドポイントで Amazon SNS メッセージを処理する準備が完了していることを確認する (p. 107)」を参照してください。

SignatureVersion により、署名バージョンがわかります。署名バージョンからは、署名を生成する方法の要件を判断できます。Amazon SNS 通知については、Amazon SNS は現在、署名バージョン1 をサポートしています。このセクションでは、署名バージョン 1 を使用して署名を作成する手順を説明します。

2. メッセージの署名に Amazon SNS が使用した X509 証明書を取得します。SigningCertURL 値は、メッセージのデジタル署名の作成に使用された X509 証明書の場所を指します。この場所から証明書を取得します。

3. 証明書からパブリックキーを抽出します。SigningCertURL で指定された証明書からのパブリックキーを使用して、メッセージの信頼性と整合性を確認します。

4. メッセージタイプを判断します。署名する文字列の形式は Type 値によって指定されるメッセージタイプによって異なります。

5. 署名する文字列を作成します。署名対象の文字列は、改行文字で区切られた、メッセージからの特定の名前と値のペアのリストです。それぞれの名前と値のペアは、名前で始まり、改行文字、値の順に続き、改行文字で終わります。名前と値のペアは、バイト順でソートしてリストされる必要があります。

署名する文字列には、メッセージタイプに応じて以下の名前と値のペアが必要です。

113

Page 119: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージ署名の確認

通知

通知メッセージには、以下の名前と値のペアを含める必要があります。

MessageMessageIdSubject (if included in the message)TimestampTopicArnType

以下の例は Notification に関して署名する文字列です。

MessageMy Test MessageMessageId4d4dc071-ddbf-465d-bba8-08f81c89da64SubjectMy subjectTimestamp2019-01-31T04:37:04.321ZTopicArnarn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0PTypeNotification

SubscriptionConfirmation および UnsubscribeConfirmation

SubscriptionConfirmation および UnsubscribeConfirmation メッセージには、以下の名前と値のペアを含める必要があります。

MessageMessageIdSubscribeURLTimestampTokenTopicArnType

以下の例は SubscriptionConfirmation に関して署名する文字列です。

MessageMy Test MessageMessageId3d891288-136d-417f-bc05-901c108273eeSubscribeURLhttps://sns.us-east-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P&Token=233...Timestamp2019-01-31T19:25:13.719ZToken233...TopicArnarn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0PTypeSubscriptionConfirmation

114

Page 120: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドエンドポイント Java Servlet のコード例

6. Base64 形式から Signature の値をデコードします。メッセージは、Base64 としてエンコードされた Signature 値で署名を配信します。署名の値を、計算した署名と比較する前に、Base64 からSignature の値をデコードし、同じ形式を使って値を比較します。

7. Amazon SNS メッセージの派生したハッシュ値を生成します。署名の生成に使用されるのと同じハッシュ関数に、正規形式で Amazon SNS メッセージを送信します。

8. Amazon SNS メッセージのアサートされたハッシュ値を生成します。アサートされたハッシュ値は、Amazon SNS メッセージで配信された署名を復号するために (ステップ 3 の) パブリックキー値を使用した結果です。

9. Amazon SNS メッセージの信頼性と整合性を確認します。(ステップ 7 からの) 派生したハッシュ値を、(ステップ 8 からの) アサートされたハッシュ値に比較します。値が同じ場合、受信者はメッセージが転送中に変更されておらず、メッセージが Amazon SNS から発信されたことを確認できます。値が同じでない場合、受信者はこれを信頼することはできません。

Amazon SNS エンドポイント Java Servlet のコード例Important

以下のコードスニペットは Amazon SNS HTTP POST リクエストを処理する Java servlet を理解するために役立ちます。運用環境にスニペットを実装する前に、スニペットのいずれの部分も目的に適していることを確認します。たとえば、本稼働環境でなりすまし攻撃を避けるには、受信した Amazon SNS メッセージが Amazon SNS からのものであることを確認する必要があります。そのためには、Amazon SNS 証明書に表示された [Subject Alternative Name] フィールドのDNS 名の値 (us-west-2 の DNS Name=sns.us-west-2.amazonaws.com、リージョンによって異なる) が、受信した Amazon SNS メッセージと同じであることを確認します。サーバーの識別情報の確認の詳細については、「3.1Server Identity」(RFC 2818) を参照してください。「AmazonSNS メッセージの署名の確認 (p. 113)」も参照してください。

以下のメソッドでは、Java servlet で Amazon SNS からの HTTP POST リクエストに対するハンドラーの例を実装します。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SecurityException { //Get the message type header. String messagetype = request.getHeader("x-amz-sns-message-type"); //If message doesn't have the message type header, don't process it. if (messagetype == null) { return; }

// Parse the JSON message in the message body // and hydrate a Message object with its contents // so that we have easy access to the name-value pairs // from the JSON message. Scanner scan = new Scanner(request.getInputStream()); StringBuilder builder = new StringBuilder(); while (scan.hasNextLine()) { builder.append(scan.nextLine()); } Message msg = readMessageFromJson(builder.toString());

// The signature is based on SignatureVersion 1. // If the sig version is something other than 1, // throw an exception. if (msg.getSignatureVersion().equals("1")) { // Check the signature and throw an exception if the signature verification fails. if (isMessageSignatureValid(msg)) { log.info(">>Signature verification succeeded"); } else { log.info(">>Signature verification failed");

115

Page 121: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドエンドポイント Java Servlet のコード例

throw new SecurityException("Signature verification failed."); } } else { log.info(">>Unexpected signature version. Unable to verify signature."); throw new SecurityException("Unexpected signature version. Unable to verify signature."); }

// Process the message based on type. if (messagetype.equals("Notification")) { //Do something with the Message and Subject. //Just log the subject (if it exists) and the message. String logMsgAndSubject = ">>Notification received from topic " + msg.getTopicArn(); if (msg.getSubject() != null) { logMsgAndSubject += " Subject: " + msg.getSubject(); } logMsgAndSubject += " Message: " + msg.getMessage(); log.info(logMsgAndSubject); } else if (messagetype.equals("SubscriptionConfirmation")) { //You should make sure that this subscription is from the topic you expect. Compare topicARN to your list of topics //that you want to enable to add this endpoint as a subscription.

//Confirm the subscription by going to the subscribeURL location //and capture the return value (XML message body as a string) Scanner sc = new Scanner(new URL(msg.getSubscribeURL()).openStream()); StringBuilder sb = new StringBuilder(); while (sc.hasNextLine()) { sb.append(sc.nextLine()); } log.info(">>Subscription confirmation (" + msg.getSubscribeURL() + ") Return value: " + sb.toString()); //Process the return value to ensure the endpoint is subscribed. } else if (messagetype.equals("UnsubscribeConfirmation")) { //Handle UnsubscribeConfirmation message. //For example, take action if unsubscribing should not have occurred. //You can read the SubscribeURL from this message and //re-subscribe the endpoint. log.info(">>Unsubscribe confirmation: " + msg.getMessage()); } else { //Handle unknown message type. log.info(">>Unknown message type."); } log.info(">>Done processing message: " + msg.getMessageId());}

以下の例の Java メソッドは、リクエストボディで送信されたデータが含まれる Message オブジェクトからの情報を使って署名を作成し、メッセージの Base64 でエンコードされた元の署名 (Message オブジェクトからも読み取られる) に対してその署名を確認します。

private static boolean isMessageSignatureValid(Message msg) { try { URL url = new URL(msg.getSigningCertURL()); verifyMessageSignatureURL(msg, url);

InputStream inStream = url.openStream(); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); inStream.close();

Signature sig = Signature.getInstance("SHA1withRSA"); sig.initVerify(cert.getPublicKey()); sig.update(getMessageBytesToSign(msg));

116

Page 122: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドエンドポイント Java Servlet のコード例

return sig.verify(Base64.decodeBase64(msg.getSignature())); } catch (Exception e) { throw new SecurityException("Verify method failed.", e); }}

private static void verifyMessageSignatureURL(Message msg, URL endpoint) { URI certUri = URI.create(msg.getSigningCertURL());

if (!"https".equals(certUri.getScheme())) { throw new SecurityException("SigningCertURL was not using HTTPS: " + certUri.toString()); }

if (!endpoint.equals(certUri.getHost())) { throw new SecurityException( String.format("SigningCertUrl does not match expected endpoint. " + "Expected %s but received endpoint was %s.", endpoint, certUri.getHost()));

}}

以下の Java メソッドの例では、連携して Amazon SNS メッセージに署名するための文字列を作成します。getMessageBytesToSign メソッドは、メッセージタイプに基づいて適切な署名対象の文字列メソッドを呼び出し、バイト配列として署名する文字列を実行します。buildNotificationStringToSign および buildSubscriptionStringToSign メソッドは、「Amazon SNS メッセージの署名の確認 (p. 113)」に説明している形式に基づいて、署名する文字列を作成します。

private static byte [] getMessageBytesToSign (Message msg) { byte [] bytesToSign = null; if (msg.getType().equals("Notification")) bytesToSign = buildNotificationStringToSign(msg).getBytes(); else if (msg.getType().equals("SubscriptionConfirmation") || msg.getType().equals("UnsubscribeConfirmation")) bytesToSign = buildSubscriptionStringToSign(msg).getBytes(); return bytesToSign;}

//Build the string to sign for Notification messages.public static String buildNotificationStringToSign(Message msg) { String stringToSign = null;

//Build the string to sign from the values in the message. //Name and values separated by newline characters //The name value pairs are sorted by name //in byte sort order. stringToSign = "Message\n"; stringToSign += msg.getMessage() + "\n"; stringToSign += "MessageId\n"; stringToSign += msg.getMessageId() + "\n"; if (msg.getSubject() != null) { stringToSign += "Subject\n"; stringToSign += msg.getSubject() + "\n"; } stringToSign += "Timestamp\n"; stringToSign += msg.getTimestamp() + "\n"; stringToSign += "TopicArn\n"; stringToSign += msg.getTopicArn() + "\n"; stringToSign += "Type\n"; stringToSign += msg.getType() + "\n"; return stringToSign;}

117

Page 123: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド受信者として AWS Event Fork Pipelines を使用する場合

//Build the string to sign for SubscriptionConfirmation //and UnsubscribeConfirmation messages.public static String buildSubscriptionStringToSign(Message msg) { String stringToSign = null; //Build the string to sign from the values in the message. //Name and values separated by newline characters //The name value pairs are sorted by name //in byte sort order. stringToSign = "Message\n"; stringToSign += msg.getMessage() + "\n"; stringToSign += "MessageId\n"; stringToSign += msg.getMessageId() + "\n"; stringToSign += "SubscribeURL\n"; stringToSign += msg.getSubscribeURL() + "\n"; stringToSign += "Timestamp\n"; stringToSign += msg.getTimestamp() + "\n"; stringToSign += "Token\n"; stringToSign += msg.getToken() + "\n"; stringToSign += "TopicArn\n"; stringToSign += msg.getTopicArn() + "\n"; stringToSign += "Type\n"; stringToSign += msg.getType() + "\n"; return stringToSign;}

AWS Event Fork Pipelines を受信者とするシステム間メッセージングで Amazon SNS を使用する

Amazon SNS で構築したイベント駆動型アプリケーションで受信者サービスを使用し、発行者サービスでトリガーされたイベントに応答して自動的に作業を実行できます。このアーキテクチャパターンにより、サービスの再利用性、相互運用性、およびスケーラビリティを高めることができます。ただし、イベントのストレージ、バックアップ、検索、分析、再生などの一般的なイベント処理要件に対応するパイプラインにイベント処理を分岐させることは多大な労力を要する場合があります。

イベント駆動アプリケーションの開発を迅速化するには、 AWS Event Fork Pipelines を使用するイベント処理パイプラインを Amazon SNS トピックにサブスクライブできます。AWS Event Fork Pipelines は、オープンソースのネストされたアプリケーションのスイートです。このスイートは、AWS サーバーレスアプリケーションモデル (AWS SAM) に基づいており、AWS Event Fork Pipelines suite から AWS アカウント内に直接デプロイできます ([Show apps that create custom IAM roles or resource policies (カスタム IAMロールまたはリソースポリシーを作成するアプリケーションの表示)] を選択します)。

AWS Event Fork Pipelines のユースケースについては、「AWS Event Fork Pipelines サンプルアプリケーションをデプロイしてテストする (p. 43)」を参照してください。

トピック• AWS Event Fork Pipelines の詳細 (p. 118)• AWS Event Fork Pipelines のデプロイ (p. 121)

AWS Event Fork Pipelines の詳細AWS Event Fork Pipelines はサーバーレスな設計パターンです。ただし、AWS SAM に基づいてネストされたサーバーレスアプリケーションのスイートでもあります (これを AWS Serverless ApplicationRepository (AWS SAR) から AWS アカウントに直接デプロイしてイベント駆動型のプラットフォームを強

118

Page 124: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines の詳細

化できます)。アーキテクチャの必要に応じて、これらのネストされたアプリケーションを個別にデプロイできます。

トピック• イベントのストレージおよびバックアップパイプライン (p. 119)• イベントの検索および分析パイプライン (p. 120)• イベントの再生パイプライン (p. 120)

次の図は、3 つのネストされたアプリケーションで補完された AWS Event Fork Pipelines アプリケーションを示しています。アーキテクチャの必要に応じて、AWS SAR の AWS Event Fork Pipelines スイートから任意のパイプラインを個別にデプロイできます。

各パイプラインは、同じ Amazon SNS トピックにサブスクライブされるため、このトピックに発行された複数のイベントを並列処理できます。各パイプラインは独立しており、独自のサブスクリプションフィルタポリシー (p. 70)を設定できます。これにより、パイプラインでは、トピックに発行されたすべてのイベントではなく、関心のあるイベントのサブセットに絞って処理できます。

Note

通常のイベント処理パイプラインに加えて 3 つの AWS Event Fork Pipelines (おそらくは AmazonSNS トピックにサブスクライブ済み) を配置しているため、既存のワークロードで AWS EventFork Pipelines を利用するために現在のメッセージ発行者の一部を変更する必要はありません。

イベントのストレージおよびバックアップパイプライン次の図は、イベントのストレージおよびバックアップパイプラインを示しています。このパイプラインをAmazon SNS トピックにサブスクライブして、システムを通過するイベントを自動的にバックアップできます。

このパイプラインは、Amazon SNS トピックから配信されたイベントをバッファ処理する Amazon SQSキュー、これらのイベントをキューで自動的にポーリングして Amazon Kinesis Data Firehose ストリーム内にプッシュする AWS Lambda 関数、およびストリームでロードされたイベントを永続的にバックアップする Amazon S3 バケットで構成されます。

119

Page 125: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines の詳細

Firehose ストリームの動作を微調整するには、イベントをバケット内にロードする前に、イベントをバッファ処理、変換、および圧縮するようにストリームを設定できます。イベントがロードされたら、Amazon Athena で標準の SQL クエリを使用し、バケットに対してクエリを実行できます。既存のAmazon S3 バケットを再利用したり、新しいバケットを作成したりするようにパイプラインを設定することもできます。

イベントの検索および分析パイプライン次の図は、イベントの検索および分析パイプラインを示しています。このパイプラインを Amazon SNS トピックにサブスクライブして、システムを通過するイベントを検索ドメインでインデックス付けし、これらのイベントに対して分析を実行できます。

このパイプラインは、Amazon SNS トピックから配信されたイベントをバッファ処理する Amazon SQSキュー、キューのイベントをポーリングして Amazon Kinesis Data Firehose ストリーム内にプッシュする AWS Lambda 関数、Firehose ストリームでロードされたイベントにインデックス付けする AmazonElasticsearch Service ドメイン、および検索ドメインでインデックス付けできない配信不能イベントを保存する Amazon S3 バケットで構成されます。

Firehose ストリームについてイベントのバッファ処理、変換、および圧縮を微調整するには、このパイプラインを設定できます。

パイプラインで AWS アカウント内の既存の Elasticsearch ドメインを再利用するか、新しいドメインを作成するかを設定することもできます。イベントは検索ドメインでインデックス付けされるため、Kibana を使用してイベントに対して分析を実行し、リアルタイムでビジュアルダッシュボードを更新できます。

イベントの再生パイプライン次の図は、イベントの再生パイプラインを示しています。過去 14 日間にシステムで処理されたイベントを記録するには (プラットフォームを障害から復旧する必要がある場合など)、このパイプラインをAmazon SNS トピックにサブスクライブしてイベントを再処理できます。

120

Page 126: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines のデプロイ

このパイプラインは、Amazon SNS トピックから配信されたイベントをバッファ処理する Amazon SQSキューと、キューのイベントをポーリングして通常のイベント処理パイプライン (トピックにサブスクライブ済み) 内に再ルーティングする AWS Lambda 関数で構成されます。

Note

デフォルトでは、再生関数は無効になっており、イベントを再ルーティングしません。イベントを再処理する必要がある場合は、AWS Lambda 再生関数のイベントソースとして Amazon SQS再生キューを有効にする必要があります。

AWS Event Fork Pipelines のデプロイAWS Event Fork Pipelines スイート ([Show apps that create custom IAM roles or resource policies (カスタム IAM ロールまたはリソースポリシーを作成するアプリケーションを表示する)] を選択) が AWSServerless Application Repository でパブリックアプリケーションのグループとして使用可能であり、ここで AWS Lambda コンソールを使用して手動でスイートをデプロイしてテストできます。AWS Lambda コンソールを使用したパイプラインのデプロイについては、「AWS Event Fork Pipelines を Amazon SNS トピックにサブスクライブする (p. 50)」を参照してください。

本稼働シナリオでは、AWS Event Fork Pipelines をアプリケーション全体の AWS SAM テンプレート内に埋め込むことをお勧めします。これをネストされたアプリケーション機能を使用して行うには、AWSSAM テンプレートにリソース AWS::Serverless::Application を追加し、ネストされたアプリケーションの AWS SAR ApplicationId と SemanticVersion を参照します。

たとえば、AWS SAM テンプレートの Resources セクションに次の YAML スニペットを追加することで、イベントのストレージおよびバックアップパイプラインを、ネストされたアプリケーションとして使用できます。

Backup: Type: AWS::Serverless::Application Properties: Location: ApplicationId: arn:aws:serverlessrepo:us-east-2:123456789012:applications/fork-event-storage-backup-pipeline SemanticVersion: 1.0.0

121

Page 127: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAWS Event Fork Pipelines のデプロイ

Parameters: #The ARN of the Amazon SNS topic whose messages should be backed up to the Amazon S3 bucket. TopicArn: !Ref MySNSTopic

パラメータ値を指定するときに、AWS CloudFormation 組み込み関数を使用してテンプレート内の他のリソースを参照できます。たとえば、上の YAML スニペットで、TopicArn パラメータは、AWS SAM テンプレート内に定義されている AWS::SNS::Topic リソース (MySNSTopic) を参照します。詳細については、AWS CloudFormation ユーザーガイド の「組み込み関数リファレンス」を参照してください。

Note

AWS SAR アプリケーションの AWS Lambda コンソールページには、AWS SAR アプリケーションをネストするために必要な YAML をクリップボードにコピーする [Copy as SAM Resource(SAM リソースとしてコピー)] ボタンが含まれています。

122

Page 128: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド受信者としてモバイルアプリケーションを使用する場合 (モバイルプッシュ)

ユーザー通知への Amazon SNS の使用

このセクションでは、モバイルアプリケーション、携帯電話番号、E メールアドレスなどの受信者へのユーザー通知に Amazon SNS を使用する方法について説明します。

トピック• 受信者がモバイルアプリケーションの場合のユーザー通知に Amazon SNS を使用する (モバイルプッ

シュ) (p. 123)• 受信者が携帯電話番号の場合のユーザー通知に Amazon SNS を使用する (SMS 送信) (p. 153)

受信者がモバイルアプリケーションの場合のユーザー通知に Amazon SNS を使用する (モバイルプッシュ)

Amazon SNS によって、モバイルデバイスのアプリケーションにプッシュ通知メッセージを直接送信できます。モバイルエンドポイントに送信されたプッシュ通知メッセージは、メッセージアラート、バッジ更新、または音声アラートとしてモバイルアプリケーションに表示できます。

Important

現在、モバイルアプリケーションは、次のリージョンでのみ作成できます。

• 米国東部(バージニア北部)• 米国西部 (北カリフォルニア)• 米国西部 (オレゴン)• アジアパシフィック (ムンバイ)• アジアパシフィック (ソウル)• アジアパシフィック (シンガポール)• アジアパシフィック (シドニー)• アジアパシフィック (東京)• 欧州 (フランクフルト)• 欧州 (アイルランド)• 南米 (サンパウロ)

トピック• ユーザー通知の仕組み (p. 124)• Amazon SNS ユーザ通知の前提条件 (p. 124)• ユーザー通知プロセスの概要 (p. 125)• Amazon SNS モバイルプッシュの使用 (p. 125)

123

Page 129: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドユーザー通知の仕組み

• メッセージの配信ステータスの Amazon SNS アプリケーション属性を使用する (p. 138)• アプリケーションイベント通知 (p. 141)• モバイルプッシュ通知サービスの Amazon SNS 有効期限 (TTL) メッセージ属性の使用 (p. 143)• Amazon SNS モバイルプッシュ API の使用 (p. 145)• Amazon SNS モバイルプッシュの API エラー (p. 146)

ユーザー通知の仕組み以下のサポートされているプッシュ通知サービスのいずれかを使用して、モバイルデバイスとデスクトップの両方にプッシュ通知メッセージを送信します。

• Amazon Device Messaging (ADM)• iOS および Mac OS X 用の Apple Push Notification Service (APNs)• Baidu Cloud Push (Baidu)• Firebase クラウドメッセージング (FCM)• Windows Phone 用 Microsoft プッシュ通知サービス (MPNS)• Windows プッシュ通知サービス (WNS)

APNs や FCM などのプッシュ通知サービスは、各アプリケーションと、サービスを使用するために登録されている関連モバイルデバイスとの接続を維持します。アプリおよびモバイルデバイスの登録時に、プッシュ通知サービスはデバイストークンを返します。Amazon SNS はデバイストークンを使用して、モバイルエンドポイントを作成します。ここに直接プッシュ通知メッセージを送信できます。Amazon SNS が他のプッシュ通知サービスと通信できるようにするには、プッシュ通知サービス認証情報を Amazon SNS に送信して、代理で使用できるようにします。詳細については、「ユーザー通知プロセスの概要 (p. 125)」を参照してください。

直接プッシュ通知メッセージを送信するだけでなく、Amazon SNS を使用して、トピックにサブスクライブされているモバイルエンドポイントにメッセージを送信することもできます。このコンセプトは、「Amazon Simple Notification Service とは (p. 1)」に説明されているように、Amazon SQS、HTTP/S、Eメール、SMS などその他のエンドポイントタイプをトピックにサブスクライブするのと同じです。違いは、Amazon SNS はサブスクライブされたモバイルエンドポイントがトピックに送信されたプッシュ通知メッセージを受信するためにプッシュ通知サービスを通じて通信を行うことです。

Amazon SNS ユーザ通知の前提条件Amazon SNS モバイルプッシュ通知の使用を開始するには、以下が必要です。

• サポートされているプッシュ通知サービスのいずれかに接続するための認証情報セット:ADM、APNs、Baidu、FCM、MPNS、または WNS。

• モバイルアプリケーションやデバイスのデバイストークンまたは登録 ID。• モバイルエンドポイントにプッシュ通知メッセージを送信するように設定された Amazon SNS。• 登録済みで、サポートされているいずれかのプッシュ通知サービスを使用するように設定されたモバイ

ルアプリケーション。

アプリケーションをプッシュ通知サービスに登録するには、いくつかのステップが必要です。AmazonSNS では、モバイルエンドポイントに直接プッシュ通知メッセージを送信するために、ユーザーがプッシュ通知サービスに対して指定する情報の一部が必要です。一般的に、プッシュ通知サービスに接続するための必須認証情報、プッシュ通知サービスから受け取ったデバイストークンまたは登録 ID(モバイルデバイスおよびモバイルアプリケーションを表すもの)、およびプッシュ通知サービスに登録されているモバイルアプリケーションが必要です。

124

Page 130: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドユーザー通知プロセスの概要

認証情報の正確な形式はモバイルプラットフォームごとに異なりますが、どの場合も、これらの認証情報はプラットフォームに接続するときに送信する必要があります。モバイルアプリケーションごとに 1 つの認証情報セットが発行され、そのアプリケーションのどのインスタンスにメッセージを送信する際もその認証情報セットを使用する必要があります。

具体的な名前は、どのプッシュ通知サービスが使用されるかによって異なります。たとえば、プッシュ通知サービスとして APNs を使用する場合は、デバイストークンが必要になります。また、FCM を使用する場合は、デバイストークンに相当するものが登録 ID と呼ばれます。デバイストークンまたは登録 IDは、モバイルデバイスのオペレーティングシステムによってアプリケーションに送信される文字列です。特定のモバイルデバイスで実行されるモバイルアプリのインスタンスを一意に識別するため、このアプリケーション/デバイスペアの一意識別子と考えることができます。

Amazon SNS は、認証情報 (および他のいくつかの設定) をプラットフォームアプリケーションリソースとして保存します。デバイストークン (ここでもいくつかの追加設定を使用) は、プラットフォームエンドポイントと呼ばれるオブジェクトとして表現されます。各プラットフォームエンドポイントは、1 つの特定のプラットフォームアプリケーションに属し、対応するプラットフォームアプリケーションに保存された認証情報を使用してすべてのプラットフォームエンドポイントに通信できます。

以降のセクションでは、サポートされているプッシュ通知サービスごとの前提条件が示されています。前提条件の情報を取得した後は、AWS マネジメントコンソール または Amazon SNS モバイルプッシュ APIを使用して、プッシュ通知メッセージを送信できます。詳細については、「ユーザー通知プロセスの概要 (p. 125)」を参照してください。

ユーザー通知プロセスの概要1. サポートするモバイルプラットフォームの認証情報とデバイストークンを取得 (p. 124)します。2. 認証情報を使用して、Amazon SNS でプラットフォームアプリケーションオブジェクト

(PlatformApplicationArn) を作成します。詳細については、「プラットフォームエンドポイントの作成とデバイストークンの管理 (p. 129)」を参照してください。

3. 返された認証情報を使用して、モバイルアプリおよびデバイス用のトークンをモバイルプラットフォームにリクエストします。受け取ったトークンはモバイルアプリおよびデバイスの識別に使用されます。

4. デバイストークンと PlatformApplicationArn を使用し、Amazon SNS でプラットフォームエンドポイントオブジェクト (EndpointArn) を作成します。詳細については、「プラットフォームエンドポイントの作成とデバイストークンの管理 (p. 129)」を参照してください。

5. EndpointArn を使用して、モバイルデバイスのアプリにメッセージを発行 (p. 125)します。詳細については、『Amazon Simple Notification Service API Reference』の「モバイルデバイスへのメッセージの直接的な送信 (p. 135)」と「Publish API」を参照してください。

Amazon SNS モバイルプッシュの使用このセクションでは、「Amazon SNS ユーザ通知の前提条件 (p. 124)」で説明されている情報に基づいて AWS マネジメントコンソール を使用し、モバイルアプリの AWS への登録、デバイストークン (登録ID とも呼ばれる) の追加、モバイルデバイスへのメッセージの直接送信、および Amazon SNS トピックに受信登録しているモバイルデバイスへのメッセージの送信を行う方法について説明します。

トピック• モバイルアプリの AWS への登録 (p. 126)• デバイストークンまたは登録 ID の追加 (p. 126)• プラットフォームエンドポイントの作成とデバイストークンの管理 (p. 129)• モバイルデバイスへのメッセージの直接的な送信 (p. 135)• トピックに受信登録したモバイルデバイスへのメッセージの送信 (p. 135)• カスタムプラットフォーム固有のペイロードのモバイルデバイスへの送信 (p. 136)

125

Page 131: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

モバイルアプリの AWS への登録Amazon SNS がモバイルエンドポイントに通知メッセージを送信するためには、直接か、トピックへの受信登録かにかかわらず、最初にアプリを AWS に登録する必要があります。AWS にモバイルアプリを登録するには、アプリを表す名前を入力し、サポートされるプラットフォームを選択して、通知サービスプラットフォームの認証情報を指定します。アプリが AWS に登録されたら、次の手順はアプリやモバイルデバイス用のエンドポイントの作成です。このエンドポイントは、アプリとデバイスに通知メッセージを送信するために Amazon SNS によって使用されます。

モバイルアプリを AWS に登録するには

1. Amazon SNS コンソールにサインインします。2. [プラットフォームアプリケーションの作成] を選択します。3. [アプリケーション名] ボックスにアプリケーションの名前を入力します。

アプリ名は大文字および小文字の ASCII 文字、数字、アンダースコア、ハイフン、およびピリオドのみで構成され、1~256 文字の長さである必要があります。

4. [プッシュ通知プラットフォーム] ボックスで、アプリが登録されているプラットフォームを選択し、適切な認証情報を入力します。

Note

いずれかの APNs プラットフォームを使用している場合は、[ファイルの選択] を選択して .p12 ファイル (Keychain Access からエクスポートされる) を Amazon SNS にアップロードできます。

5. この情報を入力したら、[Add New App] を選択します。

アプリが Amazon SNS に登録されます。これにより、選択されたプラットフォーム用のプラットフォームアプリケーションオブジェクトが作成され、対応する PlatformApplicationArn が返されます。

デバイストークンまたは登録 ID の追加Apple Push Notification Service (APNs) や Firebase クラウドメッセージング (FCM) などの通知サービスに初めてアプリやモバイルデバイスを登録すると、通知サービスからデバイストークンまたは登録ID が通知サービスから返されます。デバイストークンまたは登録 ID を Amazon SNS に追加すると、それらは PlatformApplicationArn API とともに、アプリやデバイスのエンドポイントを作成するために使用されます。Amazon SNS がエンドポイントを作成するときに、EndpointArn が返されます。EndpointArn は、通知メッセージの送信先のアプリやモバイルデバイスを Amazon SNS が知るための方法です。

以下の方法を使用して、デバイストークンと登録 ID を Amazon SNS に追加できます。

• AWS マネジメントコンソール を使用して手動で AWS に 1 つのトークンを追加する• AWS マネジメントコンソール を使用 CSV ファイルから AWS に既存のトークンを移行する• CreatePlatformEndpoint API を使って複数のトークンをアップロードする• 将来アプリをインストールするデバイスからトークンを登録する

手動でデバイストークンまたは登録 ID を追加するには

1. Amazon SNS コンソールにサインインします。2. [アプリケーション] を選択し、アプリケーションを選択して、[エンドポイントの追加] を選択しま

す。

126

Page 132: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

3. [Endpoint Token (エンドポイントトークン)] ボックスに、通知サービスに応じてトークン ID または登録 ID を入力します。たとえば、ADM や FCM では、登録 ID を入力します。

4. (オプション) [ユーザーデータ] ボックスに、エンドポイントに関連付ける任意の情報を入力します。Amazon SNS はこのデータを使用しません。データは UTF-8 形式で、2 KB 未満でなければなりません。

5. 最後に、[エンドポイントの追加] を選択します。

これでエンドポイントを作成したので、直接モバイルデバイスにメッセージを送信するか、トピックに受信登録しているモバイルデバイスにメッセージを送信することができます。

既存のトークンを CSV ファイルから AWS に移行するには

CSV ファイルに含まれている既存のトークンを移行できます。CSV ファイルは 2 MB より大きくすることはできません。複数のトークンを移行するときは、CreatePlatformEndpoint API を使用することをお勧めします。CSV ファイルの各トークンの後には改行が必要です。たとえば、CSV ファイルは以下のようになります。

amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz01,"User data with spaces requires quotes"amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz04,"Data,with,commas,requires,quotes"amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz02,"Quoted data requires ""escaped"" quotes"amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz03,"{""key"": ""json is allowed"", ""value"":""endpoint"", ""number"": 1}"amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz05,SimpleDataNoQuotesamzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz06,"The following line has no user data"amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz07APBTKzPGlCyT6E6oOfpdwLpcRNxQp5vCPFiFeru9oZylc22HvZSwQTDgmmw9WdNlXMerUPxmpX0w1,"Different token style"

1. Amazon SNS コンソールにサインインします。2. [アプリケーション] を選択し、アプリケーションを選択して、[エンドポイントの追加] を選択しま

す。3. [Migrate existing tokens over to AWS (既存のトークンを AWS に移行)]、[ファイルの選択] の順に選択

し、CSV ファイルを選択してから、[エンドポイントの追加] を選択します。

CreatePlatformEndpoint を使用して複数のトークンをアップロードするには

以下の手順は、AWS に用意されているサンプルの Java アプリ (bulkupload パッケージ) を使用して複数のトークン (デバイストークンまたは登録 ID) を Amazon SNS にアップロードする方法を示しています。既存のトークンのアップロードを開始するには、このサンプルアプリを使用できます。

Note

以下の手順では、Eclipse Java IDE を使用します。これらの手順では、AWS SDK for Java をインストールし、AWS アカウントの AWS セキュリティ認証情報があることを前提としています。詳細については、「AWS SDK for Java」を参照してください。認証情報の取得方法の詳細については、『AWS General Reference』の「セキュリティ認証情報の取得方法」を参照してください。

1. snsmobilepush.zip ファイルをダウンロードして解凍します。2. Eclipse で新しい Java プロジェクトを作成します。3. 新しく作成したされた Java プロジェクトの最上位ディレクトリに SNSSamples フォルダーをイ

ンポートします。Eclipse で、Java プロジェクトの名前を右クリックし、[Import] を選択して、

127

Page 133: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

[General] を展開します。次に、[File System]、[Next] の順に選択し、SNSSamples フォルダーを参照します。その後、[OK]、[Finish] の順に選択します。

4. OpenCSV library のコピーをダウンロードし、bulkupload パッケージのビルドパスに追加します。5. bulkupload パッケージに含まれている BulkUpload.properties ファイルを開きます。6. 以下を BulkUpload.properties に追加します:

• エンドポイントを追加する ApplicationArn。• トークンを含む CSV ファイルの場所の絶対パス。• Amazon SNS が正しく解析するトークンと、解析に失敗するトークンのログ記録のために作成され

る CSV ファイルの名前 (goodTokens.csv、badTokens.csv など)。• (オプション)トークンを含む CSV ファイルで区切り記号と引用符を指定する文字。• (オプション) エンドポイントを同時に作成するために使用するスレッドの数。デフォルトは 1 ス

レッドです。

完了した BulkUpload.properties は次のようになります。

applicationarn:arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushappcsvfilename:C:\\mytokendirectory\\mytokens.csvgoodfilename:C:\\mylogfiles\\goodtokens.csvbadfilename:C:\\mylogfiles\\badtokens.csvdelimiterchar:' quotechar:"numofthreads:5

7. BatchCreatePlatformEndpointSample.java アプリケーションを実行してトークンを Amazon SNS にアップロードします。

この例では、正常に Amazon SNS にアップロードされたトークン用に作成されたエンドポイントはgoodTokens.csv に記録され、正しい形式でないトークンは badTokens.csv に記録されます。さらに、次のような内容を含む STD OUT ログが Eclipse のコンソールに書き込まれます。

<1>[SUCCESS] The endpoint was created with Arn arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushapp/165j2214-051z-3176-b586-138o3d420071<2>[ERROR: MALFORMED CSV FILE] Null token found in /mytokendirectory/mytokens.csv

将来アプリをインストールするデバイスからトークンを登録するには

次の 2 つのオプションのうちの 1 つを使用できます。

• Use the Amazon Cognito service: モバイルアプリでは、Amazon SNS プラットフォームアプリケーションと関連付けられた認証情報を作成するために、認証情報が必要です。一定期間後に有効期限が切れる一時認証情報を使用することをお勧めします。ほとんどのシナリオでは、Amazon Cognito を使用して一時的なセキュリティ認証情報を作成することをお勧めします。詳細については、「AmazonCognito 開発者ガイド」を参照してください。アプリが Amazon SNS に登録したときに通知を受信する場合は、新しいエンドポイント ARN を提供する Amazon SNS イベントを受信するように登録できます。ListEndpointByPlatformApplication API を使用して、Amazon SNS に登録されたエンドポイントの詳細な一覧を取得することもできます。

• [Use a proxy server]: 各インストールで呼び出し、登録するためにモバイルアプリ用にアプリケーションのインフラストラクチャがすでにセットアップされている場合は、引き続きこのセットアップを使用できます。サーバーはプロキシとして動作し、保存したいユーザーデータとともに、Amazon SNS モバイルプッシュ通知にデバイストークンを渡します。そのためには、プロキシサーバーは AWS の認証情報を使用して Amazon SNS に接続し、CreatePlatformEndpoint API 呼び出しを使用してトークン情報をアップロードします。新しく作成された Amazon リソースネーム (ARN) が返され、サーバーはAmazon SNS にそれ以降に発行の呼び出しを行うためにこれを保存できます。

128

Page 134: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

プラットフォームエンドポイントの作成とデバイストークンの管理プッシュ通知サービスへのアプリおよびモバイルデバイスの登録時に、プッシュ通知サービスはデバイストークンを返します。Amazon SNS はデバイストークンを使用して、モバイルエンドポイントを作成します。ここに直接プッシュ通知メッセージを送信できます。詳細については、「Amazon SNS ユーザ通知の前提条件 (p. 124)」および「ユーザー通知プロセスの概要 (p. 125)」を参照してください。

このセクションでは、プラットフォームエンドポイントを作成してデバイストークンを管理するための推奨される方法について説明します。

トピック• プラットフォームエンドポイントの作成 (p. 129)• 擬似コード (p. 129)• AWS SDK の例 (p. 130)• トラブルシューティング (p. 134)

プラットフォームエンドポイントの作成

Amazon SNS を使用してアプリケーションにプッシュ通知を送信するには、まずプラットフォームエンドポイントの作成アクションを呼び出すことで、そのアプリケーションのデバイストークンを Amazon SNSに登録する必要があります。このアクションは、パラメーターとしてプラットフォームアプリケーションの Amazon リソースネーム (ARN) およびデバイストークンを使用し、作成されたプラットフォームエンドポイントの ARN を返します。

プラットフォームエンドポイントの作成アクションは、次の処理を行います。

• プラットフォームエンドポイントが既に存在する場合、再度作成しないでください。呼び出し元に既存のプラットフォームエンドポイントの ARN を返します。

• デバイストークンが同じだが設定が異なるプラットフォームエンドポイントが既に存在する場合、再度作成しないでください。呼び出し元に例外をスローします。

• プラットフォームエンドポイントが存在しない場合は、作成します。呼び出し元に新しく作成したプラットフォームエンドポイントの ARN を返します。

このアプローチでは、作業エンドポイントが常に提供されるとは限らないため、アプリケーションが起動するたびにプラットフォームエンドポイントの作成アクションを呼び出さないでください。これは、たとえばアプリケーションがアンインストールされて同じデバイスに再インストールされ、そのアプリケーションのエンドポイントが既に存在しているが無効な場合などに発生する可能性があります。登録プロセスに成功すると、以下のことが達成されます。

1. このアプリケーションデバイスの組み合わせにプラットフォームエンドポイントが存在することを確認します。

2. プラットフォームエンドポイントのデバイストークンが最新の有効なデバイストークンであることを確認します。

3. プラットフォームエンドポイントが有効であり、使用できる状態にあることを確認します。

擬似コード

次の擬似コードは、さまざまな開始条件において有効な最新の作業プラットフォームエンドポイントを作成するための推奨される方法について説明します。このアプローチは、アプリケーションが初めて登録されるかどうか、このアプリケーションのプラットフォームエンドポイントが既に存在するかどうか、プラットフォームエンドポイントが有効かどうか、適切なデバイストークンがあるかどうかなどに関係なく

129

Page 135: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

機能します。重複するプラットフォームエンドポイントが作成されたり、既に最新のプラットフォームエンドポイントが有効になっている場合に既存のプラットフォームエンドポイントが変更されたりしないため、連続して複数回呼び出しても安全です。

retrieve the latest device token from the mobile operating systemif (the platform endpoint ARN is not stored) # this is a first-time registration call create platform endpoint store the returned platform endpoint ARNendif

call get endpoint attributes on the platform endpoint ARN

if (while getting the attributes a not-found exception is thrown) # the platform endpoint was deleted call create platform endpoint with the latest device token store the returned platform endpoint ARNelse if (the device token in the endpoint does not match the latest one) or (get endpoint attributes shows the endpoint as disabled) call set endpoint attributes to set the latest device token and then enable the platform endpoint endifendif

このアプローチは、アプリケーションが自身を登録または再登録するときいつでも使用できます。また、デバイストークンの変更について Amazon SNS に通知するときも使用できます。この場合、最新のデバイストークン値を持つアクションを呼び出すだけです。このアプローチについて注意が必要な点は次のとおりです。

• プラットフォームエンドポイントの作成アクションの呼び出しが考えられる 2 つのケースがあります。アプリケーションが自身のプラットフォームエンドポイント ARN を認識していない、ごく最初の時点で呼び出される可能性があります。これは初回登録時に発生します。さらに、最初のエンドポイント属性の取得アクションが not-found 例外で失敗した場合にも呼び出されます。これは、アプリケーションがエンドポイント ARN を認識しているが、削除された場合に発生する可能性があります。

• エンドポイント属性の取得アクションは、プラットフォームエンドポイントが作成されたばかりの場合でもプラットフォームエンドポイントの状態を確認するために呼び出されます。これは、プラットフォームエンドポイントが既に存在するが無効になっている場合に発生します。この場合、プラットフォームエンドポイントの作成アクションが成功しますが、プラットフォームエンドポイントは有効にならないため、成功を返す前にプラットフォームエンドポイントの状態をもう一度確認する必要があります。

AWS SDK の例

以下の例では、AWS SDK で提供されている Amazon SNS クライアントを使用して前の疑似コードを実装する方法について説明します。

AWS SDK for Java

前の擬似コードの Java での実装例を示します。

class RegistrationExample { AmazonSNSClient client = new AmazonSNSClient(); //provide credentials here String arnStorage = null; public void registerWithSNS() { String endpointArn = retrieveEndpointArn();

130

Page 136: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

String token = "Retrieved from the mobile operating system"; boolean updateNeeded = false; boolean createNeeded = (null == endpointArn); if (createNeeded) { // No platform endpoint ARN is stored; need to call createEndpoint. endpointArn = createEndpoint(); createNeeded = false; } System.out.println("Retrieving platform endpoint data..."); // Look up the platform endpoint and make sure the data in it is current, even if // it was just created. try { GetEndpointAttributesRequest geaReq = new GetEndpointAttributesRequest() .withEndpointArn(endpointArn); GetEndpointAttributesResult geaRes = client.getEndpointAttributes(geaReq); updateNeeded = !geaRes.getAttributes().get("Token").equals(token) || !geaRes.getAttributes().get("Enabled").equalsIgnoreCase("true"); } catch (NotFoundException nfe) { // We had a stored ARN, but the platform endpoint associated with it // disappeared. Recreate it. createNeeded = true; } if (createNeeded) { createEndpoint(token); } System.out.println("updateNeeded = " + updateNeeded);

if (updateNeeded) { // The platform endpoint is out of sync with the current data; // update the token and enable it. System.out.println("Updating platform endpoint " + endpointArn); Map attribs = new HashMap(); attribs.put("Token", token); attribs.put("Enabled", "true"); SetEndpointAttributesRequest saeReq = new SetEndpointAttributesRequest() .withEndpointArn(endpointArn) .withAttributes(attribs); client.setEndpointAttributes(saeReq); } } /** * @return never null * */ private String createEndpoint(String token) { String endpointArn = null; try { System.out.println("Creating platform endpoint with token " + token); CreatePlatformEndpointRequest cpeReq = new CreatePlatformEndpointRequest() .withPlatformApplicationArn(applicationArn) .withToken(token); CreatePlatformEndpointResult cpeRes = client .createPlatformEndpoint(cpeReq); endpointArn = cpeRes.getEndpointArn();

131

Page 137: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

} catch (InvalidParameterException ipe) { String message = ipe.getErrorMessage(); System.out.println("Exception message: " + message); Pattern p = Pattern .compile(".*Endpoint (arn:aws:sns[^ ]+) already exists " + "with the same [Tt]oken.*"); Matcher m = p.matcher(message); if (m.matches()) { // The platform endpoint already exists for this token, but with // additional custom data that // createEndpoint doesn't want to overwrite. Just use the // existing platform endpoint. endpointArn = m.group(1); } else { // Rethrow the exception, the input is actually bad. throw ipe; } } storeEndpointArn(endpointArn); return endpointArn; } /** * @return the ARN the app was registered under previously, or null if no * platform endpoint ARN is stored. */ private String retrieveEndpointArn() { // Retrieve the platform endpoint ARN from permanent storage, // or return null if null is stored. return arnStorage; } /** * Stores the platform endpoint ARN in permanent storage for lookup next time. * */ private void storeEndpointArn(String endpointArn) { // Write the platform endpoint ARN to permanent storage. arnStorage = endpointArn; }}

この実装で興味深いのは、InvalidParameterException が createEndpoint メソッドでどのように処理されるかという点です。Amazon SNS は、既存のプラットフォームエンドポイントに同じデバイストークンと null 以外の CustomUserData フィールドがあるとき、プラットフォームエンドポイントの作成リクエストを拒否します。代わりの方法では、CustomUserData が上書きされる (したがって、失われる) ためです。前のコードの createEndpoint メソッドは、Amazon SNS によってスローされた InvalidParameterException をキャプチャし、この特定の理由でスローされたかどうかを確認します。その理由でスローされた場合、例外から既存のプラットフォームエンドポイントの ARN が抽出されます。適切なデバイストークンを持つプラットフォームエンドポイントが存在するため、この処理は成功します。

詳細については、「Amazon SNS モバイルプッシュ API の使用 (p. 145)」を参照してください。AWS SDK for .NET

前の C# 擬似コードの実装例を示します。

class RegistrationExample{ private AmazonSimpleNotificationServiceClient client = new AmazonSimpleNotificationServiceClient(); private String arnStorage = null;

public void RegisterWithSNS()

132

Page 138: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

{ String endpointArn = EndpointArn; String token = "Retrieved from the mobile operating system"; String applicationArn = "Set this based on your application";

bool updateNeeded = false; bool createNeeded = (null == endpointArn);

if (createNeeded) { // No platform endpoint ARN is stored; need to call createEndpoint. EndpointArn = CreateEndpoint(token, applicationArn); createNeeded = false; }

Console.WriteLine("Retrieving platform endpoint data..."); // Look up the platform endpoint and make sure the data in it is current, even if // it was just created. try { GetEndpointAttributesRequest geaReq = new GetEndpointAttributesRequest(); geaReq.EndpointArn = EndpointArn; GetEndpointAttributesResponse geaRes = client.GetEndpointAttributes(geaReq); updateNeeded = !(geaRes.Attributes["Token"] == token) || !(geaRes.Attributes["Enabled"] == "true"); } catch (NotFoundException) { // We had a stored ARN, but the platform endpoint associated with it // disappeared. Recreate it. createNeeded = true; }

if (createNeeded) { CreateEndpoint(token, applicationArn); }

Console.WriteLine("updateNeeded = " + updateNeeded); if (updateNeeded) { // The platform endpoint is out of sync with the current data; // update the token and enable it. Console.WriteLine("Updating platform endpoint " + endpointArn); Dictionary<String,String> attribs = new Dictionary<String,String>(); attribs["Token"] = token; attribs["Enabled"] = "true"; SetEndpointAttributesRequest saeReq = new SetEndpointAttributesRequest(); saeReq.EndpointArn = EndpointArn; saeReq.Attributes = attribs; client.SetEndpointAttributes(saeReq); } }

private String CreateEndpoint(String token, String applicationArn) { String endpointArn = null;

try { Console.WriteLine("Creating platform endpoint with token " + token); CreatePlatformEndpointRequest cpeReq = new CreatePlatformEndpointRequest(); cpeReq.PlatformApplicationArn = applicationArn;

133

Page 139: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

cpeReq.Token = token; CreatePlatformEndpointResponse cpeRes = client.CreatePlatformEndpoint(cpeReq); endpointArn = cpeRes.EndpointArn; } catch (InvalidParameterException ipe) { String message = ipe.Message; Console.WriteLine("Exception message: " + message); Regex rgx = new Regex(".*Endpoint (arn:aws:sns[^ ]+) already exists with the same [Tt]oken.*", RegexOptions.IgnoreCase); MatchCollection m = rgx.Matches(message); if (m.Count > 0 && m[0].Groups.Count > 1) { // The platform endpoint already exists for this token, but with // additional custom data that createEndpoint doesn't want to overwrite. // Just use the existing platform endpoint. endpointArn = m[0].Groups[1].Value; } else { // Rethrow the exception, the input is actually bad. throw ipe; } } EndpointArn = endpointArn; return endpointArn; }

// Get/Set arn public String EndpointArn { get { return arnStorage; } set { arnStorage = value; } }}

詳細については、「Amazon SNS モバイルプッシュ API の使用 (p. 145)」を参照してください。

トラブルシューティング

古いデバイストークンを使用してプラットフォームエンドポイントの作成を繰り返し呼び出す

特に FCM エンドポイントの場合、アプリケーションが発行した最初のデバイストークンを保存してから、アプリケーションが起動するたびにそのデバイストークンを使用してプラットフォームエンドポイントの作成を呼び出すのが最適に思えるかもしれません。これは、アプリケーションがデバイストークンの状態を管理する必要がなくなり、Amazon SNS がサービストークンを最新の値に自動的に更新するため、適切に思える場合があります。しかし、この解決策には多くの深刻な問題があります。

• Amazon SNS は、期限切れのデバイストークンを新しいデバイストークンに更新するために FCM からのフィードバックを必要とします。FCM は、古いデバイストークンの情報を当分の間保持しますが、無期限には保持しません。FCM が古いデバイストークンと新しいデバイストークンの関連性の認識を失うと、Amazon SNS はプラットフォームエンドポイントに保存されたデバイストークンを適切な値に更新することができなくなります。代わりに、プラットフォームエンドポイントが無効になるだけです。

134

Page 140: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

• プラットフォームアプリケーションには、同じデバイストークンに対応する複数のプラットフォームエンドポイントが含められます。

• Amazon SNS では、同じデバイストークンを使用して作成できるプラットフォームエンドポイントの数に限度が適用されます。最終的に、新しいエンドポイントの作成は無効なパラメーターの例外によって失敗し、"This endpoint is already registered with a different token" というエラーメッセージが表示されます。

無効なデバイストークンに関連付けられたプラットフォームエンドポイントを再度有効にする

モバイルプラットフォーム (APNs や FCM など) が、発行リクエストで使用されたデバイストークンが無効であったことを Amazon SNS に通知すると、Amazon SNS はそのデバイストークンに関連付けられたプラットフォームエンドポイントを無効にします。その場合、Amazon SNS はそのデバイストークンに対するそれ以降の発行を拒否します。プラットフォームエンドポイントを再度に有効にして発行を継続すれば最適と考える可能性がありますが、ほとんどの場合これはうまくいきません。発行されるメッセージは配信されず、プラットフォームエンドポイントはその後まもなく無効になります。

これは、プラットフォームエンドポイントに関連付けられたデバイストークンが間違いなく無効であるためです。プラットフォームエンドポイントは、インストールされているどのアプリケーションにも応答しないため、配信が成功することはありません。次回発行されると、モバイルプラットフォームはデバイストークンが無効であることを Amazon SNS にもう一度通知し、Amazon SNS はプラットフォームエンドポイントをもう一度無効にします。

無効なプラットフォームエンドポイントを再度有効にするには、有効なデバイストークンに関連付けた後 (エンドポイント属性の設定アクションを呼び出して)、有効にする必要があります。その場合のみ、そのプラットフォームエンドポイントへの配信は成功します。デバイストークンを更新しないでプラットフォームエンドポイントを有効にできるのは、そのエンドポイントに関連付けられたデバイストークンが無効であったが、再度有効となった場合のみです。これは、たとえばアプリケーションがアンインストールされて同じモバイルデバイスに再インストールされ、同じデバイストークンを受け取った場合などに発生します。上に示したアプローチではこれが行われます。関連付けられたデバイストークンが使用可能な最新のものであると確認してから、プラットフォームエンドポイントを再度有効にすることのみ確実に行ってください。

モバイルデバイスへのメッセージの直接的な送信モバイルデバイスのアプリケーションを表すエンドポイントに Amazon SNS プッシュ通知メッセージを直接送信できます。

直接的なメッセージを送信するには

1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで [Mobile (モバイル)]、[Push notifications (プッシュ通知)] を選択します。3. [Mobile push notifications (モバイルプッシュ通知)] ページの [Platform applications (プラットフォーム

アプリケーション)] セクションで、アプリケーションの名前 (MyApp など) を選択します。4. [MyApp] ページの [エンドポイント] セクションで、エンドポイントを選択し、[Publish message (メッ

セージの発行)] を選択します。5. [エンドポイントへのメッセージの発行] ページで、モバイルデバイスのアプリケーションに表示され

るメッセージを入力し、[メッセージの発行] を選択します。

Amazon SNS によって、プラットフォーム通知サービスに通知メッセージが送信され、プラットフォーム通知サービスはアプリケーションにメッセージを送信します。

トピックに受信登録したモバイルデバイスへのメッセージの送信Amazon SNS を使用して、トピックに受信登録したモバイルエンドポイントにメッセージを送信することもできます。このコンセプトは、「Amazon Simple Notification Service とは (p. 1)」に説明されているよ

135

Page 141: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

うに、Amazon SQS、HTTP/S、E メール、SMS などその他のエンドポイントタイプをトピックにサブスクライブするのと同じです。その違いは、Amazon SNS は受信登録したモバイルエンドポイントがトピックに送信された通知を受信するために通知サービスを通じて通信を行うことです。

カスタムプラットフォーム固有のペイロードのモバイルデバイスへの送信AWS マネジメントコンソールまたは Amazon SNS API を使用して、プラットフォーム固有のペイロードとともにカスタムメッセージをモバイルデバイスに送信できます。Amazon SNS API を使用する方法については、snsmobilepush.zip の Amazon SNS モバイルプッシュ API の使用 (p. 145) およびSNSMobilePush.java ファイルを参照してください。

JSON 形式のメッセージの送信

プラットフォーム固有のペイロードを送信する場合、データは引用符をエスケープした、JSON 形式のキーと値のペア文字列である必要があります。

次の例では、FCM プラットフォーム用のカスタムメッセージを示します。

{ "GCM":"{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}"}

プラットフォーム固有のメッセージの送信

カスタムデータをキーと値のペアとして送信することに加えて、プラットフォーム固有のキーと値のペアを送信できます。

以下の例では、FCM data パラメータのカスタムデータのキーと値のペアの後に、FCM パラメータtime_to_live および collapse_key を含めています。

{ "GCM":"{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"},\"time_to_live\": 3600,\"collapse_key\":\"deals\"}"}

Amazon SNS でサポートされている各プッシュ通知サービスでサポートされているキーと値のペアのリストについては、以下を参照してください。

• APNs ドキュメントの Payload Key Reference• FCM ドキュメントの Firebase Cloud Messaging の HTTP プロトコル• ADM ドキュメントのメッセージの送信方法

複数プラットフォーム上のアプリケーションへのメッセージ送信

FCM や APNs など、複数プラットフォーム向けのデバイスにインストールされたアプリケーションにメッセージを送信するには、Amazon SNS のトピックにモバイルエンドポイントを受信登録してから、トピックにメッセージを発行します。

以下の例は、APNs、FCM、および ADM で受信登録したモバイルエンドポイントに送信するメッセージを示しています。

{

136

Page 142: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュの使用

"default": "This is the default message which must be present when publishing a message to a topic. The default message will only be used if a message is not present for one of the notification platforms.", "APNS": "{\"aps\":{\"alert\": \"Check out these awesome deals!\",\"url\":\"www.amazon.com\"} }", "GCM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}", "ADM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}" }

アラートまたはバックグラウンド通知としてのメッセージを APNs に送信する

Amazon SNS は、alert または background 通知としてのメッセージを APNs に送信できます (詳細については、APNs ドキュメントの「アプリへのバックグラウンド更新のプッシュ」を参照してください)。

• alert APNs 通知では、ユーザーに通知する方法として、アラートメッセージを表示するか、サウンドを鳴らすか、アプリケーションのアイコンにバッジを追加します。

• background APNs 通知は、ユーザーに通知することなく、ウェイクアップするか、通知の内容に基づいて動作するようにアプリケーションに指示します。

APNs ヘッダーのカスタム値の指定

Amazon SNS Publish API アクション、AWS SDK、または AWS CLI を使用して、AWS.SNS.MOBILE.APNS.PUSH_TYPE 予約済みメッセージ属性 (p. 68)のカスタム値を指定することをお勧めします。次の CLI の例では、指定したトピックの content-available を 1 に設定し、apns-push-type を background に設定します。

aws sns publish \--endpoint-url https://sns.us-east-1.amazonaws.com \--target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-bc89-012d-3e45-6fg7h890123i \--message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \--message-attributes '{ \ "AWS.SNS.MOBILE.APNS.TOPIC":{"DataType":"String","StringValue":"com.amazon.mobile.messaging.myapp"}, \ "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"10"}}', \ "AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"background"} \--message-structure json

ペイロードからの APNs プッシュタイプヘッダーの推論

apns-push-type APNs ヘッダーを設定しないと、JSON 形式の APNs ペイロードに設定されているaps ディクショナリ内の content-available キーに応じて、Amazon SNS によってヘッダーが alertまたは background に設定されます。

Note

apns-push-type ヘッダーは他の値に設定できますが、Amazon SNS が推論できるのは alertヘッダーまたは background ヘッダーのみです。

• apns-push-type は、alert に設定されます。• aps ディクショナリで content-available が 1 に設定されていて、ユーザーの操作をトリガーす

る 1 つ以上のキーが含まれている場合。• aps ディクショナリで content-available が 0 に設定されているか、または content-available キーが存在しない場合。

• content-available キーの値が整数またはブール値でない場合。• apns-push-type は、background に設定されます。

137

Page 143: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージの配信ステータスのアプリケーション属性

• aps ディクショナリに 1 に設定された content-available のみがあり、ユーザー操作をトリガーする他のキーが存在しない場合。

Important

Amazon SNS が APNs の raw 設定オブジェクトをバックグラウンドのみの通知として送信する場合は、content-available を 1 に設定して aps ディクショナリに含める必要があります。カスタムキーを含めることもできますが、ユーザー操作をトリガーするキー (アラート、バッジ、サウンドなど) を aps ディクショナリに含めることはできません。

raw 設定オブジェクトの例を次に示します。

{ "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"\Bar\",\"Foo2\":123}"}

この例の場合、Amazon SNS はメッセージの apns-push-type APNs ヘッダーを background に設定します。apn ディクショナリで content-available キーが 1 に設定されており、ユーザー操作をトリガーする他のキーが含まれていないことが Amazon SNS で検出されると、ヘッダーは background に設定されます。

メッセージの配信ステータスの Amazon SNS アプリケーション属性を使用するAmazon Simple Notification Service (Amazon SNS) では、プッシュ通知メッセージの配信ステータスの記録がサポートされています。アプリケーション属性を設定した後、Amazon SNS からモバイルエンドポイントに送信されたメッセージのログエントリが CloudWatch Logs に送信されます。メッセージの配信ステータスを記録することは、以下のように運用をよりよく把握するために役立ちます。

• プッシュ通知メッセージが Amazon SNS からプッシュ通知サービスに配信されたかどうかがわかります。

• プッシュ通知サービスから Amazon SNS に送信されたレスポンスを特定します。• メッセージのドウェル時間 (発行のタイムスタンプからプッシュ通知サービスへの配信直前までの時間)

を決定します。

メッセージの配信ステータスのアプリケーション属性を設定するには、AWS マネジメントコンソール、AWS Software Development Kit (SDK)、またはクエリ API を使用できます。

トピック• AWS マネジメントコンソール を使用してメッセージの配信ステータスの属性を設定する (p. 138)• Amazon SNS メッセージの配信ステータスの CloudWatch ログの例 (p. 139)• AWS SDK でメッセージの配信ステータスの属性を設定する (p. 140)• プラットフォームのレスポンスコード (p. 140)

AWS マネジメントコンソール を使用してメッセージの配信ステータスの属性を設定する1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[アプリケーション] を選択し、CloudWatch Logs を受信するエンドポイン

トを含むアプリケーションを選択します。3. [Application Actions (アプリケーションアクション)]、[配信ステータス] の順に選択します。

138

Page 144: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージの配信ステータスのアプリケーション属性

4. [配信ステータス] ダイアログボックスで、[IAM ロールの作成] を選択します。

IAM コンソールにリダイレクトされます。5. [許可] を選択して、お客様に代わって CloudWatch Logs を使用する書き込みアクセス許可を Amazon

SNS に付与します。6. ここで、[Delivery Status] ダイアログボックスに戻り、[Percentage of Success to Sample (0-100)]

フィールドに、CloudWatch Logs を受信するために送信される成功したメッセージの割合を数字で入力します。

Note

メッセージの配信ステータスのアプリケーション属性を設定した後は、メッセージの配信に失敗すると、必ず CloudWatch Logs が生成されます。

7. 最後に、[設定の保存] を選択します。これで、メッセージの配信ステータスを含む CloudWatch Logsを参照して解析できます。CloudWatch の使用方法の詳細については、「CloudWatch のドキュメント」を参照してください。

Amazon SNS メッセージの配信ステータスの CloudWatch ログの例アプリケーションエンドポイントのメッセージの配信ステータスの属性を設定した後は、CloudWatchLogs が生成されます。以下は、JSON 形式のログの例です。

SUCCESS

{ "status": "SUCCESS", "notification": { "timestamp": "2015-01-26 23:07:39.54", "messageId": "9655abe4-6ed6-5734-89f7-e6a6a42de02a" }, "delivery": { "statusCode": 200, "dwellTimeMs": 65, "token": "Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw", "attempts": 1, "providerResponse": "{\"multicast_id\":5138139752481671853,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1422313659698010%d6ba8edff9fd7ecd\"}]}", "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/FCM/FCMPushApp/c23e42de-3699-3639-84dd-65f84474629d" }}

FAILURE

{ "status": "FAILURE", "notification": { "timestamp": "2015-01-26 23:29:35.678", "messageId": "c3ad79b0-8996-550a-8bfa-24f05989898f" }, "delivery": { "statusCode": 8, "dwellTimeMs": 1451, "token": "examp1e29z6j5c4df46f80189c4c83fjcgf7f6257e98542d2jt3395kj73", "attempts": 1,

139

Page 145: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージの配信ステータスのアプリケーション属性

"providerResponse": "NotificationErrorResponse(command=8, status=InvalidToken, id=1, cause=null)", "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/APNS_SANDBOX/APNSPushApp/986cb8a1-4f6b-34b1-9a1b-d9e9cb553944" }}

プッシュ通知サービスのレスポンスコードの一覧は、「プラットフォームのレスポンスコード (p. 140)」を参照してください。

AWS SDK でメッセージの配信ステータスの属性を設定するAWS SDK には、Amazon SNS でメッセージの配信ステータスの属性を使用するための API がいくつかの言語で用意されています。

次の Java の例は、SetPlatformApplicationAttributes API を使用して、プッシュ通知メッセージの配信ステータスのアプリケーション属性を設定する方法を示しています。メッセージの配信ステータスには、SuccessFeedbackRoleArn、FailureFeedbackRoleArn、および SuccessFeedbackSampleRate の属性を使用できます。SuccessFeedbackRoleArn および FailureFeedbackRoleArn 属性は、お客様に代わって CloudWatch Logs を使用する書き込みアクセス許可を Amazon SNS に付与するために使用します。SuccessFeedbackSampleRate属性は、成功した配信メッセージのサンプルレートの割合(0-100)を指定するためのものです。FailureFeedbackRoleArn 属性を設定した後は、メッセージの配信に失敗すると、必ずCloudWatch Logs が生成されます。

SetPlatformApplicationAttributesRequest setPlatformApplicationAttributesRequest = new SetPlatformApplicationAttributesRequest();Map<String, String> attributes = new HashMap<>();attributes.put("SuccessFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");attributes.put("FailureFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");attributes.put("SuccessFeedbackSampleRate", "5");setPlatformApplicationAttributesRequest.withAttributes(attributes);setPlatformApplicationAttributesRequest.setPlatformApplicationArn("arn:aws:sns:us-west-2:111122223333:app/FCM/FCMPushApp");sns.setPlatformApplicationAttributes(setPlatformApplicationAttributesRequest);

SDK for Java の詳細については、「AWS SDK for Java の使用開始」を参照してください。

プラットフォームのレスポンスコード以下は、プッシュ通知サービスのレスポンスコードへのリンクの一覧です。

プッシュ通知サービス リスポンスコード

Amazon Device Messaging (ADM) ADM ドキュメントの「レスポンス形式」を参照してください。

Apple Push Notification Service (APNs) ローカルおよびリモート通知プログラミングガイドで「APN との通信」の「APN からの HTTP/2 レスポンス」を参照してください。

Firebase Cloud Messaging (FCM) Firebase Cloud Messaging ドキュメントの「Downstream Message Error Response Codes」を参照してください。

Windows Phone 用 Microsoft プッシュ通知サービス (MPNS)

Windows 8 開発ドキュメントの「Push NotificationService Response Codes for Windows Phone 8」を参照してください。

140

Page 146: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアプリケーションイベント通知

プッシュ通知サービス リスポンスコード

Windows プッシュ通知サービス (WNS) Windows 8 開発ドキュメントで「Push NotificationService Request and Response Headers (WindowsRuntime Apps)」の「Response codes」を参照してください。

アプリケーションイベント通知Amazon SNS は、特定のアプリケーションイベントが発生する際のトリガー通知をサポートします。その場合、そのイベントでプログラムによるいくつかのアクションを実行することができます。アプリケーションには、Apple Push Notification Service (APNs)、Firebase クラウドメッセージング(FCM)、Windows プッシュ通知サービス (WNS) などのプッシュ通知サービスのサポートが含まれている必要があります。アプリケーションイベント通知は、Amazon SNS コンソール、AWS CLI、または AWSSDK を使用して設定します。

トピック• 使用可能なアプリケーションイベント (p. 141)• モバイルプッシュ通知を送信する (p. 141)

使用可能なアプリケーションイベントアプリケーションイベント通知は、個々のプラットフォームエンドポイントがいつ作成、削除、更新、配信エラーとなったかを追跡します。アプリケーションイベントの属性名は次のとおりです。

属性名 通知トリガー

EventEndpointCreated 新しいエンドポイントがアプリケーションに追加されます。

EventEndpointDeleted アプリケーションに関連付けられたすべてのプラットフォームエンドポイントが削除されます。

EventEndpointUpdated アプリケーションに関連付けられたプラットフォームエンドポイントのすべての属性が変更されます。

EventDeliveryFailure アプリケーションに関連付けられた任意のプラットフォームエンドポイントへの配信は、永続的にエラーとなります。

Note

プラットフォームアプリケーション側で配信エラーを追跡するには、アプリケーションのメッセージ配信ステータスイベントにサブスクライブします。詳細については、「メッセージの配信ステータスの Amazon SNS アプリケーション属性を使用する」を参照してください。

アプリケーションには任意の属性を関連付けることができ、これでそのイベント通知を受け取れるようになります。

モバイルプッシュ通知を送信するアプリケーションイベント通知を送信するには、各タイプのイベントの通知を受信できるよう、トピックを指定します。Amazon SNS が通知を送信する場合、トピックは、プログラムによるアクションを取るエンドポイントにそれらをルーティングすることができます。

141

Page 147: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアプリケーションイベント通知

Important

大容量アプリケーションは多数のアプリケーションイベント通知 (たとえば、数万回) を作成するので、E メールアドレス、電話番号、モバイルアプリケーションなど、人間が使用するためのエンドポイントに負荷をかけます。アプリケーションイベント通知をトピックに送信する場合は、以下のガイドラインを検討してください。

• 通知を受信する各トピックは、HTTP または HTTPS エンドポイント、Amazon SQSキュー、AWS Lambda 関数などのプログラム的なエンドポイントのサブスクリプションのみが含まれます。

• 通知によってトリガーされる処理量を減らすために、各トピックのサブスクリプションを少数(たとえば、5 以下) に制限します。

Amazon SNS コンソール、AWS Command Line Interface (AWS CLI)、または AWS SDK を使用して、アプリケーションイベント通知を送信できます。

AWS マネジメントコンソール

1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで [Mobile (モバイル)]、[Push notifications (プッシュ通知)] を選択します。3. [Mobile push notifications (モバイルプッシュ通知)] ページの [Platform applications (プラットフォーム

アプリケーション)] セクションでアプリケーションを選択したら、[Edit (編集)] を選択します。4. [Event notifications (イベント通知)] セクションを展開します。5. [アクション]、[イベントの設定] を選択します。6. つぎのイベントで使用される ARN を入力します。

• 作成されたエンドポイント• 削除されたエンドポイント• 更新されたエンドポイント• 配信失敗

7. [Save changes] を選択します。

AWS CLI

set-platform-application-attributes コマンドを実行します。

次の例では、4 つのアプリケーションすべてに対して同じ Amazon SNS トピックを設定します。

aws sns set-platform-application-attributes--platform-application-arn arn:aws:sns:us-east-1:12345EXAMPLE:app/FCM/MyFCMPlatformApplication--attributes EventEndpointCreated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",EventEndpointDeleted="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",EventEndpointUpdated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",EventDeliveryFailure="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents"

AWS SDK

ターゲットのプログラミング言語またはプラットフォームに応じて、次のいずれかの API を呼び出します。

142

Page 148: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS TTL

プログラミング言語またはプラットフォーム

API リファレンスリンク

Android setPlatformApplicationAttributes

iOS AWSSNSSetPlatformApplicationAttributesInput

Java setPlatformApplicationAttributes

JavaScript setPlatformApplicationAttributes

.NET SetPlatformApplicationAttributes

PHP SetPlatformApplicationAttributes

Python (boto) set_platform_application_attributes

Ruby set_platform_application_attributes

Unity SetPlatformApplicationAttributesAsync

Windows PowerShell Set-SNSPlatformApplicationAttributes

モバイルプッシュ通知サービスの Amazon SNS 有効期限 (TTL) メッセージ属性の使用Amazon Simple Notification Service(Amazon SNS)では、モバイルプッシュ通知サービスの有効期限(TTL)メッセージ属性の設定がサポートされています。この属性は、モバイルプッシュ通知サービス(Amazon Device Messaging (ADM)、Firebase クラウドメッセージング (FCM) など) の Amazon SNS メッセージ本文内に TTL を設定する既存の機能に追加されたものです。

TTL メッセージ属性は、メッセージの有効期限メタデータを指定するために使用します。この属性を使用して、Apple Push Notification Service (APNs) や FCM などのプッシュ通知サービスによってエンドポイントにメッセージが配信される時間を指定できます。何らかの理由(モバイルデバイスがオフになっているなど)で、指定した TTL 内にメッセージが配信されなかった場合、そのメッセージは破棄され、以降その配信は試みられません。メッセージ属性に TTL を指定するには、AWS マネジメントコンソール、AWSSoftware Development Kit (SDK)、またはクエリ API を使用します。

トピック• プッシュ通知サービスの TTL メッセージ属性 (p. 143)• TTL を決定するための優先順位 (p. 144)• AWS マネジメントコンソールを使用して TTL を指定する (p. 144)• AWS SDK による TTL の指定 (p. 145)

プッシュ通知サービスの TTL メッセージ属性以下に示しているのは、AWS SDK またはクエリ API の使用時に設定できるプッシュ通知サービスの TTLメッセージ属性の一覧です。

プッシュ通知サービス TTL メッセージ属性

Amazon Device Messaging (ADM) AWS.SNS.MOBILE.ADM.TTL

143

Page 149: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS TTL

プッシュ通知サービス TTL メッセージ属性

Apple Push Notification Service (APNs) AWS.SNS.MOBILE.APNS.TTL

Apple Push Notification ServiceSandbox(APNs_SANDBOX)

AWS.SNS.MOBILE.APNS_SANDBOX.TTL

Baidu Cloud Push (Baidu) AWS.SNS.MOBILE.BAIDU.TTL

Firebase クラウドメッセージング (FCM) AWS.SNS.MOBILE.FCM.TTL

Windows プッシュ通知サービス (WNS) AWS.SNS.MOBILE.WNS.TTL

各プッシュ通知サービスはそれぞれ個別に TTL を処理します。Amazon SNS は、すべてのプッシュ通知サービスにまたがって TTL の要約ビューが表示されるため、TTL の指定がより簡単になります。AWSマネジメントコンソール を使用して TTL(秒単位)を指定するとき、TTL 値を一度入力するだけで、Amazon SNS はメッセージの発行時に、選択されたプッシュ通知サービスごとに TTL を計算します。

TTL は発行時間を基準にします。特定のプッシュ通知サービスにプッシュ通知メッセージを発行する前に、Amazon SNS はプッシュ通知のドウェル時間(発行のタイムスタンプからプッシュ通知サービスへの発行直前までの時間)を計算し、残りの TTL をそのプッシュ通知サービスに渡します。TTL がドウェル時間よりも短い場合、Amazon SNS はプッシュ通知メッセージの発行を試みません。

プッシュ通知メッセージの TTL を指定する場合、TTL 値は正の整数でなければなりません。ただし、APNs や FCM などのプッシュ通知サービスに対して 0 の値に特定の意味がある場合は除きます。TTL値を 0 に設定した場合、プッシュ通知サービスに対して 0 に特定の意味がないと、Amazon SNS はメッセージを破棄します。APNs を使用する場合に TTL パラメータを 0 に設定する方法の詳細については、Binary Provider API ドキュメントの「Table A-3 Item identifiers for remote notifications」を参照してください。

TTL を決定するための優先順位Amazon SNS がプッシュ通知メッセージの TTL を決定するための優先順位は以下の順序に基づきます。最も小さい番号が最も高い優先順位を表しています。

1. メッセージ属性の TTL2. メッセージ本文の TTL3. プッシュ通知サービスのデフォルト TTL (サービスごとに異なる)4. Amazon SNS のデフォルト TTL (4 週間)

同じメッセージに対して (メッセージ属性とメッセージ本文で) 異なる TTL 値を設定した場合、AmazonSNS はメッセージ属性の TTL に一致するようにメッセージ本文の TTL を変更します。

AWS マネジメントコンソールを使用して TTL を指定する1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで [Mobile (モバイル)]、[Push notifications (プッシュ通知)] を選択します。3. [Mobile push notifications (モバイルプッシュ通知)] ページの [Platform applications (プラットフォーム

アプリケーション)] セクションで、アプリケーションを選択します。4. [MyApplication] ページの [Endpoints (エンドポイント)] セクションでエンドポイントを選択した

ら、[Publish message (メッセージの発行)] を選択します。5. [Message details (メッセージの詳細)] セクションで、TTL (プッシュ通知サービスがエンドポイントに

配信される秒数) を入力します。6. [メッセージの発行] を選択します。

144

Page 150: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAmazon SNS モバイルプッシュ API

AWS SDK による TTL の指定AWS SDK には、Amazon SNS で TTL を使用するための API がいくつかの言語で用意されています。

SDK for Java の詳細については、「AWS SDK for Java の使用開始」を参照してください。

以下の Java の例で示しているのは、TTL メッセージ属性を設定し、Baidu Cloud Push に登録されたエンドポイントにメッセージを発行する方法です。

Map<String, MessageAttributeValue> messageAttributes = new HashMap<String, MessageAttributeValue>();

// Insert your desired value (in seconds) of TTL here. For example, a TTL of 1 day would be 86,400 seconds. messageAttributes.put("AWS.SNS.MOBILE.BAIDU.TTL", new MessageAttributeValue().withDataType("String").withStringValue("86400"));

PublishRequest publishRequest = new PublishRequest();publishRequest.setMessageAttributes(messageAttributes);String message = "{\"title\":\"Test_Title\",\"description\":\"Test_Description\"}";publishRequest.setMessage(message);publishRequest.setMessageStructure("json");publishRequest.setTargetArn("arn:aws:sns:us-east-2:999999999999:endpoint/BAIDU/TestApp/318fc7b3-bc53-3d63-ac42-e359468ac730");PublishResult publishResult = snsClient.publish(publishRequest);

Amazon SNS でのメッセージ属性の使用の詳細については、「Amazon SNS メッセージ属性 (p. 67)」を参照してください。

Amazon SNS モバイルプッシュ API の使用Amazon SNS モバイルプッシュ API を使用するには、まず、プッシュ通知サービス (Apple PushNotification Service (APNs)、Firebase クラウドメッセージング (FCM) など) の前提条件を満たす必要があります。前提条件の詳細については、「Amazon SNS ユーザ通知の前提条件 (p. 124)」を参照してください。

API を使用してモバイルアプリケーションおよびデバイスにプッシュ通知メッセージを送信するには、まず、CreatePlatformApplication アクションを使用する必要があります。このアクションは、PlatformApplicationArn 属性を返します。この PlatformApplicationArn 属性は、CreatePlatformEndpoint によって使用され、EndpointArn 属性が返されます。このEndpointArn 属性と Publish アクションを使用して、モバイルアプリやデバイスに通知メッセージを送信することができます。また、EndpointArn 属性と Subscribe アクションを使って、トピックへのサブスクリプションを行うこともできます。詳細については、「ユーザー通知プロセスの概要 (p. 125)」を参照してください。

Amazon SNS モバイルプッシュ API は次のとおりです。

CreatePlatformApplication

デバイスやモバイルアプリケーションを登録できる、サポートされているプッシュ通知サービス (APNs、FCM など) のいずれかのプラットフォームアプリケーションオブジェクトを作成します。PlatformApplicationArn 属性を返します。この属性は、CreatePlatformEndpoint アクションで使用されます。

CreatePlatformEndpoint

サポートされているプッシュ通知サービスのいずれかでデバイスおよびモバイルアプリのエンドポイントを作成します。CreatePlatformEndpoint は、CreatePlatformApplication アクション

145

Page 151: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAPI エラー

から返される PlatformApplicationArn 属性を使用します。CreatePlatformEndpoint を使用したときに返される EndpointArn 属性は、モバイルアプリケーションとデバイスに通知メッセージを送信するために Publish アクションで使用されます。

CreateTopic

メッセージが発行されるトピックを作成します。DeleteEndpoint

サポートされているプッシュ通知サービスのいずれかでデバイスおよびモバイルアプリケーションのエンドポイントを削除します。

DeletePlatformApplication

プラットフォームアプリケーションオブジェクトを削除します。DeleteTopic

トピックとすべてのサブスクリプションを削除します。GetEndpointAttributes

デバイスおよびモバイルアプリケーションのエンドポイント属性を取得します。GetPlatformApplicationAttributes

プラットフォームアプリケーションオブジェクトの属性を取得します。ListEndpointsByPlatformApplication

サポートされているプッシュ通知サービスでのデバイスおよびモバイルアプリケーションのエンドポイントとエンドポイント属性を一覧表示します。

ListPlatformApplications

サポートされているプッシュ通知サービス用のプラットフォームアプリケーションオブジェクトを一覧表示します。

Publish

トピックのサブスクライブされたエンドポイントすべてに通知メッセージを送信します。SetEndpointAttributes

デバイスおよびモバイルアプリケーションのエンドポイントの属性を設定します。SetPlatformApplicationAttributes

プラットフォームアプリケーションオブジェクトの属性を設定します。Subscribe

エンドポイントに確認メッセージを送信して、エンドポイントのサブスクライブに備えます。実際にサブスクリプションを作成するには、エンドポイントの所有者は確認メッセージからトークンと共にConfirmSubscription アクションを呼び出す必要があります。

Unsubscribe

サブスクリプションを削除します。

Amazon SNS モバイルプッシュの API エラーAmazon SNS API から返されるモバイルプッシュに関するエラーを、次の表に示します。モバイルプッシュ用 Amazon SNS API の詳細については、「Amazon SNS モバイルプッシュ API の使用 (p. 145)」を参照してください。

146

Page 152: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAPI エラー

エラー 説明 HTTPS ステータスコード

このエラーを返すアクション

Application Name is nullstring

必須のアプリケーション名が null に設定されています。

400 CreatePlatformApplication

Platform Name is nullstring

必須のプラットフォーム名が null に設定されています。

400 CreatePlatformApplication

Platform Name is invalid プラットフォーム名に無効な値または範囲外の値が入力されました。

400 CreatePlatformApplication

APNs — Principal is nota valid certificate

APNs プリンシパル(SSL 証明書)に無効な証明書が指定されました。詳細については、『Amazon SimpleNotification ServiceAPI Reference』の「CreatePlatformApplication」を参照してください。

400 CreatePlatformApplication

APNs — Principal isa valid cert but not ina .pem format

APNs プリンシパル(SSL 証明書)に、.pem 形式ではない有効な証明書が指定されました。

400 CreatePlatformApplication

APNs — Prinicipal is anexpired certificate

APNs プリンシパル(SSL 証明書)に失効した証明書が指定されました。

400 CreatePlatformApplication

APNs — Principal isnot an Apple issuedcertificate

APNs プリンシパル(SSL 証明書)にApple によって発行されたものではない証明書が指定されました。

400 CreatePlatformApplication

APNs — Principal is notprovided

APNs プリンシパル(SSL 証明書)が指定されませんでした。

400 CreatePlatformApplication

APNs — Credential isnot provided

APNs 認証情報(プライベートキー)が指定されませんでした。詳細については、『Amazon SimpleNotification ServiceAPI Reference』の「CreatePlatformApplication」を参照してください。

400 CreatePlatformApplication

147

Page 153: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAPI エラー

エラー 説明 HTTPS ステータスコード

このエラーを返すアクション

APNs — Credentialare not in a valid .pemformat

APNs 認証情報(プライベートキー)が有効な .pem 形式ではありません。

400 CreatePlatformApplication

FCM — serverAPIKey isnot provided

FCM 認証情報 (APIキー) が指定されませんでした。詳細については、『Amazon SimpleNotification ServiceAPI Reference』の「CreatePlatformApplication」を参照してください。

400 CreatePlatformApplication

FCM — serverAPIKey isempty

FCM 認証情報 (APIキー) が空です。

400 CreatePlatformApplication

FCM — serverAPIKey isa null string

FCM 認証情報 (APIキー) が null です。

400 CreatePlatformApplication

FCM — serverAPIKey isinvalid

FCM 認証情報 (APIキー) が無効です。

400 CreatePlatformApplication

ADM — clientsecret isnot provided

必須のクライアントシークレットが提供されていません。

400 CreatePlatformApplication

ADM — clientsecret is anull string

クライアントシークレットの必須文字列がnull です。

400 CreatePlatformApplication

ADM — client_secret isempty string

クライアントシークレットの必須文字列が空です。

400 CreatePlatformApplication

ADM — client_secret isnot valid

クライアントシークレットの必須文字列が無効です。

400 CreatePlatformApplication

ADM — client_id isempty string

クライアント ID の必須文字列が空です。

400 CreatePlatformApplication

ADM — clientId is notprovided

クライアント ID の必須文字列が提供されていません。

400 CreatePlatformApplication

ADM — clientid is a nullstring

クライアント ID の必須文字列が null です。

400 CreatePlatformApplication

ADM — client_id is notvalid

クライアント ID の必須文字列が無効です。

400 CreatePlatformApplication

EventEndpointCreatedhas invalid ARN format

EventEndpointCreatedが無効な ARN 形式です。

400 CreatePlatformApplication

148

Page 154: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAPI エラー

エラー 説明 HTTPS ステータスコード

このエラーを返すアクション

EventEndpointDeletedhas invalid ARN format

EventEndpointDeletedが無効な ARN 形式です。

400 CreatePlatformApplication

EventEndpointUpdatedhas invalid ARN format

EventEndpointUpdatedが無効な ARN 形式です。

400 CreatePlatformApplication

EventDeliveryAttemptFailurehas invalid ARN format

EventDeliveryAttemptFailureが無効な ARN 形式です。

400 CreatePlatformApplication

EventDeliveryFailurehas invalid ARN format

EventDeliveryFailure が無効な ARN 形式です。

400 CreatePlatformApplication

EventEndpointCreatedis not an existing Topic

EventEndpointCreatedは既存のトピックではありません。

400 CreatePlatformApplication

EventEndpointDeleted isnot an existing Topic

EventEndpointDeletedは既存のトピックではありません。

400 CreatePlatformApplication

EventEndpointUpdatedis not an existing Topic

EventEndpointUpdatedは既存のトピックではありません。

400 CreatePlatformApplication

EventDeliveryAttemptFailureis not an existing Topic

EventDeliveryAttemptFailureは既存のトピックではありません。

400 CreatePlatformApplication

EventDeliveryFailure isnot an existing Topic

EventDeliveryFailure は既存のトピックではありません。

400 CreatePlatformApplication

Platform ARN is invalid プラットフォーム ARNが無効です。

400 SetPlatformAttributes

Platform ARN is validbut does not belong tothe user

プラットフォーム ARNは有効ですが、このユーザーに属していません。

400 SetPlatformAttributes

APNs — Principal is nota valid certificate

APNs プリンシパル(SSL 証明書)に無効な証明書が指定されました。詳細については、『Amazon SimpleNotification ServiceAPI Reference』の「CreatePlatformApplication」を参照してください。

400 SetPlatformAttributes

149

Page 155: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAPI エラー

エラー 説明 HTTPS ステータスコード

このエラーを返すアクション

APNs — Principal isa valid cert but not ina .pem format

APNs プリンシパル(SSL 証明書)に、.pem 形式ではない有効な証明書が指定されました。

400 SetPlatformAttributes

APNs — Prinicipal is anexpired certificate

APNs プリンシパル(SSL 証明書)に失効した証明書が指定されました。

400 SetPlatformAttributes

APNs — Principal isnot an Apple issuedcertificate

APNs プリンシパル(SSL 証明書)にApple によって発行されたものではない証明書が指定されました。

400 SetPlatformAttributes

APNs — Principal is notprovided

APNs プリンシパル(SSL 証明書)が指定されませんでした。

400 SetPlatformAttributes

APNs — Credential isnot provided

APNs 認証情報(プライベートキー)が指定されませんでした。詳細については、『Amazon SimpleNotification ServiceAPI Reference』の「CreatePlatformApplication」を参照してください。

400 SetPlatformAttributes

APNs — Credentialare not in a valid .pemformat

APNs 認証情報(プライベートキー)が有効な .pem 形式ではありません。

400 SetPlatformAttributes

FCM — serverAPIKey isnot provided

FCM 認証情報 (APIキー) が指定されませんでした。詳細については、『Amazon SimpleNotification ServiceAPI Reference』の「CreatePlatformApplication」を参照してください。

400 SetPlatformAttributes

FCM — serverAPIKey isa null string

FCM 認証情報 (APIキー) が null です。

400 SetPlatformAttributes

ADM — clientId is notprovided

クライアント ID の必須文字列が提供されていません。

400 SetPlatformAttributes

ADM — clientid is a nullstring

クライアント ID の必須文字列が null です。

400 SetPlatformAttributes

150

Page 156: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAPI エラー

エラー 説明 HTTPS ステータスコード

このエラーを返すアクション

ADM — clientsecret isnot provided

必須のクライアントシークレットが提供されていません。

400 SetPlatformAttributes

ADM — clientsecret is anull string

クライアントシークレットの必須文字列がnull です。

400 SetPlatformAttributes

EventEndpointUpdatedhas invalid ARN format

EventEndpointUpdatedが無効な ARN 形式です。

400 SetPlatformAttributes

EventEndpointDeletedhas invalid ARN format

EventEndpointDeletedが無効な ARN 形式です。

400 SetPlatformAttributes

EventEndpointUpdatedhas invalid ARN format

EventEndpointUpdatedが無効な ARN 形式です。

400 SetPlatformAttributes

EventDeliveryAttemptFailurehas invalid ARN format

EventDeliveryAttemptFailureが無効な ARN 形式です。

400 SetPlatformAttributes

EventDeliveryFailurehas invalid ARN format

EventDeliveryFailure が無効な ARN 形式です。

400 SetPlatformAttributes

EventEndpointCreatedis not an existing Topic

EventEndpointCreatedは既存のトピックではありません。

400 SetPlatformAttributes

EventEndpointDeleted isnot an existing Topic

EventEndpointDeletedは既存のトピックではありません。

400 SetPlatformAttributes

EventEndpointUpdatedis not an existing Topic

EventEndpointUpdatedは既存のトピックではありません。

400 SetPlatformAttributes

EventDeliveryAttemptFailureis not an existing Topic

EventDeliveryAttemptFailureは既存のトピックではありません。

400 SetPlatformAttributes

EventDeliveryFailure isnot an existing Topic

EventDeliveryFailure は既存のトピックではありません。

400 SetPlatformAttributes

Platform ARN is invalid プラットフォーム ARNが無効です。

400 GetPlatformApplicationAttributes

Platform ARN is validbut does not belong tothe user

プラットフォーム ARNは有効ですが、このユーザーに属していません。

403 GetPlatformApplicationAttributes

Token specified isinvalid

指定されたトークンが無効です。

400 ListPlatformApplications

151

Page 157: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAPI エラー

エラー 説明 HTTPS ステータスコード

このエラーを返すアクション

Platform ARN is invalid プラットフォーム ARNが無効です。

400 ListEndpointsByPlatformApplication

Platform ARN is validbut does not belong tothe user

プラットフォーム ARNは有効ですが、このユーザーに属していません。

404 ListEndpointsByPlatformApplication

Token specified isinvalid

指定されたトークンが無効です。

400 ListEndpointsByPlatformApplication

Platform ARN is invalid プラットフォーム ARNが無効です。

400 DeletePlatformApplication

Platform ARN is validbut does not belong tothe user

プラットフォーム ARNは有効ですが、このユーザーに属していません。

403 DeletePlatformApplication

Platform ARN is invalid プラットフォーム ARNが無効です。

400 CreatePlatformEndpoint

Platform ARN is validbut does not belong tothe user

プラットフォーム ARNは有効ですが、このユーザーに属していません。

404 CreatePlatformEndpoint

Token is not specified トークンが指定されていません。

400 CreatePlatformEndpoint

Token is not of correctlength

トークンの長さが正しくありません。

400 CreatePlatformEndpoint

Customer User data istoo large

顧客のユーザーデータは UTF-8 エンコードで2048 バイトを超えることはできません。

400 CreatePlatformEndpoint

Endpoint ARN is invalid エンドポイント ARN が無効です。

400 DeleteEndpoint

Endpoint ARN is validbut does not belong tothe user

エンドポイント ARN は有効ですが、このユーザーに属していません。

403 DeleteEndpoint

Endpoint ARN is invalid エンドポイント ARN が無効です。

400 SetEndpointAttributes

Endpoint ARN is validbut does not belong tothe user

エンドポイント ARN は有効ですが、このユーザーに属していません。

403 SetEndpointAttributes

Token is not specified トークンが指定されていません。

400 SetEndpointAttributes

152

Page 158: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド受信者として携帯電話番号を使用する場合 (SMS 送信)

エラー 説明 HTTPS ステータスコード

このエラーを返すアクション

Token is not of correctlength

トークンの長さが正しくありません。

400 SetEndpointAttributes

Customer User data istoo large

顧客のユーザーデータは UTF-8 エンコードで2048 バイトを超えることはできません。

400 SetEndpointAttributes

Endpoint ARN is invalid エンドポイント ARN が無効です。

400 GetEndpointAttributes

Endpoint ARN is validbut does not belong tothe user

エンドポイント ARN は有効ですが、このユーザーに属していません。

403 GetEndpointAttributes

Target ARN is invalid ターゲット ARN が無効です。

400 Publish

Target ARN is valid butdoes not belong to theuser

ターゲット ARN は有効ですが、このユーザーに属していません。

403 Publish

Message format isinvalid

メッセージの形式が無効です。

400 Publish

Message size is largerthan supported byprotocol/end-service

メッセージサイズがプロトコル/エンドサービスでサポートされているより大きくなっています。

400 Publish

受信者が携帯電話番号の場合のユーザー通知にAmazon SNS を使用する (SMS 送信)

Amazon SNS を使用して、SMS 対応デバイスにテキストメッセージ (SMS メッセージ) を送信できます。電話番号をトピックにサブスクライブし、トピックへメッセージを送信することにより、電話番号へメッセージを直接送信 (p. 157)または、一度に複数の電話番号にメッセージを送信 (p. 161)できます。

AWS アカウントに対する SMS プリファレンスを設定 (p. 154)して、目的のユースケースと予算に対して SMS 配信をカスタマイズできます。たとえば、ユーザーは、メッセージがコストに対して、または確実な配信に対して最適化されるかどうかを選択できます。また、個別のメッセージ配信の使用量の限度、および AWS アカウントの毎月の使用料金の限度を指定できます。

現地の法律および規制により義務付けられている場合 (米国およびカナダなど)、SMS の受信者はオプトアウト (p. 172)ができます。これは、ユーザーの AWS アカウントからの SMS メッセージの受信の停止を選択することを意味します。受信者がオプトアウトした後、ユーザーは、制限付きで、再度電話番号をオプトインし、メッセージの送信を再開できます。

Amazon SNS は、複数のリージョンで SMS メッセージングをサポートしているので、ユーザーは、200以上の国とリージョンにメッセージを送信できます。詳細については、「サポートされているリージョンおよび国 (p. 177)」を参照してください。

153

Page 159: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドプリファレンスの設定

トピック• SMS メッセージプリファレンスの設定 (p. 154)• SMS メッセージの送信 (p. 157)• 複数の電話番号に SMS メッセージを送信する (p. 161)• SMS のアクティビティのモニタリング (p. 167)• 電話番号および SMS サブスクリプションの管理 (p. 172)• SMS メッセージングの専有ショートコードを予約する (p. 176)• サポートされているリージョンおよび国 (p. 177)

SMS メッセージプリファレンスの設定Amazon SNS を使用して、配信の最適化の方法 (コストに対してか、確実な配信に対してか)、毎月の使用量の上限、メッセージ配信がログに記録される方法、SMS の毎日の使用状況レポートをサブスクライブするかどうかなど、SMS メッセージのプリファレンスを指定します。

これらの設定は、アカウントから送信するすべての SMS メッセージに対して有効になりますが、個々のメッセージの送信時に上書きすることができます。詳細については、「SMS メッセージの送信 (p. 157)」を参照してください。

トピック• AWS マネジメントコンソール を使用した SMS メッセージプリファレンスの設定 (p. 154)• プリファレンスの設定 (AWS SDK) (p. 155)

AWS マネジメントコンソール を使用した SMS メッセージプリファレンスの設定1. Amazon SNS コンソールにサインインします。2. SMS メッセージングをサポートしているリージョン (p. 177)を選択します。3. ナビゲーションパネルで、[Mobile (モバイル)]、[Text messaging (SMS) (テキストメッセージ (SMS))]

を選択します。4. [Mobile text messaging (SMS) (モバイルテキストメッセージ (SMS))] ページの [Text messaging

preferences (テキストメッセージプリファレンス)] セクションで、[Edit (編集)] を選択します。5. [Edit text messaging preferences (テキストメッセージプリファレンスの編集)] ページの [Details (詳

細)] セクションで、以下の操作を実行します。

a. [Default message type (デフォルトメッセージタイプ)] で、次のいずれかを選択します。

• [Promotional (プロモーション)] (デフォルト) – 重要度が低いメッセージ (広告など)。AmazonSNS はメッセージの配信を最適化してコストを最小に抑えます。

• [トランザクション] – 顧客のトランザクションをサポートする重要なメッセージ (たとえば、多要素認証のためのワンタイムパスコードなど)。Amazon SNS によってメッセージの配信が最適化され、最高の信頼性が実現されます。

プロモーションおよびトランザクションメッセージの料金表の詳細については、「グローバルSMS 料金表」を参照してください。

b. [Account spend limit (アカウントの使用料制限)] に、各暦月で SMS メッセージに使用する額(USD) を入力します。

154

Page 160: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドプリファレンスの設定

Important

• デフォルトでは、使用限度は 1.00 USD に設定されます。サービス限度を引き上げるには、リクエストを送信します。

• コンソールに設定した量がサービス限度を超える場合、Amazon SNS は SMS メッセージの発行を停止します。

• Amazon SNS は分散システムであるため、使用限度を超えると数分以内に SMS メッセージの送信を停止します。その間に SMS メッセージを送信し続けると、限度を超えるコストが発生する可能性があります。

6. (オプション) [Default sender ID (デフォルトの送信者 ID)] にカスタム ID (企業名など) を入力します。これは、受信デバイスに送信者として表示されます。

Note

送信者 ID のサポートについては、国によって異なります。7. (オプション) [Amazon S3 bucket name for usage reports (使用状況レポートの Amazon S3 バケット

名)] の名前を入力します。

Note

S3 バケットポリシーによって Amazon SNS への書き込みアクセスが付与される必要があります。

8. [Save changes] を選択します。

プリファレンスの設定 (AWS SDK)AWS SDK のいずれかを使用して SMS プリファレンスを設定するには、Amazon SNS API のSetSMSAttributes リクエストに対応する SDK のアクションを使用します。このリクエストによって、月ごとの使用限度およびデフォルトの SMS 型 (プロモーションまたはトランザクション) などの、異なるSMS の属性に値を割り当てます。すべての SMS 属性については、『Amazon Simple Notification ServiceAPI Reference』の「SetSMSAttributes」を参照してください。

以下の例では、AWS SDK で提供される Amazon SNS クライアントを使用して SMS 設定を定義する方法について説明します。

AWS SDK for Java

以下の例では、AWS SDK for Java の AmazonSNSClient クラスの setSMSAttributes メソッドを使用します。この例では、異なる属性名の値を設定します。

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); setDefaultSmsAttributes(snsClient);}

public static void setDefaultSmsAttributes(AmazonSNSClient snsClient) { SetSMSAttributesRequest setRequest = new SetSMSAttributesRequest() .addAttributesEntry("DefaultSenderID", "mySenderID") .addAttributesEntry("MonthlySpendLimit", "1") .addAttributesEntry("DeliveryStatusIAMRole", "arn:aws:iam::123456789012:role/mySnsRole") .addAttributesEntry("DeliveryStatusSuccessSamplingRate", "10") .addAttributesEntry("DefaultSMSType", "Transactional") .addAttributesEntry("UsageReportS3Bucket", "sns-sms-daily-usage"); snsClient.setSMSAttributes(setRequest); Map<String, String> myAttributes = snsClient.getSMSAttributes(new GetSMSAttributesRequest()) .getAttributes();

155

Page 161: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドプリファレンスの設定

System.out.println("My SMS attributes:"); for (String key : myAttributes.keySet()) { System.out.println(key + " = " + myAttributes.get(key)); }}

この例では、MonthlySpendLimit 属性の値を 1.00 USD に設定します。デフォルトでは、これはAmazon SNS で許可される最大額です。限度を引き上げる場合は 、リクエストを送信します。[Newlimit value (新しい制限値)] に、必要な月ごとの使用限度を入力します。[Use Case Description (申請理由の説明)] フィールドで、月ごとの SMS 使用限度の引き上げをリクエストしていることを説明します。AWS サポートチームは、お客様のリクエストに対して、24 時間以内に一次回答を行います。

属性が正しく設定されたことを確認するために、この例では、getSMSAttributes メソッドの結果を表示します。この例を実行すると、IDE のコンソール出力ウィンドウに属性が表示されます。

My SMS attributes:DeliveryStatusSuccessSamplingRate = 10UsageReportS3Bucket = sns-sms-daily-usageDefaultSMSType = TransactionalDeliveryStatusIAMRole = arn:aws:iam::123456789012:role/mySnsRoleMonthlySpendLimit = 1DefaultSenderID = mySenderID

AWS SDK for .NET

以下の例では、AWS SDK for .NET の AmazonSimpleNotificationServiceClient クラスのSetSMSAttributes メソッドを使用します。この例では、異なる属性名の値を設定します。

static void Main(string[] args){ AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); SetDefaultSmsAttributes(snsClient); }

public static void SetDefaultSmsAttributes(AmazonSimpleNotificationServiceClient snsClient){ SetSMSAttributesRequest setRequest = new SetSMSAttributesRequest(); setRequest.Attributes["DefaultSenderID"] = "mySenderID"; setRequest.Attributes["MonthlySpendLimit"] = "1"; setRequest.Attributes["DeliveryStatusIAMRole"] = "arn:aws:iam::123456789012:role/mySnsRole"; setRequest.Attributes["DeliveryStatusSuccessSamplingRate"] = "10"; setRequest.Attributes["DefaultSMSType"] = "Transactional"; setRequest.Attributes["UsageReportS3Bucket"] = "sns-sms-daily-usage"; SetSMSAttributesResponse setResponse = snsClient.SetSMSAttributes(setRequest); GetSMSAttributesRequest getRequest = new GetSMSAttributesRequest(); GetSMSAttributesResponse getResponse = snsClient.GetSMSAttributes(getRequest); Console.WriteLine("My SMS attributes:"); foreach (var item in getResponse.Attributes) { Console.WriteLine(item.Key + " = " + item.Value); }}

この例では、MonthlySpendLimit 属性の値を 1.00 USD に設定します。デフォルトでは、これはAmazon SNS で許可される最大額です。限度を引き上げる場合は、ケースを送信します。[New limitvalue (新しい制限値)] に、必要な月ごとの使用限度を入力します。[Use Case Description (申請理由の説明)] フィールドで、月ごとの SMS 使用限度の引き上げをリクエストしていることを説明します。AWS サポートチームは、お客様のリクエストに対して、24 時間以内に一次回答を行います。

156

Page 162: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージの送信

属性が正しく設定されたことを確認するために、この例では、GetSMSAttributes メソッドの結果を表示します。この例を実行すると、IDE のコンソール出力ウィンドウに属性が表示されます。

My SMS attributes:DeliveryStatusSuccessSamplingRate = 10UsageReportS3Bucket = sns-sms-daily-usageDefaultSMSType = TransactionalDeliveryStatusIAMRole = arn:aws:iam::123456789012:role/mySnsRoleMonthlySpendLimit = 1DefaultSenderID = mySenderID

SMS メッセージの送信Amazon SNS を使用して、SMS 対応デバイスに SMS メッセージを送信できます。これらのデバイスの電話番号に直接メッセージを発行でき、Amazon SNS トピックに電話番号をサブスクライブする必要はありません。

各メッセージを同時に複数の電話番号に発行する場合、電話番号をトピックにサブスクライブすると便利です。SMS メッセージをトピックに発行する方法については、「複数の電話番号に SMS メッセージを送信する (p. 161)」を参照してください。

メッセージを送信すると、メッセージがコストまたは確実な配信用に最適化されているかどうかを制御でき、送信者 ID を指定できます。Amazon SNS API または AWS SDK を使用してメッセージをプログラムによって送信すると、メッセージ配信の上限価格を指定できます。

各 SMS メッセージは最大 140 バイトまで含めることができ、文字限度はエンコーディングスキームによって異なります。たとえば、SMS メッセージは以下を含めることができます。

• 160 GSM 文字• 140 ASCII 文字• 70 UCS-2 文字

サイズ限度を超えてメッセージを発行する場合は、Amazon SNS により、複数のメッセージとして送信され、それぞれが文字数の限度以内に収められます。メッセージは単語の途中ではなく、全単語の境界で切り離されます。1 回の SMS 発行アクションの合計サイズ限度は、1600 バイトです。

SMS メッセージを送信するときは、E.164 形式を使用して電話番号を指定します。E.164 は、国際的な音声通信に使用される電話番号の構造の規格です。この形式に従う電話番号には最大 15 桁を設定でき、プラス記号 (+) および国コードのプレフィックスがついています。たとえば、E.164 形式の米国の電話番号は +1XXX5550100 として表示されます。

トピック• メッセージの送信 (コンソール) (p. 157)• メッセージの送信 (AWS SDK) (p. 158)

メッセージの送信 (コンソール)1. Amazon SNS コンソールにサインインします。2. コンソールメニューで、SMS メッセージングをサポートしているリージョン (p. 177)にリージョン

セレクタを設定します。3. ナビゲーションパネルで、[テキストメッセージング (SMS)] を選択します。4. [テキストメッセージ (SMS)] ページで、[テキストメッセージの送信 (SMS)] を選択します。[テキスト

メッセージの送信 (SMS)] ウィンドウが開きます。

157

Page 163: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージの送信

5. [Message type] で、以下のいずれかを選択します。

• [プロモーション] – マーケティングメッセージなどの重要度が低いメッセージ。Amazon SNS は、コストを最も低く抑えるようにメッセージの配信を最適化します。

• [トランザクション] – 顧客のトランザクションをサポートする重要なメッセージ (たとえば、多要素認証のためのワンタイムパスコードなど)。Amazon SNS によってメッセージの配信が最適化され、最高の信頼性が実現されます。

このメッセージレベルの設定は、[テキストメッセージプリファレンス] ページで設定するデフォルトメッセージタイプを上書きします。

プロモーションおよびトランザクションメッセージの料金表の詳細については、「グローバル SMS料金表」を参照してください。

6. メッセージを送信する電話番号を [番号] に入力します。7. [メッセージ] にメッセージを入力します。8. (オプション) [送信者 ID] に、少なくとも 1 つの文字を含み、スペースは含まない、11 文字以内の英

数字のカスタム ID を入力します。送信者 ID は、受信デバイスにメッセージ送信者として表示されます。たとえば、メッセージ ソースを識別しやすいように、ビジネスブランドを使用できます。

送信者 ID のサポートについては、国、リージョン、またはその両方によって異なります。たとえば、米国の電話番号へ配信されるメッセージは、送信者 ID を表示しません。送信者 ID をサポートする国およびリージョンについては、「サポートされているリージョンおよび国 (p. 177)」を参照してください。

送信者 ID を指定しない場合、サポートされている国またはリージョンでは、メッセージは送信者 IDとして長いコードを表示します。アルファベットの送信者 ID を必要とする国およびリージョンでは、メッセージは送信者 ID として NOTICE を表示します。

このメッセージレベルの送信者 ID は、[テキストメッセージプリファレンス] ページで設定するデフォルトの送信者 ID を上書きします。

9. [テキストメッセージの送信] を選択します。

メッセージの送信 (AWS SDK)AWS SDK のいずれかを使用して SMS メッセージを送信するには、Amazon SNS API の Publish リクエストに対応する SDK のアクションを使用します。このリクエストでは、電話番号に SMS メッセージを直接送信できます。以下の属性名の値を設定する場合、MessageAttributes パラメーターも使用できます。

AWS.SNS.SMS.SenderID

少なくとも 1 つの文字を含み、スペースは含まない、11 文字以内の英数字のカスタム ID。送信者 IDは、受信デバイスにメッセージ送信者として表示されます。たとえば、メッセージ ソースを識別しやすいように、ビジネスブランドを使用できます。

送信者 ID のサポートについては、国、リージョン、またはその両方によって異なります。たとえば、米国の電話番号へ配信されるメッセージは、送信者 ID を表示しません。送信者 ID をサポートする国およびリージョンについては、「サポートされているリージョンおよび国 (p. 177)」を参照してください。

送信者 ID を指定しない場合、サポートされている国およびリージョンでは、メッセージは送信者 IDとして長いコードを表示します。アルファベットの送信者 ID を必要とする国またはリージョンでは、メッセージは送信者 ID として NOTICE を表示します。

このメッセージレベルの属性は、DefaultSenderID リクエストを使用して設定する、SetSMSAttributes アカウントレベルの属性を上書きします。

158

Page 164: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージの送信

AWS.SNS.SMS.MaxPrice

SMS メッセージの送信に支払うことのできる上限額 (USD)。メッセージを送信することによって上限価格を超えるコストが発生すると判断した場合、Amazon SNS はメッセージを送信しません。

過去 1 か月の SMS コストが既に MonthlySpendLimit リクエストを使用して設定するSetSMSAttributes 属性の限度を超えた場合、この属性は何も実行しません。

Amazon SNS トピックにメッセージを送信する場合、トピックにサブスクライブされている各電話番号への各メッセージの配信に上限価格が適用されます。

AWS.SNS.SMS.SMSType

送信するメッセージのタイプ。• Promotional (デフォルト) - マーケティングメッセージなどの重要度が低いメッセージ。Amazon

SNS は、コストを最も低く抑えるようにメッセージの配信を最適化します。• Transactional - 顧客のトランザクションをサポートする重要なメッセージ (多要素認証のための

ワンタイムパスコードなど)。 Amazon SNS によってメッセージの配信が最適化され、最高の信頼性が実現されます。

このメッセージレベルの属性は、DefaultSMSType リクエストを使用して設定する、SetSMSAttributes アカウントレベルの属性を上書きします。

(オプション) メッセージ属性設定以下の例では、AWS SDK で提供される Amazon SNS クライアントを使用してメッセージ属性を設定する方法について説明します。

AWS SDK for Java

AWS SDK for Java では、属性キーを MessageAttributeValue オブジェクトと関連付けるマップを構築することで、メッセージ属性値を設定します。各 MessageAttributeValue オブジェクトは属性値で初期化され、各オブジェクトは値のデータ型を宣言します。次の例では、上限価格を 0.50USD、SMS 型をプロモーションとして、「mySenderID」に送信者 ID を設定します。

Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>();smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue() .withStringValue("mySenderID") //The sender ID shown on the device. .withDataType("String"));smsAttributes.put("AWS.SNS.SMS.MaxPrice", new MessageAttributeValue() .withStringValue("0.50") //Sets the max price to 0.50 USD. .withDataType("Number"));smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue() .withStringValue("Promotional") //Sets the type to promotional. .withDataType("String"));

SMS メッセージを送信する場合、PublishRequest オブジェクトに属性を適用します。AWS SDK for .NET

AWS SDK for .NET では、属性キーを MessageAttributeValue オブジェクトと関連付けるマップを構築することで、メッセージ属性値を設定します。各 MessageAttributeValue オブジェクトは属性値で初期化され、各オブジェクトは値のデータ型を宣言します。次の例では、上限価格を 0.50USD、SMS 型をプロモーションとして、「mySenderID」に送信者 ID を設定します。

PublishRequest pubRequest = new PublishRequest();// add optional MessageAttributes...pubRequest.MessageAttributes["AWS.SNS.SMS.SenderID"] = new MessageAttributeValue{ StringValue = "mySenderId", DataType = "String"};

159

Page 165: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドメッセージの送信

pubRequest.MessageAttributes["AWS.SNS.SMS.MaxPrice"] = new MessageAttributeValue { StringValue = "0.50", DataType = "Number" };pubRequest.MessageAttributes["AWS.SNS.SMS.SMSType"] = new MessageAttributeValue { StringValue = "Promotional", DataType = "String" };

メッセージの送信

以下の例では、AWS SDK で提供される Amazon SNS クライアントを使用してメッセージを送信する方法について説明します。

AWS SDK for Java

以下の例では、AWS SDK for Java の AmazonSNSClient クラスの publish メソッドを使用します。この例では、メッセージを電話番号に直接送信します。

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); String message = "My SMS message"; String phoneNumber = "+1XXX5550100"; Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>(); //<set SMS attributes> sendSMSMessage(snsClient, message, phoneNumber, smsAttributes);}

public static void sendSMSMessage(AmazonSNSClient snsClient, String message, String phoneNumber, Map<String, MessageAttributeValue> smsAttributes) { PublishResult result = snsClient.publish(new PublishRequest() .withMessage(message) .withPhoneNumber(phoneNumber) .withMessageAttributes(smsAttributes)); System.out.println(result); // Prints the message ID.}

この例を実行すると、IDE のコンソール出力ウィンドウにメッセージ ID が表示されます。

{MessageId: 9b888f80-15f7-5c30-81a2-c4511a3f5229}

AWS SDK for .NET

以下の例では、AWS SDK for .NET の AmazonSimpleNotificationServiceClient クラスのPublish メソッドを使用します。この例では、メッセージを電話番号に直接送信します。

static void Main(string[] args){ AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); PublishRequest pubRequest = new PublishRequest(); pubRequest.Message = "My SMS message"; pubRequest.PhoneNumber = "+1XXX5550100"; // add optional MessageAttributes, for example: // pubRequest.MessageAttributes.Add("AWS.SNS.SMS.SenderID", new MessageAttributeValue // { StringValue = "SenderId", DataType = "String" }); PublishResponse pubResponse = snsClient.Publish(pubRequest); Console.WriteLine(pubResponse.MessageId);}

この例を実行すると、IDE のコンソール出力ウィンドウにメッセージ ID が表示されます。

160

Page 166: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド複数の電話番号にメッセージを送信する

9b888f80-15f7-5c30-81a2-c4511a3f5229

複数の電話番号に SMS メッセージを送信するトピックにこれらの電話番号を登録することで、1 通の SMS メッセージを一度に複数の電話番号に送信できます。トピックは通信チャンネルで、サブスクライバーを追加し、すべてのサブスクライバーにメッセージを発行できます。サブスクリプションをキャンセルするか、サブスクライバーがアカウントからのSMS メッセージの受信をオプトアウトするまで、トピックに発行されるすべてのメッセージを受け取ります。

トピック• トピックへのメッセージの送信 (コンソール) (p. 161)• トピックへのメッセージの送信 (AWS SDK) (p. 162)

トピックへのメッセージの送信 (コンソール)トピックを作成するには

SMS メッセージを送信するトピックがまだない場合は、次の手順を実行します。

1. Amazon SNS コンソールにサインインします。2. コンソールメニューで、SMS メッセージングをサポートしているリージョン (p. 177)にリージョン

セレクタを設定します。3. ナビゲーションパネルで、[トピック] を選択します。4. [Topics] ページで、[Create new topic] を選択します。[Create new topic] ウィンドウが開きます。5. トピック名に名前を入力します。6. (オプション) 表示名に SMS メッセージのカスタムプレフィックスを入力します。トピックにメッ

セージを送信する場合、Amazon SNS によって右アングルブラケット (>) とスペースに続いて表示名が付加されます。表示名では大文字と小文字が区別されず、Amazon SNS は表示名を大文字に変換します。たとえば、トピックの表示名が MyTopic で、メッセージが Hello World! である場合、メッセージは次のように表示されます。

MYTOPIC> Hello World!

7. [トピックの作成] を選択します。表示名と Amazon リソースネーム (ARN) が、[Topics] ページのテーブルに追加されます。

SMS のサブスクリプションを追加する

トピックに 1 回だけメッセージを発行することによって、サブスクリプションを使用して SMS メッセージを複数の受取人に送信できます。

1. [Topics] ページで、トピック ARN を選択します。2. トピックの詳細ページで、[サブスクリプションの作成] を選択します。3. [Protocol] で、[SMS] を選択します。4. [エンドポイント] に、メッセージを送信する電話番号を入力します。5. [Create Subscription] を選択します。[Subscriptions] テーブルに、サブスクリプションの情報が追加さ

れます。

電話番号を追加するために、この手順を繰り返すことができ、E メールなどの他の種類のサブスクリプションを追加できます。

161

Page 167: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド複数の電話番号にメッセージを送信する

メッセージを送信する

トピックにメッセージを発行すると、Amazon SNS はトピックにサブスクライブされているすべての電話番号にメッセージの配信を試みます。

1. トピックの詳細ページで、[Publish to topic] を選択します。2. トピックに E メールのサブスクリプションが含まれていない場合、および E メール と SMS のサブス

クリプションの両方を発行する場合は、[Publish a message] ページで、[Subject] のフィールドを空のままにします。[Subject] に入力したテキストが E メールの件名の行として使用されます。

3. [Message] にメッセージを入力します。

SMS メッセージのサイズ限度の詳細については、「SMS メッセージの送信 (p. 157)」を参照してください。

トピックに表示名がある場合、Amazon SNS はそれをメッセージの長さを増やすメッセージに追加します。表示名の長さは、名前の文字数に Amazon SNS が追加する右アングルブラケット (>) とスペースの 2 文字をプラスしたものです。

4. [メッセージの発行] を選択します。Amazon SNS は SMS メッセージを送信し、成功メッセージを表示します。

トピックへのメッセージの送信 (AWS SDK)AWS SDK のいずれかを使用してトピックに SMS メッセージを送信するには、Amazon SNS API で次のリクエストに対応する SDK のアクションを使用します。

CreateTopic

電話番号をサブスクライブできるトピックを作成し、トピックに発行することで、それらの電話番号のすべてに一度にメッセージを発行します。

Subscribe

トピックに電話番号をサブスクライブします。Publish

トピックにサブスクライブされた各電話番号にメッセージを送信します。

メッセージのいくつかの属性の設定に MessageAttributes パラメーターを使用できます (上限価格など)。詳細については、「メッセージの送信 (AWS SDK) (p. 158)」を参照してください。

トピックの作成以下の例では、AWS SDK で提供される Amazon SNS クライアントを使用してトピックを作成する方法について説明します。

AWS SDK for Java

以下の例では、AWS SDK for Java の AmazonSNSClient クラスの createTopic メソッドを使用します。

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); String topicArn = createSNSTopic(snsClient);}

public static String createSNSTopic(AmazonSNSClient snsClient) { CreateTopicRequest createTopic = new CreateTopicRequest("mySNSTopic"); CreateTopicResult result = snsClient.createTopic(createTopic);

162

Page 168: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド複数の電話番号にメッセージを送信する

System.out.println("Create topic request: " + snsClient.getCachedResponseMetadata(createTopic)); System.out.println("Create topic result: " + result); return result.getTopicArn();}

この例では、リクエスト ID を取得するために getCachedResponseMetadata メソッドを使用します。

この例を実行すると、IDE のコンソール出力ウィンドウに次のように表示されます。

{TopicArn: arn:aws:sns:us-east-1:123456789012:mySNSTopic}CreateTopicRequest - {AWS_REQUEST_ID=93f7fc90-f131-5ca3-ab18-b741fef918b5}

AWS SDK for .NET

以下の例では、AWS SDK for .NET の AmazonSimpleNotificationServiceClient クラスのcreateTopic メソッドを使用します。

static void Main(string[] args){ AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); String topicArn = CreateSNSTopic(snsClient);}

public static String CreateSNSTopic(AmazonSimpleNotificationServiceClient snsClient){ //create a new SNS topic CreateTopicRequest createTopicRequest = new CreateTopicRequest("MyNewTopic200"); CreateTopicResponse createTopicResponse = snsClient.CreateTopic(createTopicRequest); //get request id for CreateTopicRequest from SNS metadata Console.WriteLine("CreateTopicRequest - " + createTopicResponse.ResponseMetadata.RequestId); return createTopicResponse.TopicArn;}

この例を実行すると、IDE のコンソール出力ウィンドウに次のように表示されます。

{TopicArn: arn:aws:sns:us-east-1:123456789012:mySNSTopic}CreateTopicRequest - 93f7fc90-f131-5ca3-ab18-b741fef918b5

トピックに SMS のサブスクリプションを追加します以下の例では、AWS SDK で提供される Amazon SNS クライアントを使用してトピックに SMS サブスクリプションを追加する方法について説明します。

AWS SDK for Java

以下の例では、AWS SDK for Java の AmazonSNSClient クラスの subscribe メソッドを使用します。

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); String phoneNumber = "+1XXX5550100"; String topicArn = createSNSTopic(snsClient); subscribeToTopic(snsClient, topicArn, "sms", phoneNumber);}

163

Page 169: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド複数の電話番号にメッセージを送信する

//<create SNS topic>

public static void subscribeToTopic(AmazonSNSClient snsClient, String topicArn, String protocol, String endpoint) { SubscribeRequest subscribe = new SubscribeRequest(topicArn, protocol, endpoint); SubscribeResult subscribeResult = snsClient.subscribe(subscribe); System.out.println("Subscribe request: " + snsClient.getCachedResponseMetadata(subscribe)); System.out.println("Subscribe result: " + subscribeResult);}

この例では、subscribeRequest オブジェクトを作成し、次の引数を渡します。

• topicArn - サブスクリプションが追加されるトピックの Amazon リソースネーム (ARN)。• "sms" - SMS のサブスクリプションのプロトコル オプション。• endpoint - トピックにサブスクライブする電話番号。

この例では、サブスクリプションのリクエストのリクエスト ID を取得するために、getCachedResponseMetadata メソッドを使用します。

この例を実行すると、IDE のコンソールウィンドウにサブスクリプションのリクエストの ID が表示されます。

SubscribeRequest - {AWS_REQUEST_ID=f38fe925-8093-5bd4-9c19-a7c7625de38c}

AWS SDK for .NET

以下の例では、AWS SDK for .NET の AmazonSimpleNotificationServiceClient クラスのsubscribe メソッドを使用します。

static void Main(string[] args){ AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); String phoneNumber = "+1XXX5550100"; String topicArn = CreateSNSTopic(snsClient); SubscribeToTopic(snsClient, topicArn, "sms", phoneNumber);}

//<create SNS topic>

static public void SubscribeToTopic(AmazonSimpleNotificationServiceClient snsClient, String topicArn, String protocol, String endpoint){ SubscribeRequest subscribeRequest = new SubscribeRequest(topicArn, protocol, endpoint); SubscribeResponse subscribeResponse = snsClient.Subscribe(subscribeRequest); Console.WriteLine("Subscribe request: " + subscribeResponse.ResponseMetadata.RequestId); Console.WriteLine("Subscribe result: " + subscribeResponse.);}

この例では、SubscribeRequest オブジェクトを作成し、次の引数を渡します。

• topicArn - サブスクリプションが追加されるトピックの Amazon リソースネーム (ARN)。• "sms" - SMS のサブスクリプションのプロトコル オプション。• endpoint - トピックにサブスクライブする電話番号。

164

Page 170: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド複数の電話番号にメッセージを送信する

この例を実行すると、IDE のコンソールウィンドウにサブスクリプションのリクエストの ID が表示されます。

SubscribeRequest - f38fe925-8093-5bd4-9c19-a7c7625de38c

(オプション) メッセージ属性設定

以下の例では、AWS SDK で提供される Amazon SNS クライアントを使用してメッセージ属性を設定する方法について説明します。

AWS SDK for Java

AWS SDK for Java では、属性キーを MessageAttributeValue オブジェクトと関連付けるマップを構築することで、メッセージ属性値を設定します。各 MessageAttributeValue オブジェクトは属性値で初期化され、各オブジェクトは値のデータ型を宣言します。次の例では、上限価格を 0.50USD、SMS 型をプロモーションとして、「mySenderID」に送信者 ID を設定します。

Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>();smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue() .withStringValue("mySenderID") //The sender ID shown on the device. .withDataType("String"));smsAttributes.put("AWS.SNS.SMS.MaxPrice", new MessageAttributeValue() .withStringValue("0.50") //Sets the max price to 0.50 USD. .withDataType("Number"));smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue() .withStringValue("Promotional") //Sets the type to promotional. .withDataType("String"));

メッセージ属性の詳細については、「メッセージの送信 (AWS SDK) (p. 158)」を参照してください

SMS メッセージを送信する場合、PublishRequest オブジェクトに属性を適用します。AWS SDK for .NET

AWS SDK for .NET では、属性キーを MessageAttributeValue オブジェクトと共にPublishRequest オブジェクトの MessageAttributes フィールドに追加することで、メッセージ属性値を設定します。各 MessageAttributeValue オブジェクトは属性値で初期化され、各オブジェクトは値のデータ型を宣言します。次の例では、上限価格を 0.50 USD、SMS 型をプロモーションとして、「mySenderID」に送信者 ID を設定します。

PublishRequest pubRequest = new PublishRequest();pubRequest.MessageAttributes["AWS.SNS.SMS.SenderID"] = new MessageAttributeValue{ StringValue = "mySenderId", DataType = "String"};pubRequest.MessageAttributes["AWS.SNS.SMS.MaxPrice"] = new MessageAttributeValue { StringValue = "0.50", DataType = "Number" };pubRequest.MessageAttributes["AWS.SNS.SMS.SMSType"] = new MessageAttributeValue { StringValue = "Promotional", DataType = "String" };

メッセージ属性の詳細については、「メッセージの送信 (AWS SDK) (p. 158)」を参照してください

SMS メッセージを送信する場合、PublishRequest オブジェクトに属性を適用します。

トピックにメッセージを発行します

以下の例では、AWS SDK で提供される Amazon SNS クライアントを使用してトピックにメッセージを発行する方法について説明します。

165

Page 171: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド複数の電話番号にメッセージを送信する

AWS SDK for Java

以下の例では、AWS SDK for Java の AmazonSNSClient クラスの publish メソッドを使用します。

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); String message = "My SMS message"; Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>(); //<set SMS attributes> String topicArn = createSNSTopic(snsClient); //<subscribe to topic> sendSMSMessageToTopic(snsClient, topicArn, message, smsAttributes);}

//<create topic method>

//<subscribe to topic method>

public static void sendSMSMessageToTopic(AmazonSNSClient snsClient, String topicArn, String message, Map<String, MessageAttributeValue> smsAttributes) { PublishResult result = snsClient.publish(new PublishRequest() .withTopicArn(topicArn) .withMessage(message) .withMessageAttributes(smsAttributes)); System.out.println(result);}

Amazon SNS トピックにサブスクライブされているすべての電話番号にメッセージの配信を試みます。

この例では、トピックの Amazon リソースネーム (ARN) およびメッセージを引数として渡すときに、publishRequest オブジェクトを作成します。publishResult オブジェクトは、AmazonSNS によって返されるメッセージ ID をキャプチャします。

この例を実行すると、IDE のコンソール出力ウィンドウにメッセージ ID が表示されます。

{MessageId: 9b888f80-15f7-5c30-81a2-c4511a3f5229}

AWS SDK for .NET

以下の例では、AWS SDK for .NET の AmazonSimpleNotificationServiceClient クラスのPublish メソッドを使用します。

public static void main(string[] args) { AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); String topicArn = createSNSTopic(snsClient); PublishRequest pubRequest = new PublishRequest(); pubRequest.Message = "My SMS message"; pubRequest.TopicArn = topicArn; // add optional MessageAttributes... // pubRequest.MessageAttributes["AWS.SNS.SMS.SenderID"] = // new MessageAttributeValue{ StringValue = "mySenderId", DataType = "String"}; PublishResponse pubResponse = snsClient.Publish(pubRequest); Console.WriteLine(pubResponse.MessageId);}

//<create topic method>

166

Page 172: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドSMS のアクティビティのモニタリング

//<subscribe to topic method>

Amazon SNS トピックにサブスクライブされているすべての電話番号にメッセージの配信を試みます。

この例では、publishRequest オブジェクトを作成し、トピックの Amazon リソースネーム (ARN)およびメッセージを割り当てます。publishResponse オブジェクトは、Amazon SNS によって返されるメッセージ ID をキャプチャします。

この例を実行すると、IDE のコンソール出力ウィンドウにメッセージ ID が表示されます。

9b888f80-15f7-5c30-81a2-c4511a3f5229

SMS のアクティビティのモニタリングSMS をモニタリングすることによって、送信先の電話番号、成功または失敗した配信、エラーの原因、コスト、およびその他の情報を追跡できます。Amazon SNS は、コンソールの統計をまとめ、AmazonCloudWatch に情報を送信し、指定した Amazon S3 バケットに SMS の毎日の使用状況レポートを送信します。

トピック• SMS 配信統計の表示 (p. 167)• SMS 配信用の Amazon CloudWatch のメトリクスおよびログを表示する (p. 167)• SMS の毎日の使用状況レポートの表示 (p. 170)

SMS 配信統計の表示最新の SMS 配信に関する統計を表示するために Amazon SNS コンソールを使用できます。

1. Amazon SNS コンソールにサインインします。2. コンソールメニューで、SMS メッセージングをサポートしているリージョン (p. 177)にリージョン

セレクタを設定します。3. ナビゲーションパネルで、[テキストメッセージング (SMS)] を選択します。4. [テキストメッセージ (SMS)] ページの、[Account stats] セクションで、トランザクションおよびプロ

モーション SMS メッセージ配信のグラフを表示します。各グラフは、前述の 15 日間の次のデータを表示します。

• 配信成功率 (正常な配信の割合)• 送信 (配信試行数)• 失敗 (配信の失敗数)

このページで、[使用状況] ボタンを選択して、毎日の使用状況レポートを保存する Amazon S3 バケットに移動することもできます。詳細については、「SMS の毎日の使用状況レポートの表示 (p. 170)」を参照してください。

SMS 配信用の Amazon CloudWatch のメトリクスおよびログを表示するAmazon CloudWatch および Amazon CloudWatch Logs を使用して、SMS のメッセージ配信をモニタリングできます。

167

Page 173: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドSMS のアクティビティのモニタリング

トピック• Amazon CloudWatch メトリクスの表示 (p. 168)• CloudWatch Logs の表示 (p. 168)• 正常な SMS 配信のログの例 (p. 168)• 失敗した SMS 配信のログの例 (p. 169)• SMS 配信の失敗の原因 (p. 169)

Amazon CloudWatch メトリクスの表示

Amazon SNS は、自動的に SMS メッセージ配信に関するメトリクスを収集し、これらを AmazonCloudWatch にプッシュします。CloudWatch を使用してこれらのメトリクスを監視し、そのメトリクスがしきい値を超えたときに警告するようにアラームを作成できます。たとえば、CloudWatch メトリクスをモニタリングして、SMS 配信率と今月の始めから今日までの SMS 料金を知ることができます。

CloudWatch メトリクスのモニタリング、CloudWatch アラームの設定、利用可能なメトリクスの種類の詳細については、「CloudWatch メトリクスを使用した Amazon SNS トピックのモニタリング (p. 221)」を参照してください。

CloudWatch Logs の表示

Amazon SNS による Amazon CloudWatch Logs への書き込みを有効化することにより、正常な、および失敗した SMS メッセージ配信の情報を収集できます。送信した各 SMS メッセージに対して、AmazonSNS は、メッセージの価格、成功または失敗のステータス、失敗の理由 (メッセージが失敗した場合)、メッセージのドウェル時間、その他の情報を含むログを書き込みます。

SMS メッセージに対して CloudWatch Logs を有効にする

1. Amazon SNS コンソールにサインインします。2. コンソールメニューで、SMS メッセージングをサポートしているリージョン (p. 177)にリージョン

セレクタを設定します。3. ナビゲーションパネルで、[テキストメッセージング (SMS)] を選択します。4. [テキストメッセージング (SMS)] ページの [テキストメッセージングの設定] セクションで、[編集] を

選択します。5. [Edit text messaging preferences (テキストメッセージングの設定の編集)] ページの [Delivery status

logging (配信ステータスのログ記録)] セクションで、以下の操作を行います。

a. [Success sample rate (成功サンプルの割合)] で、Amazon SNS が CloudWatch Logs でログを書き込む正常な SMS 配信の割合を指定します。次に例を示します。

• 失敗した配信のみをログを書き込むには、この値を 0 に設定します。• 正常な配信の 10% に対してログを書き込むには、10 に設定します。

割合を指定しないなら、Amazon SNS は、すべての正常配信に対してログを書き込みます。b. [Create new service role (新しいサービスロールを作成)] を選択します。c. [Create new roles (新しいロールを作成)] を選択します。d. [SNS is requesting permission to use resources in your account] ページで [Allow] を選択します。

6. [Save changes] を選択します。

正常な SMS 配信のログの例

正常な SMS 配信の配信ステータスのログは次の例のようになります。

168

Page 174: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドSMS のアクティビティのモニタリング

{ "notification": { "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf", "timestamp": "2016-06-28 00:40:34.558" }, "delivery": { "phoneCarrier": "My Phone Carrier", "mnc": 270, "destination": "+1XXX5550100", "priceInUSD": 0.00645, "smsType": "Transactional", "mcc": 310, "providerResponse": "Message has been accepted by phone carrier", "dwellTimeMs": 599, "dwellTimeMsUntilDeviceAck": 1344 }, "status": "SUCCESS"}

失敗した SMS 配信のログの例

失敗した SMS 配信の配信ステータスのログは次の例のようになります。

{ "notification": { "messageId": "1077257a-92f3-5ca3-bc97-6a915b310625", "timestamp": "2016-06-28 00:40:34.559" }, "delivery": { "mnc": 0, "destination": "+1XXX5550100", "priceInUSD": 0.00645, "smsType": "Transactional", "mcc": 0, "providerResponse": "Unknown error attempting to reach phone", "dwellTimeMs": 1420, "dwellTimeMsUntilDeviceAck": 1692 }, "status": "FAILURE"}

SMS 配信の失敗の原因

失敗の理由は、providerResponse 属性で提供されます。SMS メッセージは以下の理由で送信に失敗することがあります。

• 電話業者がスパムとしてブロック• 送信先がブラックリストに記載されている• 無効な電話番号• メッセージ本文が無効• 電話業者がこのメッセージをブロック• 電話業者が現在、到達不可能/使用不可能• 電話が SMS をブロック• 電話がブラックリストに載せられている• 電話が現在、到達不可能/使用不可能• 電話番号はオプトアウトしている• この配信が上限価格を超えている

169

Page 175: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドSMS のアクティビティのモニタリング

• 電話に達する際の原因不明なエラー

SMS の毎日の使用状況レポートの表示Amazon SNS から毎日の使用状況レポートにサブスクライブすることによって、SMS 配信をモニタリングできます。1 つ以上の SMS メッセージを送信する日ごとに、Amazon SNS は、指定した Amazon S3 バケットに CSV ファイルとして使用状況レポートを配信します。SMS 使用状況レポートが S3 バケットで利用可能になるまでに、24 時間かかります。

トピック• 毎日の使用状況レポートの情報 (p. 170)• 毎日の使用状況レポートにサブスクライブする (p. 170)

毎日の使用状況レポートの情報

使用状況レポートには、アカウントから正常に配信した各 SMS メッセージに関する以下の情報が含まれています。

Note

このレポートには、オプトアウトした受取人に送信されるメッセージは含まれません。

• メッセージの発行時間 (UTC)• メッセージ ID• 送信先の電話番号• メッセージの種類• 配信ステータス• メッセージの価格 (USD)• パート番号 (1 通のメッセージとして長すぎる場合、メッセージは複数のパートに分割されます)• パートの総数

毎日の使用状況レポートにサブスクライブする

毎日の使用状況レポートにサブスクライブするには、適切なアクセス許可を持つ Amazon S3 バケットを作成する必要があります。

毎日の使用状況レポート用の Amazon S3 バケットを作成するには

1. Amazon S3 コンソールにサインインします。2. [Create Bucket] を選択します。3. [Bucket Name (バケット名)] には「sns-sms-daily-usage」などの名前を入力します。バケット

名の規則と制限については、『Amazon Simple Storage Service 開発者ガイド』の「バケット命名規則」を参照してください。

4. [Create] を選択します。5. [すべてのバケット] テーブルでバケットを選択して、[プロパティ] を選択します。6. [Permissions] セクションで、[Add bucket policy] を選択します。7. [バケットポリシーエディター] ウィンドウで、Amazon SNS サービスプリンシパルをバケットに書き

込むことを許可するポリシーを指定します。例については、「バケットポリシーの例 (p. 171)」を参照してください。

ポリシーの例を使用する場合は、my-s3-bucket をバケットの名前に置き換えるようにしてください。

170

Page 176: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドSMS のアクティビティのモニタリング

8. [Save] を選択します。

毎日の使用状況レポートにサブスクライブする

1. Amazon SNS コンソールにサインインします。2. ナビゲーションパネルで、[テキストメッセージング (SMS)] を選択します。3. [テキストメッセージング (SMS)] ページの [テキストメッセージングの設定] セクションで、[編集] を

選択します。4. [Edit text messaging preferences (テキストメッセージングの設定の編集)] ページの [Details (詳細)] セ

クションで、[Amazon S3 bucket name for usage reports (使用状況レポートに使用する Amazon S3 バケット名)] を指定します。

5. [Save changes] を選択します。

バケットポリシーの例

以下のポリシーは、Amazon SNS サービスプリンシパルに s3:PutObject およびs3:GetBucketLocation アクションの実行を許可します。Amazon SNS から SMS の毎日の使用状況レポートを受け取る Amazon S3 バケットを作成するときに、この例を使用できます。

{ "Statement": [{ "Sid": "AllowPutObject", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-s3-bucket/*" }, { "Sid": "AllowGetBucketLocation", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::my-s3-bucket" }]}

毎日の使用状況レポートの例

毎日の使用状況レポートにサブスクライブすると、Amazon SNS は毎日、以下の場所に CSV ファイルを使用して使用状況データを配置します。

<my-s3-bucket>/SMSUsageReports/<region>/YYYY/MM/DD/00x.csv.gz

各ファイルには、最大 50,000 のレコードを含めることができます。1 日のレコードがこの限度を超えると、Amazon SNS は複数のファイルを追加します。

レポートの例を以下に示します。

PublishTimeUTC,MessageId,DestinationPhoneNumber,MessageType,DeliveryStatus,PriceInUSD,PartNumber,TotalParts2016-05-10T03:00:29.476Z,96a298ac-1458-4825-a7eb-7330e0720b72,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.90084,1,12016-05-10T03:00:29.561Z,1e29d394-d7f4-4dc9-996e-26412032c344,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.34322,1,1

171

Page 177: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションの管理

2016-05-10T03:00:30.769Z,98ba941c-afc7-4c51-ba2c-56c6570a6c08,1XXX5550100,Transactional,Message has been accepted by phone carrier,0.27815,1,1

電話番号および SMS サブスクリプションの管理Amazon SNS には、アカウントから SMS メッセージを受信するユーザーを管理するためのオプションが複数用意されています。制限された頻度で、アカウントからの SMS メッセージの受信をオプトアウトした電話番号をオプトインできます。SMS サブスクリプションへのメッセージの送信を停止するために、それらに発行されるサブスクリプションやトピックを削除できます。

トピック• SMS メッセージの受信のオプトアウト (p. 172)• 電話番号とサブスクリプション (コンソール) の管理 (p. 172)• 電話番号およびサブスクリプション (AWS SDK) の管理 (p. 173)

SMS メッセージの受信のオプトアウト現地の法律および規制により義務付けられている場合 (米国およびカナダなど)、SMS の受信者は、デバイスを利用して以下のいずれかのメッセージに返信することによって、オプトアウトできます。

• ARRET (フランス語)• CANCEL• END• オプトアウト• オプトアウト• QUIT• REMOVE• STOP• TD• UNSUBSCRIBE

オプトアウトするには、受信者は Amazon SNS がメッセージを配信するのに使用したのと同じロングコードまたはショートコードに応答する必要があります。オプトアウト後、ユーザーが電話番号をオプトインしない限り、受信者は AWS アカウントから配信される SMS メッセージを受信しなくなります。

電話番号が Amazon SNS トピックにサブスクライブされると、オプトアウトはサブスクリプションを削除しませんが、電話番号をオプトインしない限り、SMS メッセージは、サブスクリプションへ送信できません。

電話番号とサブスクリプション (コンソール) の管理Amazon SNS コンソールを使用して、アカウントから SMS メッセージを受信する電話番号を制御できます。

オプトアウトされた電話番号をオプトインするユーザーのアカウントからの SMS メッセージの受信をオプトアウトした電話番号を表示し、これらの電話番号をオプトインしてメッセージの送信を再開することができます。

30 日に 1 回のみ、電話番号をオプトインできます。

1. Amazon SNS コンソールにサインインします。

172

Page 178: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションの管理

2. コンソールメニューで、SMS メッセージングをサポートしているリージョン (p. 177)にリージョンセレクタを設定します。

3. ナビゲーションパネルで、[テキストメッセージング (SMS)] を選択します。4. [Text messaging (SMS)] ページで、[オプトアウトされた電話番号を表示] を選択します。[Opted out

phone numbers] ページは、オプトアウトされた電話番号を表示します。5. オプトインする電話番号のチェックボックスをオンにして、[Opt in] を選択します。電話番号はオプト

アウトではなくなり、送信した SMS メッセージを受信します。

SMS サブスクリプションを削除するトピックにパブリッシュするときに、その電話番号への SMS メッセージの送信を停止するように SMS サブスクリプションを削除します。

1. ナビゲーションパネルで、[サブスクリプション] を選択します。2. 削除するサブスクリプションのチェックボックスをオンにします。それから、[Actions] を選択して、

[Delete Application] を選択します。3. [Delete (削除)] ウィンドウで、[Delete (削除)] を選択します。Amazon SNS はサブスクリプションを削

除し、成功メッセージを表示します。

トピックの削除サブスクライブしたエンドポイントにメッセージを発行しない場合トピックを削除します。

1. ナビゲーションパネルで、[トピック] を選択します。2. 削除するトピックのチェックボックスをオンにします。[Actions] を選択してから、[Delete Topics] を

選択します。3. [Delete (削除)] ウィンドウで、[Delete (削除)] を選択します。Amazon SNS はトピックを削除し、成功

メッセージを表示します。

電話番号およびサブスクリプション (AWS SDK) の管理AWS SDK を使用して、Amazon SNS に対してプログラムによるリクエストを行い、アカウントから SMSメッセージを受信できる電話番号を管理できます。

すべてのオプトアウトした電話番号を表示するすべてのオプトアウトした電話番号を表示するには、Amazon SNS API を使用して、ListPhoneNumbersOptedOut リクエストを送信します。

または、以下の例に示すように、AWS SDK の Amazon SNS クライアントを使用します。

AWS SDK for Java

AWS SDK for Java では、AmazonSNSClient クラスの listPhoneNumbersOptedOut メソッドを使用できます。

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); listOptOut(snsClient);}

public static void listOptOut(AmazonSNSClient snsClient) { String nextToken = null; do { ListPhoneNumbersOptedOutResult result = snsClient

173

Page 179: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションの管理

.listPhoneNumbersOptedOut(new ListPhoneNumbersOptedOutRequest() .withNextToken(nextToken)); nextToken = result.getNextToken(); for (String phoneNum : result.getPhoneNumbers()) { System.out.println(phoneNum); } } while (nextToken != null);}

AWS SDK for .NET

AWS SDK for .NET では、AmazonSimpleNotificationServiceClient クラスのListPhoneNumbersOptedOut メソッドを使用できます。

public static void Main(String[] args) { AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); ListOptOut(snsClient);}

public static void ListOptOut(AmazonSimpleNotificationServiceClient snsClient){ String nextToken = null; do { ListPhoneNumbersOptedOutRequest listRequest = new ListPhoneNumbersOptedOutRequest { NextToken = nextToken }; ListPhoneNumbersOptedOutResponse listResponse = snsClient.ListPhoneNumbersOptedOut(listRequest); nextToken = listResponse.NextToken; foreach (String phoneNum in listResponse.PhoneNumbers) Console.WriteLine(phoneNum); } while (nextToken != null);}

Amazon SNS は、ページ分割されたレスポンスを返すので、この例では Amazon SNS が次のトークンを返すごとに、リクエストを繰り返します。この例を実行すると、IDE のコンソール出力ウィンドウで、すべてのオプトアウトした電話番号のリストが表示されます。

電話番号がオプトアウトしているかどうかを確認する電話番号がオプトアウトされているかどうかを確認するには、Amazon SNS API を使用して、CheckIfPhoneNumberIsOptedOut リクエストを送信します。

または、以下の例に示すように、AWS SDK の Amazon SNS クライアントを使用します。

AWS SDK for Java

AWS SDK for Java では、AmazonSNSClient クラスの checkIfPhoneNumberIsOptedOut メソッドを使用できます。

CheckIfPhoneNumberIsOptedOutRequest request = new CheckIfPhoneNumberIsOptedOutRequest().withPhoneNumber(phoneNumber);System.out.println(snsClient.checkIfPhoneNumberIsOptedOut(request));

この例を実行すると、IDE のコンソール出力ウィンドウに true または false の結果が表示されます。

{IsOptedOut: false}

174

Page 180: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサブスクリプションの管理

AWS SDK for .NET

AWS SDK for .NET を使用すると、CheckIfPhoneNumberIsOptedOut クラスのAmazonSimpleNotificationServiceClient メソッドを使用できます。

CheckIfPhoneNumberIsOptedOutRequest request = new CheckIfPhoneNumberIsOptedOutRequest { PhoneNumber = phoneNumber };Console.WriteLine(snsClient.CheckIfPhoneNumberIsOptedOut(request).IsOptedOut);

この例を実行すると、IDE のコンソール出力ウィンドウに true または false の結果が表示されます。

false

オプトアウトされた電話番号をオプトインする電話番号をオプトインするには、Amazon SNS API を使用して、OptInPhoneNumber リクエストを送信します。

または、以下の例に示すように、AWS SDK の Amazon SNS クライアントを使用します。

AWS SDK for Java

AWS SDK for Java では、AmazonSNSClient クラスの optInPhoneNumber メソッドを使用できます。

snsClient.optInPhoneNumber(new OptInPhoneNumberRequest().withPhoneNumber(phoneNumber));

AWS SDK for .NET

AWS SDK for .NET では、AmazonSimpleNotificationServiceClient クラスのOptInPhoneNumber メソッドを使用できます。

snsClient.OptInPhoneNumber(new OptInPhoneNumberRequest { PhoneNumber = phoneNumber});

30 日に 1 回のみ、電話番号をオプトインできます。

SMS サブスクリプションを削除するAmazon SNS トピックからの SMS サブスクリプションを削除するには、Amazon SNS API を使用してListSubscriptions リクエストを送信することにより、サブスクリプション ARN を取得したら、そのARN を Unsubscribe リクエストに渡します。

または、以下の例に示すように、AWS SDK の Amazon SNS クライアントを使用します。

AWS SDK for Java

AWS SDK for Java では、AmazonSNSClient クラスの listSubscriptions メソッドを使用してサブスクリプション ARN を取得できます。

ListSubscriptionsResult result = snsClient.listSubscriptions();for (Subscription sub : result.getSubscriptions()) { System.out.println(sub);}

文字列引数として、ARN を unsubscribe メソッドに渡すことにより、サブスクリプションを削除できます。

175

Page 181: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドショートコードの予約

snsClient.unsubscribe(subscriptionArn);

AWS SDK for .NET

AWS SDK for .NET では、次のようなコードを使用します。

ListSubscriptionsResponse response = snsClient.ListSubscriptions();// find the subscriptionAwn you wantforeach (Subscription sub in response.Subscriptions) Console.WriteLine(sub.SubscriptionArn);// unsubscribesnsClient.Unsubscribe(subscriptionArn);

トピックの削除トピックとサブスクリプションすべてを削除するには、Amazon SNS API を使用して ListTopics リクエストを送信することでトピック ARN を取得し、次に、その ARN を DeleteTopic リクエストに渡します。

または、以下の例に示すように、AWS SDK の Amazon SNS クライアントを使用します。

AWS SDK for Java

AWS SDK for Java では、AmazonSNSClient クラスの listTopics メソッドを使用してトピックARN を取得できます。

ListTopicsResult result = snsClient.listTopics();for (Topic t : result.getTopics()) { System.out.println(t);}

文字列引数として、ARN を deleteTopic メソッドに渡すことにより、トピックを削除できます。

snsClient.deleteTopic(topicArn);

AWS SDK for .NET

AWS SDK for .NET を使用し、次のようなコードを使用します。

ListTopicsResponse restopics= snsClient.ListTopics();// find the topicAwn you wantforeach (Topic t in restopics.Topics) Console.WriteLine(t.TopicArn);// deletesnsClient.DeleteTopic(topicArn);

SMS メッセージングの専有ショートコードを予約する同じショートコードを使用して SMS メッセージを送信するには、お客様のアカウントに割り当てられた専用ショートコードを予約できます。

ショートコードは、特定の送信先に SMS メッセージを送信するために使用できる 5 または 6 桁の数字です。ショートコードは、application-to-person (A2P) メッセージング、2 要素認証 (2FA)、マーケティング用に頻繁に使用されます。ショートコードを予約しない限り、Amazon SNS がメッセージにショートコー

176

Page 182: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

ドを割り当てます。このショートコードは他の Amazon SNS ユーザーと共有され、送信先やメッセージタイプ (トランザクションまたはプロモーション) によって異なります。ショートコードを予約することで、利用者はお客様の企業からのメッセージを簡単に見分けられるようになります。

専用ショートコードはお客様専用ですので、他のユーザーは同じショートコードを使用して利用者にメッセージを送ることはできません。したがって、ショートコードには、ブランドの信頼を脅かしたり、携帯電話キャリアがメッセージをブロックしたりする悪質な活動から保護する機能があります。

Amazon SNS はお客様のショートコードを使用して米国の電話番号にメッセージを送信できます。他の送信先については、Amazon SNS は必要に応じて長いコードや英数字のコードを割り当てます。

専用ショートコードは、1 秒あたり最大 100 SMS メッセージを送信できる高い配信率をサポートしています。ショートコードを予約した後、リクエストを送信してこの限度の引き上げをリクエストできます。

料金については、「Worldwide SMS Pricing」を参照してください。

専用ショートコードを予約するには

1. AWS Support Center に移動します。2. [Create case (ケースの作成)] を選択します。3. [Regarding (内容)] では、[Service Limit Increase (サービスの上限緩和を申請する)] を選択します。4. [Limit Type (制限タイプ)] で、[SNS Text Messaging (SNS テキストメッセージ)] を選択します。5. [Resource Type (リソースタイプ)] で、[Dedicated SMS Short Codes for US destinations (米国宛専用

SMS ショートコード)] を選択します。6. [Limit (制限)] で、お客様のユースケースに最も近いオプションを選択します。7. [New limit value] で、いくつショートコードを予約するか指定します (通常この値は 1 です)。8. [Use Case Description] で、ユースケースの概要を記入し、受取人がショートコードで送信されるメッ

セージにどのように登録するか説明します。9. 優先言語と連絡方法を選択し、[Submit] を選択します。

カスタマーサービスアソシエートが、利用者がお客様のショートコードに HELP または STOP で返答したときに表示されるカスタマイズされたメッセージを含む、ユースケースに関する追加情報についてご連絡いたします。AWS はお客様の代わりに携帯電話キャリアに連絡を取り、お客様のショートコードを設定します。ショートコードの場合、すべてのキャリアがユースケースを承認してショートコードを設定し、キャリアのネットワークで利用者がメッセージを送信できるようになるまで 6 ~ 12 週間かかります。AWS はショートコードの設定が完了したらお客様に通知します。

ショートコードの予約をやめるには、リクエストを AWS サポート まで送信します。

サポートされているリージョンおよび国現在、Amazon SNS は、以下の AWS リージョンで SMS メッセージングをサポートしています。

リージョン名 リージョン エンドポイント プロトコル

米国東部(バージニア北部)

us-east-1 sns.us-east-1.amazonaws.com

HTTP および HTTPS

米国西部 (オレゴン) us-west-2 sns.us-west-2.amazonaws.com

HTTP および HTTPS

欧州 (アイルランド) eu-west-1 sns.eu-west-1.amazonaws.com

HTTP および HTTPS

アジアパシフィック (東京)

ap-northeast-1 sns.ap-northeast-1.amazonaws.com

HTTP および HTTPS

177

Page 183: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

リージョン名 リージョン エンドポイント プロトコル

アジアパシフィック (シンガポール)

ap-southeast-1 sns.ap-southeast-1.amazonaws.com

HTTP および HTTPS

アジアパシフィック (シドニー)

ap-southeast-2 sns.ap-southeast-2.amazonaws.com

HTTP および HTTPS

Amazon SNS を使用して、以下の国とリージョンに SMS メッセージを送信できます。

Country or region ISO code Supports sender IDs Supports two-way SMS

Afghanistan AF    

Albania AL Yes  

Algeria DZ    

Andorra AD Yes  

Angola AO Yes  

Anguilla AI Yes  

Antigua and Barbuda AG Yes  

Argentina AR   Yes

Armenia AM Yes  

Aruba AW Yes  

Australia AU Yes Yes

Austria AT Yes Yes

Azerbaijan AZ    

Bahamas BS Yes  

Bahrain BH Yes  

Bangladesh BD    

Barbados BB Yes  

Belarus BY Yes1 (p. 185)  

Belgium BE   Yes

Belize BZ Yes  

Benin BJ Yes  

Bermuda BM Yes  

Bhutan BT Yes  

Bolivia BO Yes  

Bosnia and Herzegovina BA Yes  

178

Page 184: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

Country or region ISO code Supports sender IDs Supports two-way SMS

Botswana BW Yes  

Brazil BR   Yes

Brunei BN Yes  

Bulgaria BG Yes  

Burkina Faso BF Yes  

Burundi BI Yes  

Cambodia KH Yes  

Cameroon CM Yes  

Canada CA   Yes

Cape Verde CV Yes  

Cayman Islands KY    

Central African Republic CF Yes  

Chad TD Yes  

Chile CL   Yes

China2 (p. 185) CN   For support, contactsales.

Colombia CO    

Comoros KM Yes  

Cook Islands CK Yes  

Costa Rica CR    

Croatia HR   Yes

Cyprus CY Yes  

Czech Republic CZ   Yes

Democratic Republic ofthe Congo

CD    

Denmark DK Yes Yes

Djibouti DJ Yes  

Dominica DM Yes  

Dominican Republic DO    

Timor-Leste TL    

Ecuador EC    

Egypt EG Yes1 (p. 185)  

179

Page 185: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

Country or region ISO code Supports sender IDs Supports two-way SMS

El Salvador SV    

Equatorial Guinea GQ Yes  

Estonia EE Yes Yes

Ethiopia ET    

Faroe Islands FO Yes  

Fiji FJ Yes  

Finland FI Yes Yes

France FR Yes Yes

French Guiana GF    

Gabon GA Yes  

Gambia GM Yes  

Georgia GE Yes  

Germany DE Yes Yes

Ghana GH    

Gibraltar GI Yes  

Greece GR Yes  

Greenland GL Yes  

Grenada GD Yes  

Guadeloupe GP Yes  

Guam GU    

Guatemala GT   Yes

Guinea GN Yes  

Guinea-Bissau GW Yes  

Guyana GY Yes  

Haiti HT Yes  

Honduras HN   Yes

Hong Kong HK Yes Yes

Hungary HU   Yes

Iceland IS Yes  

India IN Yes1 (p. 185) Yes

Indonesia ID   Yes

180

Page 186: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

Country or region ISO code Supports sender IDs Supports two-way SMS

Iraq IQ    

Ireland IE Yes Yes

Israel IL Yes Yes

Italy IT Yes Yes

Ivory Coast CI    

Jamaica JM Yes  

Japan JP   Yes

Jordan JO Yes1 (p. 185)  

Kazakhstan KZ    

Kenya KE    

Kiribati KI    

Kuwait KW Yes1 (p. 185)  

Kyrgyzstan KG    

Laos LA    

Latvia LV Yes Yes

Lebanon LB Yes  

Lesotho LS Yes  

Liberia LR Yes  

Libya LY Yes  

Liechtenstein LI Yes  

Lithuania LT Yes Yes

Luxembourg LU Yes  

Macau MO Yes  

Former YugoslavRepublic of Macedonia

MK Yes  

Madagascar MG Yes  

Malawi MW Yes  

Malaysia MY   Yes

Maldives MV Yes  

Mali ML    

Malta MT Yes  

181

Page 187: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

Country or region ISO code Supports sender IDs Supports two-way SMS

Martinique MQ Yes  

Mauritania MR Yes  

Mauritius MU Yes  

Mexico MX   Yes

Moldova MD Yes  

Monaco MC    

Mongolia MO Yes  

Montenegro ME Yes  

Montserrat MS Yes  

Morocco MA    

Mozambique MZ    

Myanmar MM    

Namibia NA    

Nepal NP    

Netherlands NL Yes Yes

Netherlands Antilles AN Yes  

New Caledonia NC Yes  

New Zealand NZ   Yes

Nicaragua NI    

Niger NE Yes  

Nigeria NG    

Norway NO Yes Yes

Oman OM Yes  

Pakistan PK    

Palau PW    

Palestinian Territories PS    

Panama PA    

Papua New Guinea PG Yes  

Paraguay PY Yes  

Peru PE    

Philippines PH Yes1 (p. 185) Yes

182

Page 188: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

Country or region ISO code Supports sender IDs Supports two-way SMS

Poland PL Yes Yes

Portugal PT Yes Yes

Puerto Rico PR   Yes

Qatar QA Yes1 (p. 185)  

Republic of the Congo CG    

Reunion Island RE Yes  

Romania RO   Yes

Russia RU Yes1 (p. 185) Yes

Rwanda RW Yes  

Saint Kitts and Nevis KN    

Saint Lucia LC    

Saint Vincent and theGrenadines

VC    

Samoa WS Yes  

Sao Tome and Principe ST Yes  

Saudi Arabia SA Yes1 (p. 185)  

Senegal SN Yes  

Serbia RS Yes  

Seychelles SC Yes  

Sierra Leone SL Yes  

Singapore SG Yes Yes

Slovakia SK Yes Yes

Slovenia SI Yes Yes

Solomon Islands SB Yes  

Somalia SO Yes  

South Africa ZA   Yes

South Korea KR   Yes

South Sudan SS Yes  

Spain ES Yes Yes

Sri Lanka LK    

Suriname SR Yes  

183

Page 189: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

Country or region ISO code Supports sender IDs Supports two-way SMS

Swaziland SZ Yes  

Sweden SE Yes Yes

Switzerland CH Yes Yes

Taiwan TW   Yes

Tajikistan TJ Yes  

Tanzania TZ    

Thailand TH Yes1 (p. 185) Yes

Togo TG Yes  

Tonga TO Yes  

Trinidad and Tobago TT Yes  

Tunisia TN Yes  

Turkey TR   Yes

Turkmenistan TM Yes  

Turks and CaicosIslands

TC Yes  

Uganda UG Yes  

Ukraine UA Yes Yes

United Arab Emirates AE Yes1 (p. 185)  

United Kingdom GB Yes Yes

United States US   Yes

Uruguay UY    

Uzbekistan UZ Yes  

Vanuatu VU Yes  

Venezuela VE    

Vietnam VN Yes1 (p. 185)  

Virgin Islands, British VG Yes  

Virgin Islands, US VI Yes  

Yemen YE Yes  

Zambia ZM Yes  

Zimbabwe ZW Yes  

184

Page 190: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドサポートされているリージョンおよび国

Notes

1.Senders are required to use a pre-registered alphabetic sender ID. To request a sender ID from AWS サポート, file a support request. Some countries require senders to meet specific requirements or abideby certain restrictions in order to obtain approval. In these cases, AWS サポート might contact you foradditional information after you submit your sender ID request.

2.Senders are required to use a pre-registered template for each type of message that they plan to send.If a sender doesn’t meet this requirement, their messages will be blocked. To register a template, filea support request. Some countries require senders to meet additional, specific requirements or abideby certain restrictions in order to obtain approval. In these cases, AWS サポート might ask you foradditional information.

185

Page 191: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドX-Ray を使用したトピックのトラブルシューティング

Amazon SNS トピックのトラブルシューティング

このセクションでは、Amazon SNS トピックのトラブルシューティングについて説明します。

AWS X-Ray を使用した Amazon Simple NotificationService トピックのトラブルシューティング

AWS X-Ray は、アプリケーションが処理するリクエストに関するデータを収集し、データの表示とフィルタリングを可能にして、潜在的な問題や最適化の機会を識別できるようにします。アプリケーションに対するトレース対象のリクエストの場合、リクエスト、レスポンス、およびアプリケーションがダウンストリーム AWS リソース、マイクロサービス、データベース、HTTP ウェブ API に対して行う呼び出しの詳細な情報を表示できます。

Amazon SNS で X-Ray を使用して、アプリケーションを通過するメッセージをトレースおよび分析できます。AWS マネジメントコンソール を使用して、Amazon SNS およびアプリケーションが使用する他のサービス間の接続マップを表示できます。コンソールを使用して、平均レイテンシーや障害発生率などのメトリクスを表示することもできます。詳細については、AWS X-Ray 開発者ガイドの「Amazon SNS」および「AWS X-Ray」を参照してください。

186

Page 192: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデータ保護

Amazon SNS のセキュリティこのセクションでは、Amazon SNS のセキュリティおよび認証とアクセスコントロール、および AmazonSNS アクセスポリシー言語 についての情報を示します。

トピック• Amazon SNS でのデータ保護 (p. 187)• Amazon SNS での Identity and Access Management (p. 195)• Amazon SNS でのログ記録とモニタリング (p. 218)• Amazon SNS のコンプライアンス検証 (p. 225)• Amazon SNS でのレジリエンス (p. 226)• Amazon SNS でのインフラストラクチャセキュリティ (p. 226)• Amazon SNS セキュリティのベストプラクティス (p. 226)

Amazon SNS でのデータ保護次のセクションでは、Amazon SNS のデータ保護について説明します。

トピック• データの暗号化 (p. 187)• インターネットトラフィックのプライバシー (p. 193)

データの暗号化データ保護には、転送時 (Amazon SNS との間でデータを送受信するとき) のデータを保護するものと、保管時 (Amazon SNS データセンター内のディスクに格納されているとき) のデータを保護するものがあります。Secure Sockets Layer (SSL) またはクライアント側の暗号化を使用して、転送時のデータを保護できます。保管時のデータを保護するには、メッセージをデータセンターのディスクに保存する前に、Amazon SNS に暗号化をリクエストし、メッセージを受信したときに復号します。

トピック• 保管時の暗号化 (p. 187)• キーの管理 (p. 189)

保管時の暗号化サーバー側の暗号化 (SSE) では、機密データを暗号化されたトピックで送信できます。SSE では、AWSKey Management Service (AWS KMS) で管理されているキーを使用して、Amazon SNS キュー内のメッセージの内容が保護されます。

AWS マネジメントコンソール または AWS SDK for Java を使用した SSE の管理 (API の CreateTopicおよび SetTopicAttributes アクションを使用して KmsMasterKeyId を設定) については、「Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にする (p. 28)」を参照してください。AWSCloudFormation を使用した暗号化されたトピックの作成 (AWS::SNS::Topic リソースを使用してKmsMasterKeyId を設定) については、『AWS CloudFormation ユーザーガイド』を参照してください。

187

Page 193: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデータの暗号化

Amazon SNS が受信したメッセージはすぐに、SSE によって暗号化されます。メッセージは暗号化された形式で保存され、送信された場合のみ、Amazon SNS によって解読されます。

Important

SSE が有効なトピックへのリクエストでは必ず、HTTPS と署名バージョン 4 を使用する必要があります。他のサービスと暗号化されたトピックとの互換性については、サービスのドキュメントを参照してください。

AWS KMS は、安全で可用性の高いハードウェアとソフトウェアを組み合わせて、クラウド向けに拡張されたキー管理システムを提供します。AWS KMS と共に Amazon SNS を使用する場合は、メッセージデータを暗号化したデータキー (p. 188)も暗号化され、保護対象のデータと共に格納されます。

AWS KMS を使用する利点は次のとおりです。

• カスタマーマスターキー (CMK) (p. 188) を自分で作成して管理することができます。• AWS で管理されている Amazon SNS 用 CMK を使用することもできます。このキーは、各アカウント

およびリージョンで一意です。• AWS KMS のセキュリティ標準は、暗号化関連のコンプライアンス要件を満たすために役立ちます。

詳細については、AWS Key Management Service Developer Guideの「AWS Key Management Service とは何ですか?」および「AWS Key Management Service 暗号化の詳細」ホワイトペーパーを参照してください。

トピック• 暗号化スコープ (p. 188)• 重要な用語 (p. 188)

暗号化スコープ

SSE では、Amazon SNS トピック内のメッセージの本文が暗号化されます。

SSE では、以下は暗号化されません。

• トピックのメタデータ (トピック名と属性)• メッセージのメタデータ (件名、メッセージ ID、タイムスタンプ、属性)• トピックごとのメトリクス

Note

• メッセージが暗号化されるのは、トピックの暗号化が有効になった後に送信される場合のみです。Amazon SNS では、バックログメッセージの暗号化は行われません。

• トピックの暗号化が無効になっても、暗号化されたメッセージは暗号化された状態で維持されます。

重要な用語

以下の重要な用語は、SSE の機能を理解するうえで役立ちます。詳細については、『Amazon SimpleNotification Service API Reference』を参照してください。

データキー

データ暗号化キー (DEK) は、Amazon SNS メッセージの内容を暗号化します。

188

Page 194: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデータの暗号化

詳細については、AWS Key Management Service Developer Guideの「データキー」、および AWS 暗号化 SDK 開発者ガイドの「エンベロープ暗号化」を参照してください。

カスタマーマスターキー ID

AWS によってユーザーのアカウント内または別のアカウント内で管理されているカスタマーマスターキー (CMK) またはカスタム CMK— のエイリアス、エイリアス ARN、キー ID、またはキーARN。AWS で管理されている Amazon SNS 用 CMK のエイリアスは常に alias/aws/sns ですが、カスタム CMK のエイリアスは、alias/MyAlias のように設定できます。これらの CMK を使用して、Amazon SNS トピック内のメッセージを保護することができます。

Note

以下に留意してください。• 初めて AWS マネジメントコンソール を使用して AWS 管理の Amazon SNS 用 CMK をト

ピックに対して指定すると、AWS KMS は AWS 管理の Amazon SNS 用 CMK を作成します。

• または、SSE が有効になっているトピックに対して Publish アクションを初めて使用すると、AWS KMS は AWS 管理の Amazon SNS 用 CMK を作成します。

CMK の作成、CMK の使用方法を制御するポリシーの定義、CMK の使用状況の監査を行うには、AWS KMS コンソールの [カスタマー管理型のキー] セクション、または CreateKey AWS KMSアクションを使用します。詳細については、AWS Key Management Service Developer Guideの「カスタマーマスターキー (CMK)」および「キーの作成」を参照してください。CMK 識別子のその他の例については、AWS Key Management Service API Referenceの「KeyId」を参照してください。CMKID を見つける方法については、AWS Key Management Service Developer Guideの「キー ID と ARNを検索する」を参照してください。

Important

AWS KMS キーを使用するための追加料金はかかります。詳細については、「AWS KMS コストの見積もり (p. 189)」と「AWS Key Management Service 料金表」を参照してください。

キーの管理次のセクションでは、AWS Key Management Service (AWS KMS) で管理されるキーの操作方法について説明します。

トピック• AWS KMS コストの見積もり (p. 189)• AWS KMS アクセス許可を設定する (p. 190)• AWS KMS エラー (p. 192)

AWS KMS コストの見積もりAWS のコストを予測し、請求内容をより正確に把握するには、Amazon SNS でカスタマーマスターキー(CMK) が使用される頻度を調べることをお勧めします。

Note

コストは下の計算式でかなり正確に予測できますが、Amazon SNS の分散性により、実際のコストの方が高くなることがあります。

トピックあたりの API リクエスト数 (R) を計算するには、次の計算式を使用します。

R = B / D * (2 * P)

189

Page 195: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデータの暗号化

B は請求期間 (秒) です。

D は、データキー再利用期間 (秒 —Amazon SNS では、最大 5 分間データキーを再利用します) を表します。

P は、Amazon SNS トピックに送信する、公開中のプリンシパルの数です。

以下は計算の例です。正確な料金情報については、「AWS Key Management Service の料金」を参照してください。

例 1: AWS KMS API コール数の計算 (1 公開プリンシパル、1 トピック)

この例では、次のように想定しています。

• 請求期間は 1 月 1 日~ 31 日 (2,678,400 秒) です。• データキー再利用期間は 5 分 (300 秒) です。• 1 トピックあります。• 公開中のプリンシパルが 1 つあります。

2,678,400 / 300 * (2 * 1) = 17,856

例 2: AWS KMS API 呼び出し数の計算 (複数の公開プリンシパル、2 トピック)

この例では、次のように想定しています。

• 請求期間は 2 月 1 日~ 28 日 (2,419,200 秒) です。• データキー再利用期間は 5 分 (300 秒) です。• 2 トピックあります。• 最初のトピックには、公開中のプリンシパルが 3 つあります。• 2 つめのトピックには、公開中のプリンシパルが 5 つあります。

(2,419,200 / 300 * (2 * 3)) + (2,419,200 / 300 * (2 * 5)) = 129,024

AWS KMS アクセス許可を設定する

SSE を使用するには、トピックの暗号化およびメッセージの暗号化と復号を許可するよう AWS KMSキーポリシーを設定する必要があります。AWS KMS アクセス許可の例と詳細については、『AWS KeyManagement Service Developer Guide』の「AWS KMS API のアクセス許可: アクションとリソースのリファレンス」を参照してください。

Note

IAM ポリシーを使用して KMS キーのアクセス許可を管理することもできます。詳細については、「AWS KMS での IAM ポリシーの使用」を参照してください。Amazon SNS との間の送受信のグローバルなアクセス許可を設定できますが、AWS KMS ではIAM ポリシーの Resource セクションで、特定リージョンで CMK の完全 ARN を明示的に指定することが求められます。

また、カスタマーマスターキー (CMK) のキーポリシーで、必要なアクセス権限を許可していることを確認する必要があります。そのためには、Amazon SNS で暗号化されたメッセージを作成するプリンシパルと消費するプリンシパルをユーザーとして CMK キーポリシーで指定します。

または、Amazon SNS で暗号化されたメッセージを受け取るために発行およびサブスクライブするプリンシパルに割り当てられた IAM ポリシーで、必要な AWS KMS アクションと CMK ARN を指定できます。

190

Page 196: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデータの暗号化

詳細については、AWS Key Management Service Developer Guideの「AWS KMS CMK へのアクセスの管理」を参照してください。

SSE を使用したトピックへのメッセージの送信をユーザーに許可する

公開者には、カスタマーマスターキー (CMK) に対する kms:GenerateDataKey アクセス許可およびkms:Decrypt アクセス許可が必要です。

{ "Statement": [{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:default-regionus-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:*:123456789012:MyTopic" }]}

AWS サービスと暗号化されたトピックのイベントソース間の互換性を保つ

イベントは、複数の AWS サービスから Amazon SNS トピックに発行されます。これらのイベントソースで暗号化されたトピックを操作できるようにするには、以下のステップを実行します。

1. カスタマー管理の CMK を使用します。詳細については、『AWS Key Management Service DeveloperGuide』の「キーの作成」を参照してください。

2. AWS のサービスにアクセス許可として kms:GenerateDataKey* と kms:Decrypt を付与するには、次のステートメントを CMK ポリシーに追加します。

{ "Statement": [{ "Effect": "Allow", "Principal": { "Service": "service.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" }]}

イベントソース サービスプリンシパル

Amazon CloudWatch cloudwatch.amazonaws.com

Amazon CloudWatch Events events.amazonaws.com

Amazon DynamoDB dynamodb.amazonaws.com

Amazon S3 Glacier glacier.amazonaws.com

191

Page 197: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドデータの暗号化

イベントソース サービスプリンシパル

Amazon Redshift redshift.amazonaws.com

Amazon Simple Email Service ses.amazonaws.com

Amazon Simple Storage Service s3.amazonaws.com

AWS CodeCommit codecommit.amazonaws.com

AWS Database Migration Service dms.amazonaws.com

AWS Directory Service ds.amazonaws.com

AWS Snowball importexport.amazonaws.com

Note

一部の Amazon SNS イベントソースでは、AWS KMS キーポリシーで IAM ロール (サービスプリンシパルではありません) を指定する必要があります。

• Amazon EC2 Auto Scaling• Amazon Elastic Transcoder• AWS CodePipeline• AWS Config• AWS Elastic Beanstalk• AWS IoT

3. CMK を使用して、トピックの SSE を有効化 (p. 28)します。4. 暗号化されたトピックの ARN をイベントソースに追加します。

AWS KMS エラー

Amazon SNS および AWS KMS を使用する際、エラーが発生することがあります。次のリストは、エラーおよび考えられるトラブルシューティング策を示しています。

KMSAccessDeniedException

暗号化テキストは、存在しないキーまたはアクセス権限のないキーを参照しています。

HTTP ステータスコード: 400KMSDisabledException

指定された CMK が有効ではないため、リクエストが拒否されました。

HTTP ステータスコード: 400KMSInvalidStateException

指定されたリソースの状態がこのリクエストに対して有効ではないため、リクエストが拒否されました。詳細については、AWS Key Management Service Developer Guideの「キーステータスがカスタマーマスターキーの使用に与える影響」を参照してください。

HTTP ステータスコード: 400KMSNotFoundException

指定されたエンティティまたはリソースが見つからないため、リクエストが拒否されました。

192

Page 198: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドインターネットトラフィックのプライバシー

HTTP ステータスコード: 400KMSOptInRequired

サービスを利用するためには、AWS アクセスキー ID を取得する必要があります。

HTTP ステータスコード: 403KMSThrottlingException

リクエストは、制限が必要なために実行が拒否されました。スロットリングの詳細については、AWSKey Management Service Developer Guideの「制限」を参照してください。

HTTP ステータスコード: 400

インターネットトラフィックのプライバシーAmazon SNS の Amazon Virtual Private Cloud (Amazon VPC) エンドポイントは、Amazon SNS のみへの接続を許可する VPC 内の論理エンティティです。VPC はリクエストを Amazon SNS にルーティングし、レスポンスを VPC にルーティングします。以下のセクションでは、VPC エンドポイントの使用と VPC エンドポイントポリシーの作成について説明します。

Amazon Virtual Private Cloud (Amazon VPC) を使用して AWS リソースをホストする場合は、VPC とAmazon SNS の間にプライベート接続を確立できます。この接続では、メッセージをパブリックインターネット経由で送信せずに、Amazon SNS トピックに発行できます。

Amazon VPC は、お客様の定義する仮想ネットワークで AWS リソースを起動するために使用できるAWS のサービスです。VPC を使用すると、IP アドレス範囲、サブネット、ルートテーブル、ネットワークゲートウェイなどのネットワーク設定を制御できます。VPC を Amazon SNS に接続するには、インターフェイス VPC エンドポイントを定義します。このタイプのエンドポイントにより、VPC を AWSサービスに接続できるようになります。また、インターネットゲートウェイや、ネットワークアドレス変換 (NAT) インスタンス、VPN 接続を必要とせずに、信頼性の高いスケーラブルな方法で VPC を AmazonSNS に接続できるようになります。詳細については、『Amazon VPC ユーザーガイド』の「インターフェイス VPC エンドポイント」を参照してください。

このセクションの情報は、Amazon VPC のユーザーを対象にしています。詳細や、VPC の作成開始については、『Amazon VPC ユーザーガイド』の「Amazon VPC の開始方法」を参照してください。

Note

VPC エンドポイントでは、Amazon SNS トピックをプライベート IP アドレスにサブスクライブすることはできません。

トピック• Amazon SNS 用の Amazon VPC エンドポイントの作成 (p. 193)• Amazon SNS の Amazon VPC エンドポイントポリシーの作成 (p. 195)

Amazon SNS 用の Amazon VPC エンドポイントの作成Amazon VPC から Amazon SNS トピックにメッセージを発行するには、インターフェイス VPC エンドポイントを作成します。次に、VPC で管理するネットワーク内でトラフィックを維持しながら、トピックにメッセージを発行できます。

次の情報を使用してエンドポイントを作成し、VPC と Amazon SNS 間の接続をテストします。一から開始する作業に役立つチュートリアルについては、「チュートリアル: Amazon VPC から Amazon SNS メッセージをプライベートで発行する (p. 33)」を参照してください。

193

Page 199: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドインターネットトラフィックのプライバシー

エンドポイントの作成

AWS マネジメントコンソール、AWS CLI、AWS SDK、Amazon SNS API、または AWS CloudFormationを使用して、VPC に Amazon SNS エンドポイントを作成できます。

Amazon VPC コンソールまたは AWS CLI を使用してエンドポイントを作成および設定する方法については、Amazon VPC ユーザーガイド の「インターフェイスエンドポイントの作成」を参照してください。

Note

エンドポイントを作成するとき、VPC の接続先のサービスとして Amazon SNS を指定します。Amazon VPC コンソールで、このサービス名は選択したリージョンによって異なります。たとえば、米国東部(バージニア北部) を選択した場合、サービス名は com.amazonaws.us-east-1.sns です。

AWS CloudFormation を使用してエンドポイントを作成および設定する方法については、AWSCloudFormation ユーザーガイド の「AWS::EC2::VPCEndpoint」リソースを参照してください。

VPC と Amazon SNS との間の接続のテスト

Amazon SNS のエンドポイントを作成したら、VPC から Amazon SNS トピックにメッセージを発行できます。この接続をテストするには、以下の手順を実行します。

1. VPC にある Amazon EC2 インスタンスに接続します。接続の詳細については、Amazon EC2 のドキュメントの「Linux インスタンスへの接続」または「Windows インスタンスへの接続」を参照してください。

たとえば、SSH クライアントを使用して Linux インスタンスに接続するには、ターミナルから以下のコマンドを実行します。

$ ssh -i ec2-key-pair.pem ec2-user@instance-hostname

ここでは次のとおりです。

• ec2-key-pair.pem は、インスタンスの作成時に Amazon EC2 から提供されたキーペアを含むファイルです。

• instance-hostname は、インスタンスのパブリックホスト名です。Amazon EC2 コンソールでホスト名を取得するには: [インスタンス] を選択してから、インスタンスを選択して、[パブリック DNS(IPv4)] の値を見つけます。

2. インスタンスから、AWS CLI で Amazon SNS publish コマンドを使用します。以下のコマンドを使用して、シンプルなメッセージをトピックに送信できます。

$ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"

ここでは次のとおりです。

• aws-region は、トピックがある AWS リージョンです。• sns-topic-arn は、トピックの Amazon リソースネーム (ARN) です。Amazon SNS コンソールか

ら ARN を取得するには: [トピック] を選択し、トピックを検索して、[ARN] 列でその値を見つけます。

メッセージが Amazon SNS によって正常に受信された場合、ターミナルには以下のようなメッセージID が表示されます。

{ "MessageId": "6c96dfff-0fdf-5b37-88d7-8cba910a8b64"

194

Page 200: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドIdentity and Access Management

}

Amazon SNS の Amazon VPC エンドポイントポリシーの作成Amazon SNS の Amazon VPC エンドポイントのポリシーを作成できます。このポリシーでは以下を指定します。

• アクションを実行できるプリンシパル。• 実行可能なアクション。• このアクションを実行できるリソース。

詳細については、Amazon VPC ユーザーガイド の「VPC エンドポイントによるサービスのアクセスコントロール」を参照してください。

次の例の VPC エンドポイントポリシーでは、Amazon SNS トピック (MyTopic) に対する発行を IAMユーザー (MyUser) に許可することを指定します。

{ "Statement": [{ "Action": ["sns:Publish"], "Effect": "Allow", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic", "Principal": { "AWS": "arn:aws:iam:123456789012:user/MyUser" } }]}

以下は拒否されます。

• Amazon SNS の他の API アクション (sns:Subscribe や sns:Unsubscribe など)。• この VPC エンドポイントを使用しようとする IAM の他のユーザーおよびルール。• Amazon SNS の他のトピックに対する MyUser の発行。

Note

IAM ユーザーは、依然として VPC 外から Amazon SNS の他の API アクションを使用できます。

Amazon SNS での Identity and AccessManagement

Amazon SNS へのアクセスには、AWS によってリクエストの認証に使用される認証情報が必要です。これらの認証情報には、Amazon SNS トピックやメッセージなどの AWS リソースへのアクセス権限が必要です。次のセクションでは、AWS Identity and Access Management (IAM) と Amazon SNS を使用して、リソースにアクセスできるユーザーを制御することで、リソースをセキュリティで保護する方法について詳しく説明します。

トピック• 認証 (p. 196)• アクセスコントロール (p. 197)

195

Page 201: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド認証

• Amazon SNS でのアクセス管理の概要 (p. 197)• Amazon SNS でのアイデンティティベースのポリシーの使用 (p. 210)• Amazon SNS で一時的なセキュリティ認証情報を使用する (p. 216)• Amazon SNS API のアクセス許可: アクションとリソースのリファレンス (p. 216)

認証AWS には、次のタイプのアイデンティティでアクセスできます。

• AWS アカウントのルートユーザー – AWS アカウントを初めて作成する場合は、このアカウントのすべての AWS サービスとリソースに対して完全なアクセス権限を持つシングルサインインアイデンティティで始めます。このアイデンティティは AWS アカウント ルートユーザー と呼ばれ、アカウントの作成に使用した E メールアドレスとパスワードでのサインインによりアクセスします。強くお勧めしているのは、日常的なタスクには、それが管理者タスクであっても、ルートユーザーを使用しないことです。代わりに、最初の IAM ユーザーを作成するためだけに ルートユーザー を使用するというベストプラクティスに従います。その後、ルートユーザー認証情報を安全な場所に保管し、それらを使用して少数のアカウントおよびサービス管理タスクのみを実行します。

• IAM ユーザー – IAM ユーザーは、特定のカスタム権限 (たとえば、Amazon SNS で a topic を作成するアクセス権限) を持つ AWS アカウント内のアイデンティティです。IAM のユーザー名とパスワードを使用して、AWS マネジメントコンソール、AWS ディスカッションフォーラム、AWS Support Center などのセキュリティ保護された AWS ウェブページにサインインできます。

 

ユーザー名とパスワードに加えて、各ユーザーのアクセスキーを生成することもできます。いくつかのSDK の 1 つまたは AWS Command Line Interface (CLI) を使ってプログラムで AWS サービスにアクセスするときに、これらのキーを使用できます。SDK と CLI ツールでは、アクセスキーを使用してリクエストが暗号で署名されます。AWS ツールを使用しない場合は、リクエストに自分で署名する必要があります。Amazon SNS supports では、署名バージョン 4 がサポートされています。これは、インバウンド API リクエストを認証するためのプロトコルです。リクエストの認証の詳細については、『AWSGeneral Reference』の「署名バージョン 4 の署名プロセス」を参照してください。

 • IAM ロール – IAM ロールは、特定のアクセス権限を持ち、アカウントで作成できる IAM アイデンティ

ティです。IAM ロールは、AWS で許可/禁止する操作を決めるアクセス権限ポリシーが関連付けられている AWS アイデンティティであるという点で、IAM ユーザーと似ています。ただし、ユーザーは 1 人の特定の人に一意に関連付けられますが、ロールはそれを必要とする任意の人が引き受けるようになっています。また、ロールには標準の長期認証情報 (パスワードやアクセスキーなど) も関連付けられません。代わりに、ロールを引き受けると、ロールセッション用の一時的なセキュリティ認証情報が提供されます。 IAM ロールと一時的な認証情報は、次の状況で役立ちます。

 • フェデレーティッドユーザーアクセス – IAM ユーザーを作成する代わりに、AWS Directory Service、

エンタープライズユーザーディレクトリ、またはウェブ ID プロバイダーに既存のアイデンティティを使用できます。このようなユーザーはフェデレーティッドユーザーと呼ばれます。AWS では、IDプロバイダーを通じてアクセスがリクエストされたとき、フェデレーティッドユーザーにロールを割り当てます。フェデレーティッドユーザーの詳細については、IAM ユーザーガイドの「フェデレーティッドユーザーとロール」を参照してください。

 • AWS のサービスのアクセス – サービスロールは、サービスがお客様に代わってお客様のアカウントで

アクションを実行するために引き受ける IAM ロールです。一部の AWS のサービス環境を設定するときに、サービスが引き受けるロールを定義する必要があります。このサービスロールには、サービスが必要とする AWS のリソースにサービスがアクセスするために必要なすべてのアクセス権限を含める必要があります。サービスロールはサービスによって異なりますが、多くのサービスロールでは、

196

Page 202: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアクセスコントロール

そのサービスの文書化された要件を満たしている限り、アクセス権限を選択することができます。サービスロールは、お客様のアカウント内のみでアクセスを提供します。他のアカウントのサービスへのアクセス権を付与するためにサービスロールを使用することはできません。IAM 内部からロールを作成、修正、削除できます。たとえば、Amazon Redshift がお客様に代わって Amazon S3 バケットにアクセスし、バケットからデータを Amazon Redshift クラスターにロードすることを許可するロールを作成できます。詳細については、IAM ユーザーガイドのAWS サービスにアクセス権限を委任するロールの作成を参照してください。

 • Amazon EC2 で実行中のアプリケーション – IAM ロールを使用して、EC2 インスタンスで実行さ

れ、AWS CLI または AWS API リクエストを作成しているアプリケーションの一時的な認証情報を管理できます。これは、EC2 インスタンス内でのアクセスキーの保存に推奨されます。AWS ロールを EC2 インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を取得することができます。詳細については、IAM ユーザーガイドの「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス権限を付与する」を参照してください。

アクセスコントロールAmazon SNS には、AWS Identity and Access Management (IAM) ポリシーに使用されているのと同じ言語で記述されたポリシーを使用する独自のリソースベースのアクセス許可システムがあります。これは、Amazon SNS ポリシーや IAM ポリシーで同様の結果を達成できることを意味します。

Note

すべての AWS アカウントはアカウント内でユーザーにアクセス権限を委任できることを理解するのが重要です。クロスアカウントアクセスによって、追加のユーザーを管理しなくても、AWSリソースへのアクセスを共有することができます。クロスアカウントアクセスの使用方法については、IAM ユーザーガイドの「クロスアカウントアクセスを有効にする」を参照してください。

Amazon SNS でのアクセス管理の概要このセクションでは、アクセスポリシー言語 を使用してポリシーを書くにあたって理解しておくべき基本的なコンセプトを説明します。また アクセスポリシー言語 と連携したアクセスコントロール法の一般的なプロセスやポリシーの評価方法も合わせて説明します。

トピック• アクセスコントロールを使用する場合 (p. 197)• 主要なコンセプト (p. 198)• アーキテクチャの概要 (p. 200)• アクセスポリシー言語 の使用 (p. 201)• 評価論理 (p. 202)• Amazon SNS アクセスコントロールのケース例 (p. 206)

アクセスコントロールを使用する場合リソースへのアクセス許可やアクセス拒否の方法に高い柔軟性があります。ただし、一般的なユースケースは、次に示すように非常にシンプルなものとなっています。

• 他の AWS アカウントに対して、特定のトピックアクションタイプ (パブリッシュなど) を許可します。詳細については、「トピックへのアクセス権を AWS アカウントに付与する (p. 207)」を参照してください。

197

Page 203: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

• HTTPS プロトコルに対してのみ、トピックのサブスクリプションを制限します。詳細については、「HTTPS へのサブスクリプションの制限 (p. 207)」を参照してください。

• Amazon SQS キューにメッセージを発行することを Amazon SNS に許可する必要があります。詳細については、「Amazon SQS キューにメッセージを発行する (p. 208)」を参照してください。

主要なコンセプト以下のセクションでは、アクセスポリシー言語 を使用するにあたって理解しておくべきコンセプトを説明します。基本的なものから順に分かりやすく説明していきます。

トピック• アクセス許可 (p. 198)• Statement (p. 198)• ポリシー (p. 198)• 発行者 (p. 199)• Principal (p. 199)• アクション (p. 199)• リソース (p. 199)• 条件とキー (p. 199)• リクエスタ (p. 200)• 評価 (p. 200)• Effect (p. 200)• デフォルトで拒否 (p. 200)• 許可 (p. 200)• 明示的な拒否 (p. 200)

アクセス許可

アクセス権限とは、特定のリソースへのある種のアクセスに対し、許可または拒否をするというコンセプトです。アクセス許可は、基本的に「A は、条件 D に該当する C を対象とするアクション B の実行を許可または禁止されている」という形態をとります。 例えば、ジェーン (A) は、トピック (C) に対するパブリッシュ (B) を許可されている。ただし、ジェーンが、HTTP プロトコルを使用する場合に限る (D)、という具合です。ジェーンがトピック A をパブリッシュした時点で、ジェーンにアクセス権限があるかどうか、またそのリクエストが定められているアクセス権限の条件を満たしているかどうかが、サービスによってチェックされます。

Statement

ステートメントとは、アクセスポリシー言語 で使用するアクセス権限を定義する書式です。1 つのステートメントで 1 つのアクセス権限を定義します。このステートメントの集まり(コンテナドキュメント)のことを、ポリシー(次のコンセプト参照)といいます。

ポリシー

ポリシーとは、1 つ以上のステートメントのコンテナの役目を果たすドキュメント(アクセスポリシー言語 に記述)です。例えば、1 つのポリシーには「ジェーンは E メールプロトコルの使用をサブスクライブすることができる」というステートメントと、「ボブはトピック A をパブリッシュすることができない」というステートメント、計 2 つのステートメントを含むことができます。以下に示す図に相当するシナリオでは、「ジェーンは E メールプロトコルの使用をサブスクライブすることができる」というステートメントと、「ボブはトピック A をパブリッシュすることができない」というステートメント、計 2 つのポリシーを含むことができます。

198

Page 204: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

発行者

発行者とは、リソース用のアクセス権限についてのポリシーを記述する人物です。発行者は当然のこととして、リソースの所有者になります。AWS のサービスでは、リソースを所有していない AWS のユーザーに対し、ポリシー作成の許可を与えていません。たとえば、ジョンが自ら所有するリソースへのアクセス許可を定義するポリシーを作成して提出した場合、AWS ではジョンが本人であることが認証されます。

Principal

プリンシパルとは、ポリシーのアクセス権限を適用される個人またはグループを指します。「A は、条件D に該当する C を対象とするアクション B の実行を許可または禁止されている」というポリシーにおいては、A がプリンシパルに相当します。 ポリシーでは、「誰でも」プリンシパルに設定することができます(たとえば、ワイルドカードを指定して全員に設定できます)。たとえば、リクエスタの実際のアイデンティティをベースにアクセス制限をかけたくなければ、リクエスタの IP アドレスのような、他のアイデンティティの特性をもとにして行うことができます。

アクション

アクションとは、プリンシパルに対し、実行が許可されているアクティビティです。「A は、条件 D に該当する C を対象とするアクション B の実行を許可または禁止されている」というポリシーにおいては、文字通り B がアクションに相当します。 通常、アクションとは、リクエストに埋め込まれて AWS に渡されるオペレーションのことです。たとえば、ジェーンが Amazon SNS に というリクエストを送信します。Action=Subscribe1 つのポリシーに 1 つまたは複数のアクションを指定することができます。

リソース

リソースとは、プリンシパルがアクセスを要求するオブジェクトのことです。「A は、条件 D に該当する C を対象とするアクション B の実行を許可または禁止されている」というポリシーにおいては、C がリソースに相当します。

条件とキー

条件とは、アクセス権限についての制限や詳細のことです。「A は、条件 D に該当する C を対象とするアクション B の実行を許可または禁止されている」というポリシーにおいては、文字通り D が条件に相当します。 ポリシーの中でも、記述が最も詳細かつ複雑になるのが、この条件部分です。よく使用される条件の設定項目は以下のとおりです。

• 日時(特定の日付以前に到着したリクエストのみ処理するなど)• IP アドレス(特定の CIDR 範囲内の IP アドレスからのリクエストのみ処理するなど)

キーは、アクセス制限に使用される基本項目です。たとえば、リクエストの日時がこれに相当します。

199

Page 205: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

制限は、条件とキーの両方を使用して定義します。具体例を挙げて説明します。2010 年 5 月 30 日以前のアクセスを制限するには、DateLessThan 条件を使用します。キーは aws:CurrentTime を使用し、値を 2010-05-30T00:00:00Z に設定します。使用する条件やキーは AWS により定義されています。AWS サービス自体 (Amazon SQS や Amazon SNS など) によりサービス固有のキーが定義されている場合もあります。詳細については、「Amazon SNS API のアクセス許可: アクションとリソースのリファレンス (p. 216)」を参照してください。

リクエスタ

リクエスタとは、AWS サービスにリクエストを送信する人物、または特定のリソースへのアクセスを要求する人物です。リクエスタが AWS に送信するリクエストの内容は、基本的には次のようなものです。「条件 D に該当する C に対してアクション B を実行することを許可してください」

評価

評価とは、AWS サービスが受信したリクエストを拒否または許可するかを、該当するポリシーに基づいて判断するプロセスのことです。評価論理の詳細については、評価論理 (p. 202)を参照してください。

Effect

エフェクトとは、評価時にポリシーのステートメントによって返される結果のことです。この値はポリシーのステートメントに特定します。使用可能な値は deny と allow です。

たとえば、南極大陸からのすべてのリクエストを拒否するステートメントを記述した場合、リクエストの送信元 IP アドレスが南極大陸に割り当てられているものであれば、エフェクトの値は deny となります。また前述の代案として、南極大陸からではないすべてのリクエストを許可するというステートメントも記述できます。この場合、リクエストの送信元が南極大陸でなければ、エフェクトの値は allow となります。2 つのステートメントは同じことを行うように見えますが、アクセスポリシー言語 の論理上では異なるものです。詳細については、「評価論理 (p. 202)」を参照してください。

エフェクトに特定できる値は allow と deny の 2 つだけですが、ポリシーの評価結果には、デフォルトで拒否、許可および明示的な拒否の 3 種類があります。詳細については、以下のコンセプトおよび評価論理 (p. 202)を参照してください。

デフォルトで拒否

デフォルトで拒否とは、ポリシーに許可または明示的な拒否が指定されていない場合に、デフォルトで適用される拒否のことです。

許可

許可とは、ステートメントに effect=allow が指定されていて、許可条件がすべて満たされている場合に返される結果です。たとえば、2010 年 4 月 30 日午後 1 時までに受信されたリクエストが許可されます。許可は、すべてのデフォルトで拒否に優先して適用されますが、明示的な拒否が 1 つでもあれば適用されません。

明示的な拒否

明示的な拒否とは、ステートメントに effect=deny が指定されていて、拒否条件がすべて満たされている場合に返される結果です。たとえば、送信元が南極大陸であるすべてのリクエストが拒否されます。その他のポリシーによって許可されている場合においても、南極から来たリクエストに対しては常に拒否します。

アーキテクチャの概要以下の図と表に、リソースのアクセスコントロールに関与する主要コンポーネントとそのインタラクティブな関わり合いを表します。

200

Page 206: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

1 リソース所有者。

2 リソース (AWS のサービスに含まれているもの、Amazon SQS キューなど)。

3 ポリシー。

通常、1 つのリソースに 1 つのポリシーを適用しますが、複数のポリシーを適用することも可能です。AWS サービスには、ポリシーのアップロードや管理に使用できる API が用意されています。

4 リクエスタ、および AWS サービスに対するリクエスト。

5 アクセスポリシー言語 評価コード。

AWS サービス内のコードセットです。受信したリクエストと該当するポリシーを照合して、リクエスタにリソースへのアクセスを許可するかどうかを判定します。このサービスによる判定の詳細については、評価論理 (p. 202)を参照してください。

アクセスポリシー言語 の使用以下の図と表は、アクセスコントロールと アクセスポリシー言語 の連携方法の通常プロセスを表しています。

201

Page 207: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

アクセスコントロールと アクセスポリシー言語 を使用したプロセス

1 リソース用ポリシーを記述します。

たとえば、Amazon SNS トピックのアクセス権限を指定するポリシーを記述します。

2 AWS にポリシーをアップロードします。

AWS サービスでは、ポリシーのアップロードに使用できる API を提供しています。たとえば、特定の Amazon SNS トピック用のポリシーをアップロードするために Amazon SNSSetTopicAttributes アクションを使用します。

3 ある人物から、リソースの使用許可を求めるリクエストが送信されます。

たとえば、ユーザーがトピックの 1 つを利用するために Amazon SNS へリクエストを送信します。

4 どのポリシーがリクエストに適用可能であるか、AWS サービスによって決定されます。

たとえば、Amazon SNS がすべての利用可能な Amazon SNS ポリシーを調べ、リソースの内容とリクエスタに基づいて、どのポリシーが適用可能であるかを決定します。

5 AWS サービスがポリシーを評価します。

例えば、Amazon SNS は、ポリシーを評価し、トピックの使用許可をリクエスタに付与するかどうかを決定します。決定論理の詳細については、評価論理 (p. 202)を参照してください。

6 AWS サービスにおいては、リクエスタを拒否するか、またはプロセスを継続するかのどちらかが行われます。

たとえば、ポリシーの評価結果に基づいて、サービスによって「アクセス拒否」エラーがリクエスタに返されるか、リクエストのプロセスを継続するかのどちらかが行われます。

評価論理評価時の目標は、特定のリクエスト付与を許可するか拒否するかを判断することです。評価論理は、以下の複数の基本ルールに従っています。

• デフォルトでは、リソースの使用許可を求めるリクエストについては、リクエスタが自分自身である場合を除いて、拒否を適用する

• 許可はすべてのデフォルトで拒否に優先する• 明示的な拒否はすべての許可に優先する

202

Page 208: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

• ポリシー評価の順序は重要ではない

以下のフローチャートと考察では、決定方法についての詳細説明を紹介します。

1 決定はデフォルトで拒否から始まります。

2 次に、エンフォースメントコードは、リクエストに適用可能なポリシーすべてを、リソース、プリンシパル、アクション、および条件に基づいて評価します。

エンフォースメントコードによるポリシー評価の順序は重要ではありません。

3 前述のすべてのポリシーにおいて、リクエストに適応する明示的な拒否のインストラクションがエンフォースメントコードによって検索されます。

仮に 1 つでも見つかった場合、エンフォースメントコードは拒否の決定を返し、プロセスを終了します (これは明示的な拒否となります。詳細については、明示的な拒否 (p. 200)を参照してください)。

203

Page 209: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

4 明示的な拒否が見つからなかった場合、リクエストに適応する許可のインストラクションがエンフォースメントコードによって検索されます。

仮に 1 つでも見つかった場合、エンフォースメントコードは許可の決定を返し、プロセスは完了します (サービスはリクエストのプロセスを継続します)。

5 許可が見つからなかった場合、最終決定は「拒否」となります (明示的な拒否または許可が見つからない場合、デフォルトで拒否としてみなされるためです。詳細については、デフォルトで拒否 (p. 200)を参照してください)。

明示的な拒否とデフォルトで拒否の相互作用

ポリシーがリクエストに直接適用されない場合の結果は、[デフォルトで拒否] となります。例えば、ユーザーが Amazon SNS の使用をリクエストするが、トピックのポリシーではユーザーの AWS アカウントを全く参照しない場合、そのポリシーの適用結果は [デフォルトで拒否] となります。

ステートメントの条件が満たされていない場合においても、ポリシーの結果としてデフォルトで拒否となります。ステートメントのすべての条件が満たされている場合、ポリシーのエフェクトエレメントの値に基づいて、ポリシーの結果は許可または明示的な拒否のどちらかとなります。条件が満たされていない際にポリシーが行為を特定していない場合、デフォルトの結果としてデフォルトで拒否となります。

たとえば、南極大陸から来るリクエストを防ぐとします。その場合、南極大陸から来ていないリクエストにのみ許可を与えるポリシー (ポリシー A1 とする) を記述します。以下の図はポリシーについて解説しています。

リクエストがアメリカから送られてきた場合、条件を満たしています (リクエストが南極大陸からのものでないため)。従って、そのリクエストは許可されます。リクエストが南極大陸から送られてきた場合、条件を満たしていないため、ポリシーの結果としてデフォルトで拒否となります。

以下の図のとおり、ポリシー (ポリシー A2 とする) を書き換えることにより、結果を明示的な拒否に変えることができます。南極大陸から送られてきた場合、ポリシーによってリクエストが明示的に拒否されます。

204

Page 210: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

リクエストが南極大陸から送られてきた場合、条件を満たしているため、ポリシーの結果として明示的な拒否となります。

デフォルトで拒否と明示的な拒否の区別は重要です。許可によってデフォルトで拒否は上書きできますが、明示的な拒否は上書きできないためです。たとえば、リクエストが 2010 年 6 月 1 日に到着すれば許可するという別のポリシーがあるとしましょう。このポリシーが、南極大陸からのアクセスを制限しているポリシーと併用されている場合、全体の結果にどのような影響を及ぼすでしょうか? 日付ベースのポリシー (ポリシー B とする) が前述のポリシー A1 および A2 と併用されている場合、全体の結果が比較されます。シナリオ 1 は、ポリシー A1 とポリシー B が併用されている場合、シナリオ 2 は、ポリシー A2 とポリシー B が併用されている場合です。以下の図と考察は、2010 年 6 月 1 日に南極大陸からリクエストが来た場合についての結果を示しています。

205

Page 211: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

このセクションの最初に説明したとおり、シナリオ 1 においては、ポリシー A1 はデフォルトで拒否を返します。2010 年 6 月 1 日に到着したリクエストは、当然のことながら許可されるため、ポリシー B は許可を返します。ポリシー B による許可は、ポリシー A1 のデフォルトで拒否に優先するため、結果としてリクエストは許可されます。

このセクションの最初に説明したとおり、シナリオ 2 においては、ポリシー A2 は明示的な拒否を返します。再度、ポリシー B は許可を返します。ポリシー A2 による明示的な拒否は、ポリシー B の許可に優先するため、結果としてリクエストは拒否されます。

Amazon SNS アクセスコントロールのケース例トピック

• トピックへのアクセス権を AWS アカウントに付与する (p. 207)• HTTPS へのサブスクリプションの制限 (p. 207)• Amazon SQS キューにメッセージを発行する (p. 208)

206

Page 212: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

• 任意の AWS リソースがトピックに発行することを許可する (p. 208)• Amazon S3 バケットがトピックに発行することを許可する (p. 209)• AWS アカウントの任意の CloudWatch アラームが別の AWS アカウントの Amazon SNS トピックに

発行することを許可する (p. 210)• Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限する (p. 210)

このセクションでは、アクセスコントロールの一般的なユースケース例をいくつか紹介します。

トピックへのアクセス権を AWS アカウントに付与する

Amazon SNS システムにトピックがあるとします。最も簡単なケースとして、特定のトピックアクション(例: パブリッシュ) へのアクセスを 1 つ以上の AWS アカウントに許可するとします。

これは、Amazon SNS API アクション AddPermission を使用して実行できます。これには、トピック、AWS アカウント ID リスト、アクションリスト、ラベルが必要ですが、トピックのアクセスコントロールポリシー内に新規ステートメントが自動的に作成されます。この場合、 Amazon SNS により新規ポリシーステートメントが自動的に作成されます。手動でポリシーを記述する必要はありません。ラベルと共に RemovePermission を呼び出すことによって、後日ポリシーステートメントを削除することができます。

たとえば、トピック arn:aws:sns:AddPermission:us-east-2:MyTopic を対象に 444455556666 を呼び出す場合 (AWS アカウント ID1111-2222-3333、Publish アクション、ラベル grant-1234-publish を使用)、Amazon SNS は次のアクセスコントロールポリシーステートメントを作成して挿入します。

{ "Statement": [{ "Sid": "grant-1234-publish", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Publish"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic" }]}

一度このステートメントが追加されてしまえば、AWS アカウント 1111-2222-3333 のユーザーはトピックへのメッセージをパブリッシュすることができます。

HTTPS へのサブスクリプションの制限

次の例では、通知配信プロトコルを HTTPS に制限します。

Amazon SNS AddPermission アクションでは、トピックへのアクセスを許可できるだけです。プロトコル制限を指定するには、独自のポリシーを記述する必要があります。つまり、独自のポリシーを記述し、Policy アクションを使用してトピックの SetTopicAttributes 属性をその新しいポリシーに設定します。

以下の全ポリシーの用例は、AWS アカウント ID 1111-2222-3333 にトピックからの通知サブスクリプション能力を付与します。

{ "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "111122223333" },

207

Page 213: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

"Action": ["sns:Subscribe"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "sns:Protocol": "https" } } }]}

Amazon SQS キューにメッセージを発行する

このユースケースでは、トピックから Amazon SQS キューへのメッセージをパブリッシュするものとします。Amazon SNS のように、Amazon SQS も Amazon のアクセスコントロールポリシー言語を使用します。Amazon SNS からのメッセージ送信許可するには、キューにおいてポリシーを設定するためにAmazon SQS アクション SetQueueAttributes を使用することが必要となります。

Amazon SQS AddPermission アクションでは、条件付きポリシーステートメントを作成できません。これを作成するには、独自のポリシーを記述する必要があります。

Note

次の例は、Amazon SQS ポリシー (キューへのアクセスコントロール) を示すもので、AmazonSNS ポリシー (トピックへのアクセスコントロール) を示すものではありません。アクションとは Amazon SQS アクションのことで、リソースとはキューの Amazon ResourceName(ARN)のことです。アクションと共にキューの属性を QueueArn 取得することにより、GetQueueAttributes キューの ARN を決定する事ができます。

{ "Statement": [{ "Sid": "Allow-SNS-SendMessage", "Effect": "Allow", "Principal": "*", "Action": ["sqs:SendMessage"], "Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic" } } }]}

このポリシーには、aws:SourceArn キューへ送信されたメッセージのソースに基づいたキューへのアクセス制限のための条件が使用されます。組織の所有するトピックの 1 つから送信されたメッセージであった場合、 Amazon SNS に対し、キューからのメッセージ送信を許可するために、このタイプのポリシーを使用することができます。この場合は、arn:aws:sns:us-east-2:444455556666:MyTopic が ARN であるトピックの 1 つを指定します。

前述のポリシーを例として、Amazon SQS ポリシーを記述したり、特定のキューに追加することができます。これによって、Amazon SNS および他の AWS のサービスhwのアクセスを付与します。AmazonSNS は新しく作成されたすべてのトピックにデフォルトのポリシーを付与します。デフォルトのポリシーでは、他のすべての AWS サービスに対するトピックへのアクセスを付与します。このデフォルトポリシーは aws:SourceArn 条件を仕様して、お客様が所有する AWS リソースに代わる場合にのみ AWSサービスがお客様のトピックにアクセスすることを確実にします。

任意の AWS リソースがトピックに発行することを許可する

この場合、他の AWS アカウントのリソース (Amazon S3 バケット、Amazon EC2 インスタンス、Amazon SQS キューなど) がお客様のトピックへのパブリッシュができるように、トピックのポリ

208

Page 214: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド概要

シーを設定します。この用例は、お客様が自身でポリシーの記述をするものと仮定され、お客様の新規ポリシーへの SetTopicAttributes トピックの属性を設定するためのアクション Policy として使用されます。

以下のステートメント例では、前述のポリシーのトピック所有者は 1111-2222-3333、また AWS リソース所有者は 4444-5555-6666 となっています。この例では、AWS アカウント ID4444-5555-6666 には、アカウントによって所有されている、いかなる AWS リソースからでも、マイトピックへの発行を行うことができる能力が付与されます。

Note

メッセージを直接発行する場合 (AWS リソースが代わりにメッセージを発行するのではなく)、ポリシーで空の Principal を指定し、さらに条件として AWS:SourceAccount を使用すると、このポリシーは機能しません。

{ "Statement": [{ "Effect": "Allow", "Principal": "*", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" } } }]}

Amazon S3 バケットがトピックに発行することを許可する

この場合、他の AWS アカウントの Amazon S3 バケットがお客様のトピックへのパブリッシュができるよう、トピックのポリシーを設定します。Amazon S3 からの通知の発行の詳細については、「バケットイベントの通知の設定」を参照してください。

この用例は、お客様が自身でポリシーの記述をするものと仮定され、お客様の新規ポリシーへのSetTopicAttributes トピックの属性を設定するためのアクション Policy として使用されます。

以下のステートメント例では、ArnLike リクエストの(AWS:SourceARN)を作成するリソースの ARNが、Amazon S3 ARN であることを確認するための条件が使用されています。Amazon S3 バケットのセット、または特定のバケットにおいてもアクセス権限を制限するための同様の条件を使用する事ができます。この例では、トピック所有者は 1111-2222-3333、また Amazon S3 所有者は 4444-5555-6666 となっています。この例では、4444-5555-6666 が所有する Amazon S3 バケットはすべて My-Topic に発行することが許可されます。

{ "Statement": [{ "Effect": "Allow", "Principal": "*", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" }, "ArnLike": { "AWS:SourceArn": "arn:aws:s3:*:*:*" } } }]

209

Page 215: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアイデンティティベースのポリシーの使用

}

AWS アカウントの任意の CloudWatch アラームが別の AWS アカウントのAmazon SNS トピックに発行することを許可する

この場合、アカウント 111122223333 内の任意の CloudWatch アラームは、アカウント 444455556666の Amazon SNS トピックに発行することを許可されます。

{ "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" } } }]}

Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限する

この場合、アカウント 444455556666 内のトピックは、ID vpc-1ab2c34d の VPC エンドポイントのみからの発行を許可されます。

{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpc-1ab2c34d" } } }]}

Amazon SNS でのアイデンティティベースのポリシーの使用トピック

• IAM ポリシーと Amazon SNS ポリシーの連携 (p. 211)• Amazon SNS リソース ARN 形式 (p. 213)• Amazon SNS API アクション (p. 214)• Amazon SNS ポリシーキー (p. 214)• Amazon SNS のポリシー例 (p. 214)

Amazon Simple Notification Service は AWS Identity and Access Management(IAM)と統合されているため、AWS アカウントのユーザーが Amazon SNS リソースで実行できる Amazon SNS アクションを指

210

Page 216: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアイデンティティベースのポリシーの使用

定することができます。ポリシーで特定のトピックを指定できます。たとえば、Publish アクションをAWS のアカウントの特定のトピックで使用するアクセス許可を組織の特定のユーザーに付与する IAM ポリシーを作成するときに、変数を使用できます。詳細については、『 IAM の使用』ガイドの「ポリシー変数」を参照してください。

Important

IAM で Amazon SNS を使用する場合でも、その使用方法に変更はありません。AmazonSNSAmazon SNS アクションに変更はなく、ユーザーおよびアクセスコントロールに関連する新しい Amazon SNS アクションはありません。

Amazon SNS アクションおよびリソースに対応するポリシーの例については、「Amazon SNS のポリシー例 (p. 214)」を参照してください。

IAM ポリシーと Amazon SNS ポリシーの連携IAM ポリシーを使用して、Amazon SNS アクションおよびトピックへのユーザーのアクセスを制限します。IAM ポリシーでは、他の AWS アカウントではなく、自分の AWS アカウント内のユーザーにのみに対してアクセスを制限できます。

特定のトピックに関連付ける Amazon SNS ポリシーにより、そのトピックを操作できるユーザー (トピックにメッセージを発行できるユーザー、サブスクライブできるユーザーなど) を制限できます。AmazonSNS ポリシーで、他の AWS アカウントにまたは自分の AWS アカウントのユーザーにトピックに対するアクセスを付与できます。

ユーザーに Amazon SNS トピックのアクセス許可を付与するには、IAM ポリシー、Amazon SNS ポリシー、またはその両方を使用できます。ほとんどの場合、どちらでも同じ結果が得られます。たとえば、以下の図は、同じ働きを持つ IAM ポリシーと Amazon SNS ポリシーを示しています。IAM ポリシーでは、AWS アカウントの topic_xyz というトピックに対して Amazon SNS の Subscribe アクションを許可します。IAM ポリシーは、ユーザー Bob と Susan にアタッチされています(つまり、Bob と Susan はポリシーに記述されているアクセス許可を持っています)。同様に、Amazon SNS ポリシーは topic_xyzの Subscribe にアクセスする許可を Bob と Susan に付与します。

Note

先の例では、条件のない単純なポリシーを示しました。どちらのポリシーでも特定の条件を指定して、同じ結果を得ることができます。

211

Page 217: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアイデンティティベースのポリシーの使用

AWS IAM ポリシーと Amazon SNS ポリシーには、Amazon SNS ポリシーシステムでは他の AWS アカウントにアクセス許可を付与できますが、IAM ポリシーではできないという違いが 1 つあります。

両方のシステムを同時に使用してどのようにアクセス許可を管理するかは、ニーズに応じて決めてください。以下の例では、2 つのポリシーシステムがどのように連携するかを示しています。

Example 1

この例では、IAM ポリシーおよび Amazon SNS ポリシーの両方が Bob に適用されます。IAM ポリシーは、任意の AWS アカウントのトピックに対しても Bob に Subscribe へのアクセス許可を付与しますが、Amazon SNS ポリシーは特定のトピック (topic_xyz) において Publish を使用するアクセス許可をBob に付与します。以下の図に、そのコンセプトを示します。

Bob が AWS アカウントの任意のトピックを受信登録するリクエストを送信した場合、そのアクションはIAM ポリシーで許可されます。Bob が topic_xyz にメッセージを発行するリクエストを送信すると、そのアクションは Amazon SNS ポリシーで許可されます。

Example 2

この例は、例 1 で示した、Bob に 2 つのポリシーが適用されている状態に基づいています。Bob は、必要のない topic_xyz にメッセージを発行しているため、トピックに発行する機能を完全に削除するとします。最も簡単な方法は、すべてのトピックに対する Bob の Publish アクションを拒否するような IAM ポリシーを追加することです。この 3 番目のポリシーは、topic_xyz に発行するアクセス許可を Bob に与えた元の Amazon SNS ポリシーより優先されます。明示的な拒否は、常に許可よりも優先されるためです(ポリシー評価のロジックの詳細については、「評価論理 (p. 202)」を参照)。以下の図に、そのコンセプトを示します。

212

Page 218: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアイデンティティベースのポリシーの使用

Amazon SNS アクションおよびリソースに対応するポリシーの例については、「Amazon SNS のポリシー例 (p. 214)」を参照してください。Amazon SNS ポリシーの記述の詳細については、「Amazon SNS の技術文書」を参照してください。

Amazon SNS リソース ARN 形式Amazon SNS では、トピックはポリシーで指定できる唯一のリソースタイプです。トピックの Amazon リソースネーム (ARN) 形式を以下に示します。

arn:aws:sns:region:account_ID:topic_name

ARN の詳細については、『IAM ユーザーガイド』の「ARN」を参照してください。

Example

AWS アカウント 123456789012 に属する、us-east-2 リージョンの my_topic というトピックの ARN は次のとおりです。

arn:aws:sns:us-east-2:123456789012:my_topic

Example

Amazon SNS によりサポートされる各リージョンに my_topic という名前のトピックがある場合、次のARN を使用してトピックを指定できます。

arn:aws:sns:*:123456789012:my_topic

トピック名にはワイルドカード * および ? を使用できます。たとえば、以下では、bob_ をプレフィックスとして付けて Bob によって作成されたすべてのトピックを参照します。

213

Page 219: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアイデンティティベースのポリシーの使用

arn:aws:sns:*:123456789012:bob_*

利便性を高めるため、トピックを作成すると、Amazon SNS は応答でトピックの ARN を返します。

Amazon SNS API アクションIAM ポリシーでは、Amazon SNS で提供されている任意のアクションを指定できます。ただし、ConfirmSubscription および Unsubscribe アクションでは認証を必要としません。つまり、ポリシーでこれらのアクションを指定しても、IAM はこれらのアクションへのユーザーのアクセスを制限しません。

ポリシーで指定する各アクションには、小文字の文字列 sns: をプレフィックスとして付ける必要があります。たとえば、すべての Amazon SNS アクションを指定するには、sns:* を使用します。アクションのリストについては、「Amazon Simple Notification Service API Reference」を参照してください。

Amazon SNS ポリシーキーAmazon SNS は、以下の AWS 全体のポリシーキーに加えて、いくつかのサービス固有のキーを実装しています。

AWS の各サービスでサポートされている条件キーのリストについては、IAM ユーザーガイド の「AWS のサービスのアクション、リソース、および条件キー」を参照してください。AWS の複数のサービスで使用できる条件キーのリストについては、IAM ユーザーガイド の「AWS グローバル条件コンテキストキー」を参照してください。

Amazon SNS では以下のサービス固有のキーを使用します。Subscribe リクエストへのアクセスを制限するポリシーで、これらのキーを使用します。

• sns:Endpoint — Subscribe リクエストまたは以前に確認されたサブスクリプションからの URL、Eメールアドレス、または ARN。文字列条件とともに使用 (「Amazon SNS のポリシー例 (p. 214)」を参照) して特定のエンドポイント (*@yourcompany.com など) へのアクセスを制限します。

• sns:Protocol — Subscribe リクエストまたは以前に確認されたサブスクリプションからの protocol値。文字列条件とともに使用 (「Amazon SNS のポリシー例 (p. 214)」を参照) して、特定の配信プロトコル (https など) への発行を制限します。

Amazon SNS のポリシー例このセクションでは、Amazon SNS へのユーザーアクセスをコントロールするための簡単なポリシーをいくつか紹介します。

Note

将来的には、Amazon SNS に新しいアクションが追加される可能性があります。これらは、以下のポリシーのいずれかに論理的に含まれ、ポリシーに記載された目的に基づいている必要があります。

Example 1: グループでトピックの作成と管理を許可する

この例では、CreateTopic、ListTopics、SetTopicAttributes、および DeleteTopic へのアクセスを付与するポリシーを作成します。

{ "Statement": [{ "Effect": "Allow",

214

Page 220: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドアイデンティティベースのポリシーの使用

"Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:DeleteTopic"], "Resource": "*" }]}

Example 2: IT グループが特定のトピックにメッセージを発行することを許可する

この例では、IT のグループを作成し、対象の特定のトピックで Publish へのアクセスを付与するポリシーを割り当てます。

{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:MyTopic" }]}

Example 3: AWS アカウントのユーザーが、トピックを受信登録できるようにする

この例では、Subscribe および sns:Protocol ポリシーキーの文字列一致条件を使ってsns:Endpoint アクションにアクセスを付与するポリシーを作成します。

{ "Statement": [{ "Effect": "Allow", "Action": ["sns:Subscribe"], "Resource": "*", "Condition": { "StringLike": { "SNS:Endpoint": "*@example.com" }, "StringEquals": { "sns:Protocol": "email" } } }]}

Example 4: パートナーが特定のトピックにメッセージを発行することを許可する

Amazon SNS ポリシーまたは IAM ポリシーを使用して、パートナーが特定のトピックに発行することを許可できます。パートナーに AWS アカウントがある場合は、Amazon SNS ポリシーを使用した方が簡単になる可能性があります。ただし、AWS のセキュリティ認証情報を所有するパートナー会社のユーザーは、トピックにメッセージを発行できます。この例では、特定のユーザー (またはアプリケーション) へのアクセスを制限するとします。そのためには、パートナーを自社内のユーザーのように扱い、Amazon SNS ポリシーの代わりに IAM ポリシーを使用する必要があります。

この例では、パートナー企業を表す WidgetCo というグループを作成し、パートナー企業でアクセス許可が必要な特定の人(またはアプリケーション)に対してユーザーを作成し、そのユーザーをグループに入れます。

次に、Publish グループに、WidgetPartnerTopic という名前の特定のトピックへのアクセスを付与するポリシーをアタッチします。

また、WidgetCo グループがトピックに対して他の操作を実行できないようにするため、WidgetPartnerTopic 以外のトピックで Publish 以外の Amazon SNS アクションへのアクセス許可を

215

Page 221: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド一時的な認証情報の使用

拒否するステートメントを追加します。これは、システム内の他の場所に、Amazon SNS への幅広いアクセスをユーザーに付与する広範なポリシーが存在する場合にのみ必要です。

{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic" }, { "Effect": "Deny", "NotAction": "sns:Publish", "NotResource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic" } ]}

Amazon SNS で一時的なセキュリティ認証情報を使用するIAM では、IAM ユーザーが独自のセキュリティ認証情報を使用して作成されるのに加えて、AWS サービスおよびリソースへのアクセスを許可するユーザーに一時的なセキュリティ認証情報を付与することもできます。AWS アカウントを持つユーザー (つまり、IAM ユーザー) を管理できます。AWS アカウントを持たないシステムのユーザー (つまり、統合ユーザー) を管理することもできます。さらに「ユーザー」を、AWS リソースにアクセスするために作成するアプリケーションにすることもできます。

Amazon SNS に対するリクエストを作成するときに、これらの一時的なセキュリティ認証情報を使用できます。API ライブラリによって、これらの認証情報を使用して必要な署名値が計算されて、リクエストが認証されます。期限の切れた認証情報を使用してリクエストを送信すると、Amazon SNS によってリクエストが拒否されます。

一時的なセキュリティ証明書の IAM サポートの詳細については、『IAM の使用』の「AWS リソースに一時的なアクセスを許可する」を参照してください。

Example 一時的なセキュリティ認証情報を使用した Amazon SNS リクエストの認証

以下の例は、一時的なセキュリティ認証情報を取得して Amazon SNS リクエストを認証する方法を示しています。

http://sns.us-east-2.amazonaws.com/?Name=My-Topic&Action=CreateTopic&Signature=gfzIF53exFVdpSNb8AiwN3Lv%2FNYXh6S%2Br3yySK70oX4%3D&SignatureVersion=2&SignatureMethod=HmacSHA256&Timestamp=2010-03-31T12%3A00%3A00.000Z&SecurityToken=SecurityTokenValue&AWSAccessKeyId=Access Key ID provided by AWS Security Token Service

Amazon SNS API のアクセス許可: アクションとリソースのリファレンス次のリストは、Amazon SNS でのアクセスコントロールの実装に固有の情報を示しています。

• 各ポリシーは、1 つのトピックだけを対象とする必要があります (ポリシーを作成する際は、異なるトピックを対象とするステートメントを含めないでください)。

216

Page 222: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドAPI の権限リファレンス

• 各ポリシーには固有のポリシー (Id) が必要です。• ポリシーを構成する各ステートメントには固有のステートメント (sid) が必要です。

ポリシーのクォータ次の表は、ポリシー情報の最大限度を示しています。

名前 最大限度

Bytes 30 KB

ステートメント 100

プリンシパル 1~200 (0 は無効)

リソース 1 (0 は無効。値はポリシーのトピックの ARN と一致する必要があります)

Amazon SNS ポリシーの有効なアクションAmazon SNS は、次の表に示すアクションをサポートします。

アクション 説明

sns:AddPermission トピックポリシーへのアクセス許可の追加を許可します。

sns:DeleteTopic トピックを削除する許可を与えます。

sns:GetTopicAttributes すべてのトピック属性を受け取る許可を与えます。

sns:ListSubscriptionsByTopic 特定のトピックへのサブスクリプションをすべて取得することを許可します。

sns:Publish トピックやエンドポイントに発行することを許可します。詳細については、『Amazon Simple Notification Service API Reference』の「発行」を参照してください。

sns:RemovePermission トピックポリシーのアクセス許可を削除する許可を与えます。

sns:SetTopicAttributes トピックの属性を設定する許可を与えます。

sns:Subscribe トピックにサブスクライブすることを許可します。

サービス固有のキーAmazon SNS では以下のサービス固有のキーを使用します。これらは、Subscribe リクエストへのアクセスを制限するポリシーに使用できます。

• sns:Endpoint — Subscribe リクエストまたは以前に確認されたサブスクリプションからの URL、Eメールアドレス、または ARN。文字列条件とともに使用 (「Amazon SNS のポリシー例 (p. 214)」を参照) して、特定のエンドポイント (*@example.com など) へのアクセスを制限します。

• sns:Protocol — Subscribe リクエストまたは以前に確認されたサブスクリプションからの protocol値。文字列条件とともに使用 (「Amazon SNS のポリシー例 (p. 214)」を参照) して、特定の配信プロトコル (https など) への発行を制限します。

217

Page 223: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドログ記録とモニタリング

Important

sns:Endpoint によるアクセスの制御にポリシーを使用するときは、将来、DNS の問題がエンドポイントの名前解決に影響する可能性があるため、注意が必用です。

Amazon SNS でのログ記録とモニタリングこのセクションでは、Amazon SNS トピックのログ作成およびモニタリングについて説明します。

トピック• AWS CloudTrail を使用した Amazon Simple Notification Service API コールのログ記録 (p. 218)• CloudWatch メトリクスを使用した Amazon SNS トピックのモニタリング (p. 221)

AWS CloudTrail を使用した Amazon SimpleNotification Service API コールのログ記録Amazon SNS は AWS CloudTrail と統合されています。このサービスは、Amazon SNS のユーザー、ロール、または AWS サービスによって実行されたアクションを記録するサービスです。CloudTrailは、Amazon SNS の API コールをイベントとしてキャプチャします。キャプチャされた呼び出しには、Amazon SNS コンソールの呼び出しと、Amazon SNS API オペレーションへのコード呼び出しが含まれます。証跡を作成する場合は、Amazon SNS のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [Event history (イベント履歴)] で最新のイベントを表示できます。CloudTrail によって収集された情報を使用して、リクエストの作成元の IP アドレス、リクエストの実行者、リクエストの実行日時などの詳細を調べて、Amazon SNS に対してどのようなリクエストが行われたかを判断できます。

CloudTrail の詳細(設定して有効にする方法など)については、『AWS CloudTrail User Guide』を参照してください。

CloudTrail 内の Amazon SNS 情報CloudTrail は、アカウント作成時に AWS アカウントで有効になります。Amazon SNS でサポートされるイベントアクティビティが発生すると、そのアクティビティは CloudTrail イベントとして AWS のサービスの他のイベントとともに [Event history (イベント履歴)] に記録されます。最近のイベントは、AWS アカウントで表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でのイベントの表示」を参照してください。

Amazon SNS のイベントなど、AWS アカウントのイベントの継続的な記録については、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで作成した証跡がすべての AWS リージョンに適用されます。証跡では、AWS パーティションのすべてのリージョンからのイベントがログに記録され、指定した Amazon S3 バケットにログファイルが配信されます。さらに、より詳細な分析と AWS ログで収集されたデータに基づいた行動のためにその他の CloudTrail サービスを設定できます。詳細については、以下を参照してください。

• 証跡を作成するための概要• CloudTrail でサポートされるサービスと統合• CloudTrail の Amazon SNS 通知の設定• 「複数のリージョンから CloudTrail ログファイルを受け取る」と「複数のアカウントから CloudTrail ロ

グファイルを受け取る」

Amazon SNS は、以下のアクションをイベントとして CloudTrail ログファイルに記録できます。

• AddPermission

218

Page 224: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドCloudTrail を使用して API コールのログを記録する

• ConfirmSubscription

• CreatePlatformApplication

• CreatePlatformEndpoint

• CreateTopic

• DeleteEndpoint

• DeletePlatformApplication

• DeleteTopic

• GetEndpointAttributes

• GetPlatformApplicationAttributes

• GetSMSAttributes

• GetSubscriptionAttributes

• GetTopicAttributes

• ListEndpointsByPlatformApplication

• ListPhoneNumbersOptedOut

• ListPlatformApplications

• ListSubscriptions

• ListSubscriptionsByTopic

• ListTopics

• RemovePermission

• SetEndpointAttributes

• SetPlatformApplicationAttributes

• SetSubscriptionAttributes

• SetTopicAttributes

• Subscribe

• Unsubscribe

Note

Amazon Web Services にログインしていないとき (非認証モード)、ConfirmSubscription またはUnsubscribe アクションが呼び出されても、そのアクションは CloudTrail に記録されません。たとえば、E メール通知内のリンクを選択して、あるトピックへの保留中のサブスクリプションを確認したとき、ConfirmSubscription アクションが非認証モードで呼び出されたとします。この場合、ConfirmSubscription アクションは CloudTrail に記録されません。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。この ID 情報は以下のことを確認するのに役立ちます。

• リクエストが、ルートまたは AWS Identity and Access Management (IAM) ユーザー認証情報のどちらを使用して送信されたかどうか。

• リクエストが、ロールとフェデレーティッドユーザーのどちらの一時的なセキュリティ認証情報を使用して送信されたか.

• リクエストが、別の AWS サービスによって送信されたかどうか。

詳細については、「CloudTrail userIdentity 要素」を参照してください。

例: Amazon SNS ログファイルエントリ証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信できる設定です。CloudTrailログファイルには、1 つ以上のログエントリが含まれます。イベントは任意の送信元からの単一のリクエストを表し、リクエストされたアクション、アクションの日時、リクエストのパラメータなどに関する情

219

Page 225: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドCloudTrail を使用して API コールのログを記録する

報が含まれます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、特定の順序では表示されません。

以下の例は、ListTopics、CreateTopic、および DeleteTopic アクションの CloudTrail ログエントリを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type":"IAMUser", "userName":"Bob" "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Bob", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE" }, "eventTime": "2014-09-30T00:00:00Z", "eventSource": "sns.amazonaws.com", "eventName": "ListTopics", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version", "requestParameters": { "nextToken": "ABCDEF1234567890EXAMPLE==" }, "responseElements": null, "requestID": "example1-b9bb-50fa-abdb-80f274981d60", "eventID": "example0-09a3-47d6-a810-c5f9fd2534fe", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type":"IAMUser", "userName":"Bob" "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Bob", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE" }, "eventTime": "2014-09-30T00:00:00Z", "eventSource": "sns.amazonaws.com", "eventName": "CreateTopic", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version", "requestParameters": { "name": "hello" }, "responseElements": { "topicArn": "arn:aws:sns:us-west-2:123456789012:hello-topic" }, "requestID": "example7-5cd3-5323-8a00-f1889011fee9", "eventID": "examplec-4f2f-4625-8378-130ac89660b1", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type":"IAMUser", "userName":"Bob"

220

Page 226: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドCloudWatch を使用したトピックのモニタリング

"principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Bob", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE" }, "eventTime": "2014-09-30T00:00:00Z", "eventSource": "sns.amazonaws.com", "eventName": "DeleteTopic", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-sdk-java/unknown-version", "requestParameters": { "topicArn": "arn:aws:sns:us-west-2:123456789012:hello-topic" }, "responseElements": null, "requestID": "example5-4faa-51d5-aab2-803a8294388d", "eventID": "example8-6443-4b4d-abfd-1b867280d964", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, ] }

CloudWatch メトリクスを使用した Amazon SNS トピックのモニタリングAmazon SNS と CloudWatch は統合されているため、個々のアクティブな Amazon SNS 通知についてメトリクスを収集、表示、分析できます。Amazon SNS に対して CloudWatch を設定すると、AmazonSNS トピック、プッシュ通知、および SMS 配信のパフォーマンスをより正確に把握できます。たとえば、NumberOfNotificationsFailed など、Amazon SNS メトリクスの指定されたしきい値に達した場合に E メール通知が送信されるように、アラームを設定することができます。AmazonSNS が CloudWatch に送信するすべてのメトリクスのリストについては、「Amazon SNS メトリックス (p. 222)」を参照してください。Amazon SNS プッシュ通知の詳細については、「受信者がモバイルアプリケーションの場合のユーザー通知に Amazon SNS を使用する (モバイルプッシュ) (p. 123)」を参照してください。

Amazon SNS トピックに対して CloudWatch で設定したメトリクスは自動的に収集され、5 分ごとにCloudWatch にプッシュされます。これらのメトリックスは、CloudWatch ガイドラインを満たすすべてのトピックで収集され、アクティブになります。トピックは、トピックでの最後のアクティビティ (つまり、任意の API コール) から最大 6 時間 CloudWatch によりアクティブと見なされます。

Note

CloudWatch でレポートされた Amazon SNS メトリクスに対して料金は発生しません。それらはAmazon SNS サービスの一部として提供されます。

Amazon SNS の CloudWatch メトリクスの表示CloudWatch コンソールで、CloudWatch の独自のコマンドラインインターフェイス (CLI) で、またはCloudWatch API を使用してプログラムで、Amazon SNS のメトリクスをモニタリングできます。次の手順は、AWS マネジメントコンソールを使用してメトリクスにアクセスする方法を示しています。

CloudWatch コンソールを使用してメトリクスを表示するには

1. CloudWatch コンソールにサインインします。2. ナビゲーションパネルで [メトリクス] を選択します。3. [すべてのメトリクス] タブで [SNS] を選択し、次のいずれかのディメンションを選択します。

• 国/地域、SMS タイプ

221

Page 227: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドCloudWatch を使用したトピックのモニタリング

• 電話番号• トピックのメトリクス• ディメンションの定められていないメトリクス

4. 詳細を表示するには、特定の項目を選択します。たとえば、[トピックのメトリクス] を選択し、[NumberOfMessagesPublished] を選択すると、6 時間の時間範囲における 5 分間の公開済み AmazonSNS メッセージの平均数が表示されます。

Amazon SNS メトリクスに対して CloudWatch アラームを設定するCloudWatch では、メトリックスのしきい値に到達したときのアラームを設定することもできます。たとえば、サンプリング期間内に指定されたしきい値に到達した場合、イベントについて知らせる E メール通知が送信されるように、メトリクス NumberOfNotificationsFailed のアラームを設定できます。

CloudWatch コンソールを使用してアラームを設定するには

1. AWS マネジメントコンソール にサインインした後、https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

2. [Alarms]、[Create Alarm] の順に選択します。これにより、[Create Alarm] ウィザードが起動します。3. Amazon SNS メトリクスをスクロールして、アラームを設定するメトリクスを見つけます。アラーム

を作成するメトリクスを選択してから、[Continue (続行)] を選択します。4. [Name (名前)]、[Description (説明)]、[しきい値]、[Time (時間)] のそれぞれにメトリクスの値を入力

し、[Continue (続行)] を選択します。5. アラーム状態として [Alarm] を選択します。アラーム状態になったときに CloudWatch から E メール

が届くようにするには、既存の Amazon SNS トピックを選択するか、[新しいメールトピックの作成]を選択します。[新しいメールトピックの作成] を選択した場合は、新しいトピックの名前と E メールアドレスを設定できます。このリストは、今後のアラーム用に保存され、ドロップダウンボックスに表示されます。[Continue] を選択します。

Note

[Create New Email Topic] を使用して新しい Amazon SNS トピックを作成する場合、メールアドレスを検証しなければ、そのアドレスで通知を受け取ることができません。E メールは、アラームがアラーム状態になったときにのみ送信されます。アラーム状態になったときに、メールアドレスの検証がまだ完了していない場合は、そのアドレスで通知を受け取ることはできません。

6. この時点で、[アラームの作成] ウィザードで、作成するアラームを確認できます。何らかの変更を行う必要がある場合は、右側にある [Edit] リンクを使用します。希望どおりの設定になったら、[CreateAlarm (アラームの作成)] を選択します。

CloudWatch とアラームの使用方法の詳細については、CloudWatch のドキュメントを参照してください。

Amazon SNS メトリックスAmazon SNS は以下のメトリックスを CloudWatch に送信します。

メトリクス 説明

NumberOfMessagesPublished Amazon SNS トピックに対して発行されたメッセージ数。

単位: Count

222

Page 228: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドCloudWatch を使用したトピックのモニタリング

メトリクス 説明有効な統計: Sum

NumberOfNotificationsDelivered Amazon Amazon SNS トピックからそのトピックにサブスクライブしているエンドポイントに正常に配信されたメッセージ数。

配信の試行が成功するには、エンドポイントのサブスクリプションでメッセージが許可されている必要があります。サブスクリプションでメッセージが許可されるのは、a) フィルタポリシーがない場合、または b) メッセージに割り当てられた属性と一致する属性がそのフィルタポリシーに含まれている場合です。サブスクリプションでメッセージが拒否された場合、配信の試行はこのメトリクスに対してカウントされません。

単位: Count

有効な統計: Sum

NumberOfNotificationsFailed Amazon SNS が配信に失敗したメッセージの数。

Amazon SQS、E メール、SMS、またはモバイルプッシュエンドポイントの場合、Amazon SNS がメッセージ配信の試行を停止すると、このメトリクスが 1 増分されます。HTTP または HTTPS エンドポイントの場合、失敗した配信の試行がすべて、初回試行に続く再試行を含め、このメトリクスに対してカウントされます。その他のすべてのエンドポイントの場合、メッセージが配信されないと、カウントが 1 増加します (試行回数には関係ありません)。

サブスクリプションフィルタポリシーによって拒否されたメッセージは、このメトリクスに対してカウントされません。

HTTP エンドポイントの再試行回数をコントロールできます。詳細については、「メッセージ配信の再試行 (p. 61)」を参照してください。

単位: Count

有効な統計: Sum、Average

NumberOfNotificationsFilteredOut サブスクリプションフィルタポリシーによって拒否されたメッセージの数。メッセージの属性がポリシーの属性と一致しない場合、フィルタポリシーによってメッセージは拒否されます。

単位: Count

有効な統計: Sum、Average

223

Page 229: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドCloudWatch を使用したトピックのモニタリング

メトリクス 説明

NumberOfNotificationsFilteredOut-InvalidAttributes

メッセージの属性が無効であるため、たとえば属性のJSON 形式が正しくないため、サブスクリプションフィルタポリシーによって拒否されたメッセージの数。–

単位: Count

有効な統計: Sum、Average

NumberOfNotificationsFilteredOut-NoMessageAttributes

メッセージに属性がないため、サブスクリプションフィルタポリシーによって拒否されたメッセージの数。

単位: Count

有効な統計: Sum、Average

NumberOfNotificationsRedrivenToDlq デッドレターキューに移動されたメッセージの数。単位: Count

有効な統計: Sum、Average

NumberOfNotificationsFailedToRedriveToDlqデッドレターキューに移動できなかったメッセージの数。単位: Count

有効な統計: Sum、Average

PublishSize 発行されたメッセージのサイズ。

単位: Bytes

有効な統計: Minimum、Maximum、Average、Count

SMSMonthToDateSpentUSD 今月の始めから今日までの SMS メッセージの送信料金。

今月の始めから今日までの料金がアカウントの毎月のSMS 使用限度に近付いたことがわかるように、このメトリクスにアラームを設定できます。Amazon SNSが、SMS メッセージを送信するとこの限度を超えるコストが発生すると判断する場合、数分以内に SMS メッセージの発行を停止します。

SMS の毎月の使用料限度の設定の詳細、または AWS に対して限度の引き上げをリクエストする方法については、「SMS メッセージプリファレンスの設定 (p. 154)」を参照してください。

単位: USD

有効な統計: Maximum

SMSSuccessRate 正常な SMS メッセージ配信のレート

単位: Count

有効な統計: Sum、Average、Data Samples

224

Page 230: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドコンプライアンス検証

Amazon Simple Notification Service メトリクスのディメンションAmazon Simple Notification Service は以下のディメンションを CloudWatch に送信します。

ディメンション 説明

Application アプリケーションオブジェクトのフィルタ。APNs や FCM など、サポートされるプッシュ通知サービスの 1 つに登録されているアプリケーションやデバイスを表します。

Application,Platform アプリケーションおよびプラットフォームオブジェクトのフィルタ。プラットフォームオブジェクトは、APNs や FCM など、サポートされるプッシュ通知サービスで使用されます。

Country SMS メッセージの宛先国またはリージョンのフィルタ。国またはリージョンは、ISO 3166-1 alpha-2 コードで表されます。

Platform APNs や FCM などのプッシュ通知サービスで使用されるプラットフォームオブジェクトのフィルタ。

TopicName Amazon SNS トピック名のフィルタ。

SMSType SMS メッセージのメッセージタイプのフィルタ。プロモーションまたはトランザクションがあります。

Amazon SNS のコンプライアンス検証サードパーティーの監査者は、Health Insurance Portability and Accountability Act (HIPAA) を含む複数のAWS コンプライアンスプログラムの一環として、Amazon SNS のセキュリティおよびコンプライアンスを評価します。

特定のコンプライアンスプログラムの対象となる AWS サービスのリストについては、「コンプライアンスプログラムによる AWS 対象範囲内のサービス」を参照してください。一般的な情報については、「AWS コンプライアンスプログラム」を参照してください。

サードパーティーの監査レポートをダウンロードするには、AWS Artifact を使用します。詳細については、「AWS Artifact のレポートのダウンロード」を参照してください。

Amazon SNS を使用する際のお客様のコンプライアンス責任は、データの機密性、企業のコンプライアンス目的、適用法規や規制によって決まります。AWS ではコンプライアンスに役立つ以下のリソースを用意しています。

• セキュリティおよびコンプライアンスのクイックスタートガイド – これらのデプロイガイドでは、アーキテクチャー上の考慮事項について説明し、セキュリティとコンプライアンスに重点を置いたベースライン環境を AWS でデプロイするための手順を説明します。

• HIPAA のセキュリティとコンプライアンスに関するホワイトペーパーを作成する – このホワイトペーパーでは、企業が AWS を使用して HIPAA 準拠のアプリケーションを作成する方法について説明します。

• AWS コンプライアンスのリソース – このワークブックおよびガイドのコレクションは、お客様の業界や場所に適用される場合があります。

• AWS Config 開発者ガイドの「ルールでのリソースの評価」– AWS Config サービスでは、リソース設定が社内のプラクティス、業界のガイドライン、規制にどの程度適合しているかを評価します。

• AWS Security Hub – この AWS サービスでは、AWS 内のセキュリティ状態を包括的に表示しており、セキュリティ業界の標準およびベストプラクティスへの準拠を確認するのに役立ちます。

225

Page 231: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド弾力

Amazon SNS でのレジリエンスAWS のグローバルインフラストラクチャは AWS リージョンとアベイラビリティーゾーンを中心として構築されます。AWS リージョンには、低レイテンシー、高いスループット、そして高度の冗長ネットワークで接続されている複数の物理的に独立・隔離されたアベイラビリティーゾーンがあります。アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、および拡張性が優れています。AWSのリージョンやアベイラビリティーゾーンの詳細については、AWSグローバルインフラストラクチャを参照してください。

Amazon SNS でのインフラストラクチャセキュリティ

マネージド型サービスとして、Amazon SNS は、ホワイトペーパー「Amazon Web Services: セキュリティプロセスの概要」に記載されている AWS グローバルネットワークセキュリティの手順で保護されています。

AWS の API アクションを使用して、ネットワーク経由で Amazon SNS にアクセスします。クライアントで Transport Layer Security (TLS) 1.0 以降がサポートされている必要があります。TLS 1.2 以降が推奨されています。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman (ECDHE)などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされている必要があります。

IAM プリンシパルに関連付けられているアクセスキー ID とシークレットアクセスキーの両方を使用してリクエストに署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

これらの API アクションは任意のネットワークの場所から呼び出すことができますが、Amazon SNS ではリソースベースのアクセスポリシーがサポートされています。これには送信元 IP アドレスに基づく制限を含めることができます。さらに、Amazon SNS ポリシーを使用して、特定の Amazon VPC エンドポイントや特定の VPC からアクセスをコントロールすることもできます。これにより効果的に、AWS ネットワーク内の特定の VPC から特定の Amazon SNS キューへのネットワークアクセスのみが分離されます。詳細については、「Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限する (p. 210)」を参照してください。

Amazon SNS セキュリティのベストプラクティスAWS には、Amazon SNS の多くのセキュリティ機能があります。独自のセキュリティポリシーのコンテキストで、これらのセキュリティ機能を確認します。

Note

これらのセキュリティ機能のガイダンスは、一般的ユースケースと実装に適用されます。特定のユースケース、アーキテクチャ、脅威モデルのコンテキストで、これらのベストプラクティスを確認することをお勧めします。

予防的ベストプラクティス以下に、Amazon SNS の予防的なセキュリティに関するベストプラクティスを示します。

トピック

226

Page 232: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド予防的ベストプラクティス

• トピックがパブリックアクセス可能でないようにする (p. 227)• 最小特権アクセスの実装 (p. 227)• Amazon SNS アクセスを必要とするアプリケーションと AWS のサービスには IAM ロールを使用す

る。 (p. 227)• サーバー側の暗号化を実装する (p. 228)• 転送時のデータの暗号化を強制する (p. 228)• VPC エンドポイントを使用して Amazon SNS にアクセスすることを検討する (p. 228)

トピックがパブリックアクセス可能でないようにするインターネット上の誰もがトピックに読み書きできるように明示的にリクエストしない限り、AmazonSNS トピックにパブリックアクセスできないようにする必要があります (世界中の誰でも、または認証された AWS ユーザーがアクセス可能)。

• Principal を "" に設定してポリシーを作成しないでください。• ワイルドカード (*) を使用しないでください。代わりに、特定のユーザーに名前を付けます。

最小特権アクセスの実装アクセス許可を付与する場合、アクセス許可を受け取るユーザー、アクセス許可の対象となるトピック、およびこれらのトピックに対して許可する特定の API アクションを決定します。最小権限の原則を実装することは、セキュリティリスクを軽減するために重要です。また、エラーや悪意のある意図による悪影響を減らすのにも役立ちます。

最小権限を付与する標準のセキュリティアドバイスに従ってください。つまり、特定のタスクの実行に必要なアクセス許可のみを付与します。ユーザーアクセスに関連するセキュリティポリシーを組み合わせて使用することで、最小権限を実装できます。

Amazon SNS では、発行者と受信者のモデルが使用され、次の 3 種類のユーザーアカウントアクセスが必要です。

• 管理者 – トピックの作成、変更、削除にアクセスします。管理者は、トピックポリシーも制御します。• 発行者 – トピックへのメッセージ送信のアクセス権限を持ちます。• 受信者 – トピックへの登録のアクセス権限を持ちます。

詳細については、次のセクションを参照してください。

• Amazon SNS での Identity and Access Management (p. 195)• Amazon SNS API のアクセス許可: アクションとリソースのリファレンス (p. 216)

Amazon SNS アクセスを必要とするアプリケーションと AWS のサービスには IAM ロールを使用する。Amazon SNS トピックにアクセスするアプリケーションまたは Amazon EC2 などの AWS のサービスには、AWS API リクエストで有効な AWS 認証情報を使用する必要があります。これらの認証情報は自動的には更新されないため、AWS 認証情報をアプリケーションまたは EC2 インスタンスに直接保存しないでください。

IAM ロールを使用して、Amazon SNS にアクセスする必要があるアプリケーションまたはサービスの一時的な認証情報を管理する必要があります。ロールを使用するとき、EC2 インスタンスまたは AWS のサービス (AWS Lambda など) に長期の認証情報 (ユーザー名、パスワード、アクセスキーなど) を配布する必

227

Page 233: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド予防的ベストプラクティス

要はありません。代わりに、ロールは、アプリケーションが他の AWS リソースへの呼び出しを行うときに使用できる一時的なアクセス許可を提供します。

詳細については、IAM ユーザーガイド の「IAM ロール」と「ロールの一般的なシナリオ: ユーザー、アプリケーション、およびサービス」を参照してください。

サーバー側の暗号化を実装するデータ漏洩の問題を軽減するには、保存時の暗号化を使用して、メッセージを保存する場所とは別の場所に保存されているキーを使用してメッセージを暗号化します。サーバー側の暗号化 (SSE) は、保存時のデータの暗号化を提供します。Amazon SNS は、データを保存するときにメッセージレベルで暗号化し、アクセスするとメッセージを復号します。SSE は AWS Key Management Service で管理されているキーを使用します。リクエストが認証され、お客様がアクセス許可を持っていれば、トピックが暗号化されているかどうかに関係なく同じ方法でアクセスできます。

詳細については、「保管時の暗号化 (p. 187)」および「キーの管理 (p. 189)」を参照してください。

転送時のデータの暗号化を強制するHTTPS (TLS) を使用しない場合、ネットワークベースの攻撃者は、中間者などの攻撃を使用して、ネットワークトラフィックを傍受したり操作することができます。トピックポリシーのaws:SecureTransport 条件を使用して、HTTPS (TLS) 経由の暗号化された接続のみを許可し、リクエストに SSL の使用を強制します。

VPC エンドポイントを使用して Amazon SNS にアクセスすることを検討する操作できる必要があるが、インターネットに絶対に公開してはならないトピックがある場合は、VPC エンドポイントを使用して、特定の VPC 内のホストのみにトピックアクセスを制限します。トピックポリシーを使用して、特定の Amazon VPC エンドポイントまたは特定の VPC からのトピックへのアクセスを制御できます。

Amazon SNS の VPC エンドポイントには、メッセージへのアクセスを制御するために、2 通りの方法が用意されています。

• 特定の VPC エンドポイントを通じて許可されるリクエスト、ユーザー、またはグループを管理できます。

• トピックポリシーを使用して、どの VPC または VPC エンドポイントがトピックにアクセスできるかを制御できます。

詳細については、「Amazon SNS 用の Amazon VPC エンドポイントの作成 (p. 193)」および「AmazonSNS の Amazon VPC エンドポイントポリシーの作成 (p. 195)」を参照してください。

228

Page 234: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

Amazon SNS リリースノート次の表は Amazon SNS 機能のリリースおよび拡張の一覧です。Amazon Simple Notification Service 開発者ガイド の変更については、「Amazon SNS のドキュメント履歴 (p. 232)」を参照してください。

日付 機能のリリース

2020 年 1 月 17 日 Amazon SNS のサーバー側の暗号化 (SSE) が、中国リージョン で利用可能になりました。サーバー側の暗号化およびその使用開始の方法については、「保管時の暗号化 (p. 187)」を参照してください。

2019 年 11 月 14日

デッドレターキューは、Amazon SNS サブスクリプションが正常にサブスクライバーに配信されなかったメッセージをターゲットにできる Amazon SQS キューです。クライアントエラーまたはサーバーエラーにより配信できなかったメッセージは、追加の分析や再処理のためにデッドレターキューに維持されます。

Note

• Amazon SNS サブスクリプションと Amazon SQS キューは同じ AWSアカウントとリージョンにある必要があります。

• 現在、Amazon SNS サブスクリプションのデッドレターキューとしてAmazon SQS FIFO キューを使用できません。

• 暗号化された Amazon SQS キューをデッドレターキューとして使用するには、AWS KMS API アクションに Amazon SNS サービスの一次アクセスを付与するキーポリシーがあるカスタム CMK を使用する必要があります。詳細については、本ガイドの「保管時の暗号化 (p. 187)」および Amazon Simple Queue Service 開発者ガイド の「サーバー側の暗号化 (SSE) および AWS KMS を使用した Amazon SQS データの保護」を参照してください。

詳細については、以下を参照してください。

• Amazon SNS デッドレターキュー (p. 65)• Amazon SNS サブスクリプションの Amazon SNS デッドレターキューを設定す

る (p. 18)• メッセージ配信の再試行 (p. 61)• 次の API アクションの RedrivePolicy リクエストパラメータ属性。

• GetSubscriptionAttributes

• SetSubscriptionAttributes

• Subscribe

• 「Amazon SNS メトリックス (p. 222)」セクションのNumberOfNotificationsRedrivenToDlq およびNumberOfNotificationsFailedToRedriveToDlq メトリクス。

2019 年 10 月 18日

APNs ヘッダーのカスタム値を指定できます。詳細については、「アラートまたはバックグラウンド通知としてのメッセージを APNs に送信する (p. 137)」を参照してください。

2019 年 9 月 10 日 Amazon SNS で、APNs を介して送信されるモバイル通知に apns-push-typeヘッダーフィールドがサポートされます。詳細については、「アラートまたはバックグラウンド通知としてのメッセージを APNs に送信する (p. 137)」を参照してください。

229

Page 235: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

日付 機能のリリース

2019 年 7 月 24 日 AWS X-Ray を使用して、Amazon SNS トピックを通過するメッセージのトラブルシューティングを行うことができます。詳細については、「AWS X-Ray を使用した Amazon Simple Notification Service トピックのトラブルシューティング (p. 186)」セクションを参照してください。

2019 年 7 月 5 日 • 複数の文字列に加えて、Amazon SNS では複数の数値のブラックリスティングが許可されます。詳細については、「「以外」の一致 (ブラックリスト) (p. 75)」を参照してください。

• exists 演算子を使用して、フィルタポリシーにキーがリストされている属性が入力メッセージにあるかどうかをチェックできます。詳細については、「属性キーの一致 (p. 75)」を参照してください。

2019 年 5 月 16 日 • AWS マネジメントコンソール コンソールを使用して Amazon SNS トピックにメタデータを追加、削除、一覧表示して、Amazon SNS リソースを追跡できます (コスト配分のためなど)。詳細については、「Amazon SNS タグ (p. 90)」、および「Amazon SNS トピックのタグの一覧表示、追加、および削除 (p. 16)」チュートリアルや「Amazon SNS トピックの作成 (p. 8)」チュートリアルを参照してください。

Note

現在、タグベースのアクセスコントロールは使用できません。• 単一の Amazon SNS API コール、AWS SDK 関数、または AWS CLI コマンドを

使用して、同時にトピックを作成し、そのタグを指定できます。詳細については、CreateTopic API アクションの Tags リクエストパラメータ属性を参照してください。

2019 年 4 月 26 日 TagResource、UntagResource、および ListTagsForResource API アクションまたは AWS SDK を使用して Amazon SNS トピックのメタデータタグを追加、削除、一覧表示することにより、(コスト配分などのために) AmazonSNS リソースを追跡することができます。詳細については、「Amazon SNSタグ (p. 90)」と「Amazon SNS トピックのタグの一覧表示、追加、および削除 (p. 16)」チュートリアルを参照してください。

2019 年 4 月 4 日 Amazon SNS の Amazon VPC エンドポイントポリシーを作成できます。詳細については、「Amazon SNS の Amazon VPC エンドポイントポリシーの作成 (p. 195)」を参照してください。

2019 年 3 月 25 日 AWS Event Fork Pipelines を受信者とするシステム間メッセージングに AmazonSNS を使用 (p. 118)できます。アーキテクチャの必要に応じて、AWS ServerlessApplication Repository の AWS Event Fork Pipelines スイートから任意のパイプラインを個別にデプロイできます。詳細については、以下を参照してください。

• AWS Event Fork Pipelines サンプルアプリケーションをデプロイしてテストする (p. 43)

• AWS Event Fork Pipelines を Amazon SNS トピックにサブスクライブする (p. 50)• イベントのストレージおよびバックアップパイプラインをデプロイしてサブス

クライブするには (p. 51)• イベントの検索および分析パイプラインをデプロイしてサブスクライブするに

は (p. 52)• イベントの再生パイプラインをデプロイしてサブスクライブするには (p. 55)

230

Page 236: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

日付 機能のリリース

2019 年 3 月 21 日 AWS GovCloud (米国西部) リージョンの Amazon Virtual Private Cloud からAmazon SNS トピックにプライベートに発行できます。詳細については、「インターネットトラフィックのプライバシー (p. 193)」を参照してください。

2019 年 3 月 6 日 Amazon SNS コンソールのユーザーインターフェイスを更新して改善しました。以下の関連する変更が、このガイドの新しいセクションおよび改訂されたセクションに反映されています。

• Amazon SNS へのアクセスをセットアップする (p. 2)• Amazon SNS の開始方法 (p. 4)• Amazon SNS のチュートリアル (p. 8)

• Amazon SNS トピックの作成 (p. 8)• Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にする (p. 28)• 暗号化された Amazon SQS キューをサブスクライブして Amazon SNS トピッ

クのサーバー側の暗号化 (SSE) を有効にする (p. 31)• Amazon SNS トピックにエンドポイントをサブスクライブする (p. 11)• Amazon SNS トピックにメッセージを発行する (p. 14)• Amazon SNS サブスクリプションまたはトピックを削除する (p. 21)

2019 年 2 月 5 日 Amazon SNS で複数の文字列のブラックリスティングがサポートされました。詳細については、「「以外」の一致 (ブラックリスト) (p. 73)」を参照してください。

2018 年 11 月 15日

Amazon SNS のサーバー側の暗号化 (SSE) では、AWS Key Management Service(AWS KMS) で管理されているキーを使用して、Amazon SNS トピックのメッセージの内容を保護することができます。サーバー側の暗号化およびその使用を開始する方法については、「保管時の暗号化 (p. 187)」および「Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にする (p. 28)」を参照してください。

API の CreateTopic および SetTopicAttributes アクションを使用してKmsMasterKeyId 属性を設定する機能が SSE に追加されました。

Important

SSE が有効なトピックへのリクエストでは必ず、HTTPS と署名バージョン 4 を使用する必要があります。他のサービスと暗号化されたトピックとの互換性については、サービスのドキュメントを参照してください。

2018 年 5 月 30 日 Amazon SNS は、サブスクリプションフィルタポリシーでフィルタ処理されたメッセージのメトリクスを Amazon CloudWatch に送信するようになりました。詳細については、「Amazon SNS メトリックス (p. 222)」を参照してください。

2018 年 4 月 10 日 Amazon Virtual Private Cloud から Amazon SNS トピックにプライベートに発行できます。詳細については、「インターネットトラフィックのプライバシー (p. 193)」を参照してください。

2018 年 4 月 10 日 メッセージのフィルタ処理を停止するには、サブスクリプションに割り当てられたフィルタポリシーを削除できます。詳細については、「サブスクリプションフィルタポリシーの削除 (p. 79)」を参照してください。

2018 年 3 月 12 日 文字列値の完全一致に加えて、フィルタポリシーはメッセージ属性の一致について次のオペレーションをサポートします: 「以外」の一致、プレフィックスの一致、数値の完全一致、数値の範囲一致。詳細については、「メッセージのフィルタ処理 (p. 70)」を参照してください。

231

Page 237: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 機能のリリース

2017 年 11 月 21日

受信者は、トピックのサブスクリプションにフィルタポリシーを適用して、Amazon SNS トピックに発行されたメッセージを選択的に受信できます。詳細については、「メッセージのフィルタ処理 (p. 70)」を参照してください。

2017 年 3 月 31 日 Amazon SNS は SMSMonthToDateSpentUSD メトリクスを CloudWatch に送信します。このメトリクスは、今月の始めから今日までの SMS メッセージの料金を示します。詳細については、「Amazon SNS メトリックス (p. 222)」を参照してください。

2017 年 3 月 6 日 同じショートコードを使用して SMS メッセージを送信するには、お客様のアカウントに割り当てられた専用ショートコードを予約できます。詳細については、「SMS メッセージングの専有ショートコードを予約する (p. 176)」を参照してください。

2016 年 6 月 28 日 Amazon SNS は、200 以上の国とリージョンへの SMS メッセージングをサポートするようになりました。電話番号をトピックにサブスクライブし、トピックへメッセージを送信することにより、電話番号へメッセージを直接送信または、同時に複数の電話番号にメッセージを送信できます。詳細については、「受信者が携帯電話番号の場合のユーザー通知に Amazon SNS を使用する (SMS 送信) (p. 153)」を参照してください。

2015 年 6 月 15 日 Amazon SNS は、VoIP および Mac OS X のプッシュ通知をサポートするようになりました。

2015 年 2 月 5 日 Amazon SNS は、プッシュ通知メッセージの配信ステータスの記録をサポートするようになりました。

2014 年 10 月 9 日 Amazon SNS は、AWS CloudTrail をサポートするようになりました。

2014 年 8 月 19 日 Amazon SNS は、Windows Phone 用 Microsoft プッシュ通知サービス での認証されたメッセージをサポートするようになりました。

2014 年 7 月 10 日 Amazon SNS は、モバイルプッシュ通知サービスの有効期限 (TTL) メッセージ属性の設定をサポートするようになりました。

2014 年 6 月 12 日 Amazon SNS は、Baidu Cloud Push、Windows Phone 用 Microsoft プッシュ通知サービス、および Windows プッシュ通知サービス をサポートします。

2014 年 6 月 12 日 メッセージ属性により、メッセージに関する構造化メタデータ項目を提供することができます。詳細については、「Amazon SNS メッセージ属性 (p. 67)」を参照してください。

2013 年 8 月 13 日 Amazon SNS で、モバイルデバイスのアプリに通知メッセージを直接送信するためのサポートが追加されました。詳細については、「受信者がモバイルアプリケーションの場合のユーザー通知に Amazon SNS を使用する (モバイルプッシュ) (p. 123)」を参照してください。

Amazon SNS のドキュメント履歴次の表は、Amazon Simple Notification Service 開発者ガイド の変更点の一覧です。Amazon SNS 機能のリリースと拡張については、Amazon SNS リリースノート (p. 229)を参照してください。

232

Page 238: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2019 年 1 月 6 日 「Amazon SNS でのアイデンティティベースのポリシーの使用 (p. 210)」セクションに軽微な修正を加えました。

2019 年 1 月 2 日 このガイド全体に次の注意事項を追加しました。

Important

メッセージは、同じ AWS リージョンにあるトピックとエンドポイントにのみ発行できます。

2019 年 12 月 18日

• 以下のセクションを追加しました。• Amazon SNS でのデータ保護 (p. 187)• データの暗号化 (p. 187)• Amazon SNS でのログ記録とモニタリング (p. 218)• Amazon SNS のコンプライアンス検証 (p. 225)• Amazon SNS でのレジリエンス (p. 226)• Amazon SNS でのインフラストラクチャセキュリティ (p. 226)• Amazon SNS セキュリティのベストプラクティス (p. 226)

• 以下のセクションの名前が変更されました。• 保管時の暗号化 (p. 187)• キーの管理 (p. 189)• インターネットトラフィックのプライバシー (p. 193)• Amazon SNS での Identity and Access Management (p. 195)• Amazon SNS でのアクセス管理の概要 (p. 197)• Amazon SNS でのアイデンティティベースのポリシーの使用 (p. 210)• Amazon SNS のトラブルシューティング (p. 186)

2019 年 12 月 16日

「Amazon SNS の CloudWatch メトリクスの表示 (p. 221)」セクションを書き換えました。

2019 年 12 月 3 日 • 「AWS マネジメントコンソール を使用してトピックを作成するには (p. 9)」セクションに次の記述を追加しました。

Important

セキュリティ対策として、Amazon SNS では、aws:sourceOwner アクセス許可を使用して、トピックへのアクセスを現在の AWS アカウントの所有者に制限します。

• 「JSON 形式のメッセージの送信 (p. 136)」セクションの情報を改訂しました。• 「Amazon SNS エンドポイント Java Servlet のコード例 (p. 115)」セクションの

コード例に verifyMessageSignatureURL() メソッドを追加しました。

2019 年 12 月 2 日 以下のセクションを書き直しました。

• AWS マネジメントコンソール を使用してトピックポリシーを設定するには (p. 99)

• AWS マネジメントコンソール を使用して別の AWS アカウントのトピックにAmazon SQS キューのサブスクリプションを追加 するには (p. 100)

• AWS マネジメントコンソール コンソールを使用してサブスクリプションを確認するには (p. 100)

233

Page 239: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2019 年 11 月 26日

• このガイドでは、すべての JSON 例の書式が修正されました。• 「AWS アカウントの任意の CloudWatch アラームが別の AWS アカウントの

Amazon SNS トピックに発行することを許可する (p. 210)」セクションのポリシーの例を修正しました。

2019 年 11 月 25日

• 以下のセクションの情報を改訂しました。• CloudTrail 内の Amazon SNS 情報 (p. 218)• ユーザー通知プロセスの概要 (p. 125)• サポートされているリージョンおよび国 (p. 177)• AWS マネジメントコンソール を使用して Amazon SNS トピックにメッセー

ジを発行するには (p. 14)• 「Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限す

る (p. 210)」セクションを追加しました。

2019 年 11 月 20日

「Amazon SQS キューにメッセージを発行する (p. 208)」セクションの情報を改訂しました。

2019 年 11 月 19日

日本向けの「サポートされているリージョンおよび国 (p. 177)」セクションの情報を更新しました。

2019 年 11 月 18日

• 「Amazon SNS のチュートリアル (p. 8)」セクションのサブセクションを再編成しました。

• 「前提条件 (p. 18)」セクションを追加しました。

2019 年 11 月 14日

以下のセクションを追加しました。

• Amazon SNS デッドレターキュー (p. 65)• Amazon SNS サブスクリプションの Amazon SNS デッドレターキューを設定す

る (p. 18)• メッセージ配信の再試行 (p. 61)

2019 年 11 月 12日

以下のセクションの情報を改訂しました。

• メッセージ例と属性 (p. 71)

2019 年 11 月 8 日 「AWS サービスと暗号化されたトピックのイベントソース間の互換性を保つ (p. 191)」セクションの情報を改訂しました。

2019 年 10 月 29日

以下のセクションの情報を改訂しました。

• Amazon SNS メッセージの署名の確認 (p. 113)• ユーザー通知の仕組み (p. 124)

2019 年 10 月 24日

• 「AWS CLI (p. 77) (サブスクリプションフィルタポリシーの適用)」セクションの CLI の例を修正しました。

• 以下のセクションの情報を改訂しました。• SMS の毎日の使用状況レポートの表示 (p. 170)• 複数プラットフォーム上のアプリケーションへのメッセージ送信 (p. 136)

234

Page 240: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2019 年 10 月 18日

• 「AWS サービスと暗号化されたトピックのイベントソース間の互換性を保つ (p. 191)」セクションの CloudWatch に関する情報を明確にしました。

• 「モバイルプッシュ通知の予約済みメッセージ属性 (p. 68)」ページを更新し、モバイルプッシュ通知用の新しい予約済みメッセージ属性を反映しました。

• 「アラートまたはバックグラウンド通知としてのメッセージを APNs に送信する (p. 137)」セクションを書き換えました。

• 「APNs ヘッダーのカスタム値の指定 (p. 137)」セクションを作成しました。

2019 年 10 月 16日

• 以下のセクションの情報を改訂しました。• Amazon SNS メッセージ属性 (p. 67)• Amazon SNS ラージペイロードと raw メッセージの配信 (p. 90)• AWS サービスと暗号化されたトピックのイベントソース間の互換性を保

つ (p. 191)• 「AWS SDK の例 (p. 130)」セクションで、次の C# コードを修正しました。

if (m.Count > 0 && m[0].Groups.Count > 1){ // The platform endpoint already exists for this token, but with // additional custom data that createEndpoint doesn't want to overwrite. // Just use the existing platform endpoint. endpointArn = m[0].Groups[1].Value;}

2019 年 10 月 10日

「AWS SDK for .NET で属性を使用して Amazon SNS トピックにメッセージを発行するには (p. 26)」セクションで SNSMessageAttributeClass を初期化して使用するためのコード抜粋を修正しました。

2019 年 10 月 8 日 • 「Amazon SNS の Amazon VPC エンドポイントポリシーの作成 (p. 195)」セクションの JSON の例を修正しました。

• 「任意の AWS リソースがトピックに発行することを許可する (p. 208)」セクションの JSON の例を修正し、ポリシーのエッジケースを明確にしました。

2019 年 10 月 3 日 以下のセクションの情報を改訂しました。

• ユーザー通知の仕組み (p. 124)• Amazon SNS ユーザ通知の前提条件 (p. 124)• ユーザー通知プロセスの概要 (p. 125)

2019 年 9 月 23 日 以下のセクションの情報を改訂しました。

• アラートまたはバックグラウンド通知としてのメッセージを APNs に送信する (p. 137)

• 正常な SMS 配信のログの例 (p. 168)• 失敗した SMS 配信のログの例 (p. 169)

2019 年 9 月 10 日 • 以下のセクションの情報を改訂しました。• カスタムプラットフォーム固有のペイロードのモバイルデバイスへの送

信 (p. 136)• フィルタポリシーの制約 (p. 72)

• 「アラートまたはバックグラウンド通知としてのメッセージを APNs に送信する (p. 137)」セクションを追加しました。

235

Page 241: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2019 年 8 月 29 日 以下のセクションの情報を改訂しました。

• 任意の AWS リソースがトピックに発行することを許可する (p. 208)• CloudWatch Logs の表示 (p. 168)• 毎日の使用状況レポートにサブスクライブする (p. 170)

2019 年 8 月 26 日 • モバイルアプリケーションを作成できるリージョンを明確にするために、「受信者がモバイルアプリケーションの場合のユーザー通知に Amazon SNS を使用する (モバイルプッシュ) (p. 123)」に注意を追加しました。

• 「サポートされているリージョンおよび国 (p. 177)」セクションの国とリージョンの表を更新しました。

2019 年 8 月 19 日 「AWS アカウントの任意の CloudWatch アラームが別の AWS アカウントのAmazon SNS トピックに発行することを許可する (p. 210)」セクションを追加しました。

2019 年 8 月 16 日 以下のセクションの情報を改訂しました。

• Amazon SNS のポリシー例 (p. 214)• Amazon SNS で一時的なセキュリティ認証情報を使用する (p. 216)• ポリシーのクォータ (p. 217)• Amazon SNS アクセスコントロールのケース例 (p. 206)

• トピックへのアクセス権を AWS アカウントに付与する (p. 207)• HTTPS へのサブスクリプションの制限 (p. 207)• Amazon SQS キューにメッセージを発行する (p. 208)• 任意の AWS リソースがトピックに発行することを許可する (p. 208)• Amazon S3 バケットがトピックに発行することを許可する (p. 209)

2019 年 8 月 1 日 このガイド全体で Amazon SNS コンソールへの古いリンクを修正しました。

2019 年 7 月 26 日 以下のセクションの情報を改訂しました。

• メッセージ例と属性 (p. 71)• SMS の毎日の使用状況レポートの表示 (p. 170)

2019 年 7 月 24 日 • Amazon SNS のトラブルシューティング (p. 186) セクションの名前が変更されました。

• 「AWS X-Ray を使用した Amazon Simple Notification Service トピックのトラブルシューティング (p. 186)」セクションを追加しました。

2019 年 7 月 19 日 このガイド全体で次の記述を修正しました。AWS サポートチームは、お客様のリクエストに対して、24 時間以内に一次回答を行います。

2019 年 7 月 16 日 Amazon Simple Notification Service 開発者ガイド は、HTML、PDF、Kindle に加えて、GitHub でも利用できます。フィードバックを送信するには、右上の GitHub アイコンをクリックします。

236

Page 242: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2019 年 7 月 11 日 • 以下のセクションの情報を改訂しました。• メッセージのフィルタ処理 (p. 70)• 属性キーの一致 (p. 75)

• 「AWS SDK の例 (p. 130)」セクションの C# コードを訂正しました。

2019 年 7 月 8 日 以下のセクションの情報を改訂しました。

• 「以外」の一致 (ブラックリスト) (p. 75)• 属性キーの一致 (p. 75)

2019 年 7 月 5 日 以下のセクションを追加しました。

• 「以外」の一致 (ブラックリスト) (p. 75)• 属性キーの一致 (p. 75)

2019 年 6 月 23 日 以下のセクションの情報を改訂しました。

• プッシュ通知サービスの TTL メッセージ属性 (p. 143)

2019 年 6 月 22 日 • 以下のセクションを再構成しました。• Amazon SNS リリースノート (p. 229)• Amazon SNS ドキュメント履歴 (p. 232)

• 以下のセクションの情報を改訂しました。• カスタムプラットフォーム固有のペイロードのモバイルデバイスへの送

信 (p. 136)• JSON 形式のメッセージの送信 (p. 136)• プラットフォーム固有のメッセージの送信 (p. 136)• モバイルデバイスへのメッセージの直接的な送信 (p. 135)• メッセージ例と属性 (p. 71) (コード例)

• HTML、PDF、および Kindle に加えて、Amazon Simple Notification Service 開発者ガイド のリリースノートを RSS フィードとして利用できます。

237

Page 243: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2019 年 5 月 31 日 以下のセクションの情報を改訂しました。

• トピック属性 (p. 60)• AWS マネジメントコンソール を使用した配信ステータスのログ記録の設

定 (p. 59)• AWS マネジメントコンソール (p. 76) (サブスクリプションフィルタポリシーの

適用)• AWS マネジメントコンソール (p. 79) (サブスクリプションフィルタポリシーの

削除)• AWS マネジメントコンソール を使用して raw メッセージ配信を有効にす

る (p. 90)• AWS マネジメントコンソール を使用して Lambda エンドポイントで Amazon

SNS を設定する (p. 92)• キューをトピックにサブスクライブする (p. 95)• AWS マネジメントコンソール を使用した SMS メッセージプリファレンスの設

定 (p. 154)• 使用可能なアプリケーションイベント (p. 141)• AWS マネジメントコンソール (p. 142) (モバイルプッシュ通知の送信)• プッシュ通知サービスの TTL メッセージ属性 (p. 143)

2019 年 5 月 30 日 • このガイド全体で C# コード例の構文を修正しました。• AWS SDK の例 (p. 130) セクションのコード例で、token.* を [Tt]oken.* に

修正しました。

2019 年 5 月 28 日 • 以下のセクションの情報を改訂しました。• Amazon SNS メッセージ属性 (p. 67)• AWS マネジメントコンソール を使用して Amazon SNS トピックにメッセー

ジを発行するには (p. 14)• モバイルプッシュ通知の予約済みメッセージ属性 (p. 68)

• 「属性を使用して Amazon SNS トピックにメッセージを発行する (p. 23)」セクションを追加しました。

2019 年 5 月 15 日 以下のセクションの情報を改訂しました。

• Amazon Simple Notification Service とは (p. 1)• ユーザー通知の仕組み (p. 124)• ユーザー通知への Amazon SNS の使用 (p. 123)

2019 年 4 月 3 日 以下のセクションの情報を改訂しました。

• AWS Event Fork Pipelines のデプロイ (p. 121)• AWS Event Fork Pipelines サンプルアプリケーションをデプロイしてテストす

る (p. 43)• 受信者がモバイルアプリケーションの場合のユーザー通知に Amazon SNS を使

用する (モバイルプッシュ) (p. 123)• Amazon SNS モバイルプッシュの使用 (p. 125)• デバイストークンまたは登録 ID の追加 (p. 126)• HTTP/HTTPS エンドポイントを Amazon SNS トピックにサブスクライブす

る (p. 110)

238

Page 244: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2019 年 3 月 28 日 以下のセクションの情報を改訂しました。

• AWS Event Fork Pipelines の詳細 (p. 118)• AWS Event Fork Pipelines ユースケースの例 (p. 44)• サンプルアプリケーションとそのパイプラインの実行を検証するには (p. 47)• 復旧のために問題をシミュレートしてイベントを再生するには (p. 48)

2019 年 3 月 26 日 以下のセクションの情報を改訂しました。

• 受信者として Fork Pipeline を使用する場合 (p. 118)• イベントの再生パイプラインをデプロイしてサブスクライブするには (p. 55)• Amazon SNS の開始方法 (p. 4)• 受信者として HTTP/S エンドポイントを使用する場合 (p. 106)• 別のアカウントの Amazon SQS キューに対する Amazon SNS メッセージの送

信 (p. 99)• 毎日の使用状況レポートにサブスクライブする (p. 170)• サポートされているリージョンおよび国 (p. 177)• HTTPS へのサブスクリプションの制限 (p. 207)

2019 年 3 月 18 日 以下のセクションの情報を改訂しました。

• Amazon SNS の開始方法 (p. 4)• Amazon SNS トピックの作成 (p. 8)• Amazon SNS トピックのサーバー側の暗号化 (SSE) を有効にする (p. 28)• Amazon SNS トピックにメッセージを発行する (p. 14)• 受信者として Amazon SQS キューを使用する場合 (p. 93)

2019 年 3 月 15 日 「重要な用語 (p. 188) (SSE)」セクションの情報を改訂しました。

2019 年 3 月 1 日 モバイルプッシュに関する古い廃止済みの入門ガイドを削除しました。

2019 年 2 月 4 日 「別のアカウントの Amazon SQS キューに対する Amazon SNS メッセージの送信 (p. 99)」セクションに軽微な修正を加えました。

2019 年 1 月 31 日 • 「AWS CloudFormation を使用したフィルタポリシーの削除」セクションを削除しました。

• 以下のセクションを書き直しました。• メッセージのフィルタ処理 (p. 70)• Amazon SNS サブスクリプションフィルタポリシー (p. 70)• Java コレクションとしてのサブスクリプションフィルタポリシー (p. 80)

2019 年 2 月 4 日 「別のアカウントの Amazon SQS キューに対する Amazon SNS メッセージの送信 (p. 99)」セクションに軽微な修正を加えました。

2019 年 1 月 30 日 以下のセクションの情報を明確にしました。

• Amazon SNS ラージペイロードと raw メッセージの配信 (p. 90)• アプリケーションおよびシステムアラート (p. 58)• インターネットトラフィックのプライバシー (p. 193)

239

Page 245: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2018 年 12 月 12日

• Amazon SNS メッセージ配信ステータス (p. 58) セクションの名前が変更されました。

• 以下のセクションで、形式に軽微な修正を加えました。• 受信者として Lambda 関数を使用する場合 (p. 92)• インターネットトラフィックのプライバシー (p. 193)• チュートリアル: Amazon VPC から Amazon SNS メッセージをプライベート

で発行する (p. 33)• Amazon SNS 用の Amazon VPC エンドポイントの作成 (p. 193)

2018 年 11 月 20日

保管時の暗号化 (p. 187) セクションを修正しました。

2018 年 10 月 25日

• 以下のセクションを追加しました。• システム間メッセージングでの Amazon SNS の使用 (p. 92)• ユーザー通知への Amazon SNS の使用 (p. 123)• Amazon SNS の詳細 (p. 57)• Amazon SNS のトラブルシューティング (p. 186)• Amazon SNS のセキュリティ (p. 187)

• 以下のセクションを再編成しました。• Amazon SNS の開始方法 (p. 4)• 受信者として Lambda 関数を使用する場合 (p. 92)• 受信者として Amazon SQS キューを使用する場合 (p. 93)• 受信者として Lambda 関数を使用する場合 (p. 92)• 受信者として Amazon SQS キューを使用する場合 (p. 93)• 受信者として HTTP/S エンドポイントを使用する場合 (p. 106)• 受信者がモバイルアプリケーションの場合のユーザー通知に Amazon SNS を

使用する (モバイルプッシュ) (p. 123)• 受信者が携帯電話番号の場合のユーザー通知に Amazon SNS を使用する

(SMS 送信) (p. 153)• 一般的な Amazon SNS シナリオ (p. 57)• Amazon SNS メッセージ配信ステータス (p. 58)• Amazon SNS メッセージ属性 (p. 67)• Amazon SNS メッセージと JSON の形式 (p. 83)• Amazon SNS ラージペイロードと raw メッセージの配信 (p. 90)• Amazon SNS での Identity and Access Management (p. 195)• Amazon SNS でのアクセス管理の概要 (p. 197)• インターネットトラフィックのプライバシー (p. 193)• CloudWatch メトリクスを使用した Amazon SNS トピックのモニタリン

グ (p. 221)• AWS CloudTrail を使用した Amazon Simple Notification Service API コールの

ログ記録 (p. 218)

2018 年 10 月 8 日 「Amazon SNS メッセージと JSON の形式 (p. 83)」セクションでヘッダーとリクエストの例と修正しました。

240

Page 246: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2018 年 10 月 5 日 • 「受信者として Amazon SQS キューを使用する場合 (p. 93)」の情報を明らかにしました。

• 以下のセクションのポリシーの例を修正しました。• キューにメッセージを送信するアクセス許可をトピックに付与する (p. 95)• IAM ユーザーまたはグループへのポリシーの追加 (p. 97)• キューの所有者がサブスクリプションを作成する (p. 99)

2018 年 9 月 20 日 このガイド全体に軽微な修正を加えました。

2018 年 9 月 19 日 「プラットフォームのレスポンスコード (p. 140)」セクションのすべてのリンクを更新しました。

2018 年 9 月 17 日 • 以下のセクションで application/json を使用する HTTP リクエストの例を修正しました。• 受信者として HTTP/S エンドポイントを使用する場合 (p. 106)• エンドポイントで Amazon SNS メッセージを処理する準備が完了しているこ

とを確認する (p. 107)• このガイド全体にその他の軽微な修正を加えました。

2018 年 9 月 13 日 • 「SMS メッセージングの専有ショートコードを予約する (p. 176)」の情報を訂正しました。

• コード例を修正して throw new SecurityException("Signatureverification failed."); を「Amazon SNS エンドポイント Java Servletのコード例 (p. 115)」セクションの正しい場所に配置しました。

2018 年 9 月 12 日 • 以下のセクションの情報を訂正しました。• 明示的な拒否とデフォルトで拒否の相互作用 (p. 204)• AWS マネジメントコンソール を使用して Lambda エンドポイントで Amazon

SNS を設定する (p. 92)• 受信者として HTTP/S エンドポイントを使用する場合 (p. 106)

• 「キューの所有者がサブスクリプションを作成する (p. 99)」セクションにポリシーの設定手順を追加しました。

• 以下のセクションでリンクが壊れていた問題を修正しました。• プラットフォームのレスポンスコード (p. 140)• プラットフォーム固有のメッセージの送信 (p. 136)• 受信者として HTTP/S エンドポイントを使用する場合 (p. 106)

2018 年 9 月 6 日 「エンドポイントの作成 (p. 194)」の情報を訂正しました。

2018 年 9 月 5 日 • 「毎日の使用状況レポートの情報 (p. 170)」の情報を明らかにしました。• 「Java コレクションとしてのサブスクリプションフィルタポリシー (p. 80)」セ

クションで、コード例を修正して .collect(Collectors.joining(","));を含めました。これにより、formatFilterPolicy() の呼び出し時にAttribute.List から間違ったポリシー形式が返されなくなります。

• 「AWS SDK for .NET で属性を使用して Amazon SNS トピックにメッセージを発行するには (p. 26)」セクションに encryptedVal.add(false); を含むようにコード例を修正しました。

• 最大プッシュ通知メッセージサイズを 4,096 バイトに修正しました。• 「サポートされているリージョンおよび国 (p. 177)」セクションで Mongolia の

ISO コードを MN に修正しました。• このガイド全体にその他の軽微な修正を加えました。

241

Page 247: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイドドキュメント履歴

日付 ドキュメントの更新

2018 年 9 月 4 日 • 「受信者として Amazon SQS キューを使用する場合 (p. 93)」セクションで、Amazon SNS が現在 Amazon SQS キューと互換性がないことを明確にしました。

• メッセージ構造が JSON ではなく String である場合にのみメッセージ属性 (p. 67)が送信されることを明確にしました。

• 「キューをトピックにサブスクライブする (p. 95)」セクションの内容を更新しました。

• 「Amazon SNS の CloudWatch メトリクスの表示 (p. 221)」セクションに軽微な修正を加えました。

• デバイスに依存しないユーザーエクスペリエンスのために、クリックという表現をすべて選択に置き換えました。

• このガイド全体で壊れているリンクを修正しました。

2018 年 8 月 30 日 • 「AWS CloudTrail を使用した Amazon Simple Notification Service API コールのログ記録 (p. 218)」セクションと「エンドポイントの作成 (p. 194)」セクションを書き換えました。

• 「ステップ 2: AWS リソースを作成する (p. 35)」セクションに軽微な修正を加えました。

• 「AWS CloudFormation (p. 78)」セクションを追加しました。

2018 年 8 月 22 日 このガイドのパートを再編成しました。

2018 年 8 月 7 日 AWS SDK for .NET で Amazon SNS を使用する方法を示すコード例をさまざまなセクションに追加しました。

2018 年 8 月 6 日 「チュートリアル: Amazon VPC から Amazon SNS メッセージをプライベートで発行する (p. 33)」セクションを追加しました。

2015 年 9 月 23 日 トピック「プラットフォームエンドポイントの作成とデバイストークンの管理 (p. 129)」を追加しました。

2015 年 9 月 23 日 トピック「アプリケーションイベント通知 (p. 141)」を追加しました。

2015 年 4 月 9 日 「受信者として Lambda 関数を使用する場合 (p. 92)」セクションを追加しました。

2015 年 4 月 9 日 「Amazon SNS メッセージ配信ステータス (p. 58)」セクションを追加しました。

2015 年 2 月 5 日 「メッセージの配信ステータスの Amazon SNS アプリケーション属性を使用する (p. 138)」セクションを追加しました。

2014 年 10 月 9 日 「AWS CloudTrail を使用した Amazon Simple Notification Service API コールのログ記録 (p. 218)」セクションを追加しました。

2014 年 10 月 9 日 「ユーザー通知プロセスの概要 (p. 125)」セクションを追加しました。

2014 年 7 月 10 日 「モバイルプッシュ通知サービスの Amazon SNS 有効期限 (TTL) メッセージ属性の使用 (p. 143)」セクションを追加しました。

2014 年 4 月 23 日 AWS SDK for Java と Amazon SNS の使用に関するセクションを追加しました。

2013 年 12 月 17日

「カスタムプラットフォーム固有のペイロードのモバイルデバイスへの送信 (p. 136)」セクションを追加しました。

2013 年 5 月 1 日 これは Amazon Simple Notification Service 開発者ガイド の最初のリリースです。

242

Page 248: Amazon Simple Notification Service - 開発者ガイドAmazon Simple Notification Service 開発者ガイド ステップ 1: AWS アカウントおよ び IAM 管理ユーザーを作成する

Amazon Simple Notification Service 開発者ガイド

AWS の用語集最新の AWS の用語については、『AWS General Reference』の「AWS の用語集」を参照してください。

243