翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQSキューを Amazon SNSトピックにサブスクライブする
Amazon SNSトピックが Amazon SQSキューにメッセージを送信できるようにするには、次のいずれかを実行します。
-
Amazon SQSコンソール
を使用すると、プロセスが簡単になります。詳細については、「Amazon Simple SQS Queue Service デベロッパーガイド」の「Amazon キューを Amazon SNSトピックにサブスクライブする」を参照してください。 -
以下のステップに従います。
別の AWSアカウントにあるキューにメッセージを送信するようにトピックをセットアップする方法については、「別のアカウントの Amazon SQSキューに Amazon SNSメッセージを送信する」を参照してください。
2 つのキューにメッセージを送信するトピックを作成する AWS CloudFormation テンプレートを確認するには、「」を参照してくださいを使用して Amazon から Amazon SNSへのSQSメッセージングを自動化する AWS CloudFormation。
ステップ 1: キューとトピックARNの を取得する
トピックにキューをサブスクライブするときは、ARNキューの のコピーが必要です。同様に、トピックにキューにメッセージを送信するアクセス許可を付与する場合は、トピックARNの のコピーが必要です。
キュー を取得するにはARN、Amazon SQSコンソールまたは GetQueueAttributesAPIアクションを使用できます。
Amazon SQSコンソールARNからキューを取得するには
にサインイン AWS Management Console し、 で Amazon SQSコンソールを開きますhttps://console.aws.amazon.com/sqs/
。 -
ARN 取得するキューのボックスを選択します。
-
詳細セクションから、ARN値をコピーして Amazon SNSトピックへのサブスクライブに使用できます。
トピック を取得するにはARN、Amazon SNSコンソール、 sns-get-topic-attributes
コマンド、または GetQueueAttributes
APIアクションを使用できます。
Amazon SNSコンソールARNからトピックを取得するには
Amazon SNSコンソール
にサインインします。 -
ナビゲーションパネルで、ARN取得するトピックを選択します。
-
詳細セクションからARN、値をコピーして、Amazon SNSトピックがキューにメッセージを送信するためのアクセス許可を付与できるようにします。
ステップ 2: Amazon SQSキューにメッセージを送信するアクセス許可を Amazon SNSトピックに付与する
Amazon SNSトピックがキューにメッセージを送信できるようにするには、Amazon SNSトピックがsqs:SendMessage
アクションを実行できるようにするポリシーをキューに設定する必要があります。
トピックにキューをサブスクライブする前に、トピックとキューが必要です。トピックやキューをまだ作成していない場合は、ここで作成します。詳細については、「トピックの作成」と、「Amazon Simple Queue Service デベロッパーガイド」の「キューの作成」を参照してください。
キューにポリシーを設定するには、Amazon SQSコンソールまたは SetQueueAttributesAPIアクションを使用できます。開始する前に、キューへのメッセージの送信を許可するトピックARNの があることを確認してください。複数のトピックにキューをサブスクライブする場合、ポリシーにはトピックごとに 1 つの Statement
要素が含まれている必要があります。
Amazon SQSコンソールを使用してキューに SendMessage ポリシーを設定するには
にサインイン AWS Management Console し、 で Amazon SQSコンソールを開きますhttps://console.aws.amazon.com/sqs/
。 -
ポリシーを設定するキューのチェックボックスをオンにし、[アクセスポリシー] タブを選択してから、[編集] を選択します。
-
[アクセスポリシー] セクションで、キューにアクセスできるユーザーを定義します。
-
トピックにアクションを許可する条件を追加します。
-
以下の例に示すように、 を Amazon SNSサービス
Principal
に設定します。 -
aws:SourceArn
またはaws:SourceAccount
グローバル条件キーを使用して、混乱した代理シナリオから保護します。これらの条件キーを使用するには、 値をトピックARNの に設定します。キューを複数のトピックにサブスクライブしている場合は、代わりにaws:SourceAccount
を使用できます。
例えば、次のポリシーでは、 が MyTopic にメッセージを送信することを許可します MyQueue。
{ "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "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コンソール、 sns-subscribe
CLI コマンド、または Subscribe
APIアクションを使用できます。開始する前に、サブスクライブするキューARNの があることを確認してください。
Amazon SNSコンソール
にサインインします。 -
ナビゲーションパネルで、[トピック] を選択します。
-
[トピック] ページでトピックを選択します。
-
で
MyTopic
「」ページの「サブスクリプションの作成」を選択します。 -
[サブスクリプションの作成] ページで [詳細] セクションで、以下を実行します。
-
トピック ARNを確認します。
-
プロトコル で、Amazon SQSを選択します。
-
エンドポイント には、Amazon SQSキューARNの を入力します。
-
[Create Subscription] を選択します。
サブスクリプションが確認されると、新しいサブスクリプションの [サブスクリプション ID] にサブスクリプション ID が表示されます。キューの所有者がサブスクリプションを作成する場合、サブスクリプションは自動的に確認され、ほぼ瞬時にアクティブになります。
通常は、自分のアカウントの自分のトピックに自分のキューをサブスクライブします。ただし、別のアカウントのキューを自分のトピックにサブスクライブすることもできます。サブスクリプションを作成するユーザーがキューの所有者ではない場合 (例えば、アカウント A のユーザーがアカウント A のトピックにアカウント B のキューをサブスクライブする場合)、サブスクリプションの確認が必要です。別のアカウントのキューをサブスクライブし、サブスクリプションを確認する方法の詳細については、「別のアカウントの Amazon SQSキューに Amazon SNSメッセージを送信する」を参照してください。
-
ステップ 4: 適切なトピックおよびキューアクションに対するアクセス権限をユーザーに付与する
AWS Identity and Access Management (IAM) を使用して、適切なユーザーのみが Amazon SNSトピックに発行できるようにし、Amazon SQSキューからメッセージを読み取る/削除できるようにする必要があります。IAM ユーザーのトピックとキューに対するアクションの制御の詳細については、Amazon Simple Queue Service デベロッパーガイドのAmazon でのアイデンティティベースのポリシーの使用 SNS「」および「Amazon での Identity and Access ManagementSQS」を参照してください。
トピックまたはキューへのアクセスは、以下の 2 つの方法で制御します。
-
IAM ユーザーまたはグループ にポリシーを追加します。ユーザーにトピックやキューへのアクセス権限を付与する最も簡単な方法として、グループを作成し、そのグループに適切なポリシーとユーザーを追加することができます。個々のユーザーに設定するポリシーを継続的に追跡するよりも、グループに対してユーザーを追加または削除する方がはるかに簡単です。
-
トピックまたはキューにポリシーを追加する。トピックまたはキューへのアクセス許可を別の AWS アカウントに付与する場合は、アクセス許可を付与 AWS アカウント するプリンシパルとして を持つポリシーを追加することしかできません。
ほとんどの場合は、最初の方法 (ポリシーをグループに適用し、適切なユーザーをグループに追加または削除することでアクセス権限を管理する) を使用します。別のアカウントのユーザーにアクセス権限を付与する場合は、2 番目の方法を使用する必要があります。
IAM ユーザーまたはグループへのポリシーの追加
次のポリシーをIAMユーザーまたはグループに追加した場合、そのユーザーまたはそのグループのメンバーに、トピック sns:Publish
に対してアクションを実行するアクセス許可を付与します MyTopic。
{ "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }
次のポリシーをIAMユーザーまたはグループに追加した場合、そのユーザーまたはそのグループのメンバーに、キュー MyQueue1 および MyQueue2 で sqs:ReceiveMessage
および sqs:DeleteMessage
アクションを実行するアクセス許可を付与します。
{ "Statement": [ { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage", "sqs:DeleteMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue1", "arn:aws:sqs:us-east-2:123456789012:MyQueue2" ] } ] }
トピックまたはキューにポリシーを追加する
以下のサンプルポリシーは、トピックとキューに別のアカウントのアクセス権限を付与する方法を示しています。
注記
アカウント内のリソースへの別の AWS アカウント アクセスを許可すると、そのリソースへの管理者レベルのアクセス (ワイルドカードアクセス) アクセス許可を持つIAMユーザーにも付与されます。他のアカウントの他のすべてのIAMユーザーは、リソースへのアクセスを自動的に拒否されます。その AWS アカウント リソースへのアクセス権をその の特定のIAMユーザーに付与する場合、アカウントまたは管理者レベルのアクセス権を持つIAMユーザーは、リソースのアクセス許可をそれらのIAMユーザーに委任する必要があります。クロスアカウント委任の詳細については、「 ガイド」の「クロスアカウントアクセスの有効化」を参照してください。 IAM
MyTopic アカウント 123456789012 のトピックに次のポリシーを追加した場合、そのトピックsns:Publish
に対してアクションを実行するアクセス許可をアカウント 111122223333 に付与します。
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }
アカウント 123456789012 のキューに次のポリシーを追加した場合、そのキュー MyQueue で sqs:ReceiveMessage
および sqs:DeleteMessage
アクションを実行するアクセス許可をアカウント 111122223333 に付与します。
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue" ] } ] }
ステップ 5: トピックのキューサブスクリプションをテストする
トピックのキューサブスクリプションは、トピックに発行し、トピックがキューに送信したメッセージを表示することでテストできます。
Amazon SNSコンソールを使用してトピックに発行するには
-
トピックに発行するアクセス許可を持つ AWS アカウント または IAM ユーザーの認証情報を使用して、 にサインイン AWS Management Console し、 で Amazon SNSコンソールを開きますhttps://console.aws.amazon.com/sns/
。 -
ナビゲーションパネルで、トピックを選択し、[トピックに発行] を選択します。
-
[件名] ボックスに件名 (「
Testing publish to queue
」など) を入力し、[メッセージ] ボックスに任意のテキスト (「Hello world!
」など) を入力して、[メッセージの発行] を選択します。「Your message has been successfully published.」というメッセージが表示されます。
Amazon SQSコンソールを使用してトピックからのメッセージを表示するには
-
キュー内のメッセージを表示するアクセス許可を持つ AWS アカウント またはIAMユーザーの認証情報を使用して、 にサインイン AWS Management Console し、 で Amazon SQSコンソールを開きますhttps://console.aws.amazon.com/sqs/
。 -
トピックにサブスクライブされている [queue] (キュー) を選択します。
-
[Send and receive messages] (メッセージの送受信) を選択し、[Poll for messages] (メッセージのポーリング) を選択します。タイプが [通知] のメッセージが表示されます。
-
[本文] カラムで、[詳細] を選択します。メッセージの詳細ボックスには、トピックに発行した件名とメッセージを含むJSONドキュメントが含まれています。メッセージは次の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" }
-
[閉じる] を選択します。キューに通知メッセージを送信するトピックへの発行は、正常に終了しました。