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