Amazon SNS トピックを作成する
Amazon SNS トピックは、通信チャネルとして機能する論理アクセスポイントです。トピックを使用すると、複数のエンドポイント (AWS Lambda、Amazon SQS、HTTP/S、E メールアドレスなど) をグループにまとめることができます。
メッセージプロデューサーシステム (e コマースウェブサイトなど) で当システムのメッセージを必要とする他の複数のサービス (チェックアウトシステムやフルフィルメントシステムなど) にメッセージをブロードキャストするには、プロデューサーシステムのトピックを作成できます。
Amazon SNS で最も一般的な最初のタスクは、トピックの作成です。このページでは、AWS Management Console 、AWS SDK for Java、および AWS SDK for .NET トピックを作成する方法を説明しています。
作成時に、トピックタイプ (標準または FIFO) を選択し、トピックに名前を付けます。トピックを作成したら、トピックのタイプや名前を変更することはできません。その他の設定項目はすべて、トピックの作成時にオプションであり、後で編集できます。
個人を特定できる情報 (PII) などの機密情報や秘匿性の高い情報はトピック名に追加しないでください。トピック名は、CloudWatch Logs を含む他の Amazon Web Services のサービスからアクセスできます。トピック名は、プライベートデータや機密データとして使用することを意図していません。
AWS Management Console を使用してトピックを作成するには
Amazon SNS コンソールにサインインします。
-
次のいずれかを実行します。
[トピック] ページで、[トピックの作成] を選択します。
-
[サブスクリプションの作成] ページで [詳細] セクションで、以下を実行します。
-
[タイプ] で、トピックタイプ (標準またはFIFO) を選択します。
-
トピックの名前を入力します。FIFO トピックで、名前の末尾に .fifo を追加します。
-
(オプション) トピックの表示名を入力します。
-
(オプション) FIFO トピックで、[コンテンツベースのメッセージ重複排除] を選択して、デフォルトのメッセージの重複排除を有効にします。詳細については、「FIFO トピックのメッセージ重複除外」を参照してください。
-
(オプション) [暗号化] セクションを展開し、以下の操作を実行します。詳細については、「保管中の暗号化」を参照してください。
-
[暗号化の有効化] を選択します。
-
AWS KMS キーを指定します。詳細については、「重要な用語」を参照してください。
KMS タイプごとに、[Description] (説明)、[Account] (アカウント)、および [KMS ARN] が表示されます。
KMS の所有者ではない場合、または kms:ListAliases
および kms:DescribeKey
の許可がないアカウントでログインした場合、Amazon SNS コンソールで KMS に関する情報を表示できません。
これらの許可を付与するように、KMS の所有者へ依頼してください。詳細については、『AWS Key Management Service デベロッパーガイド』の「AWS KMS API アクセス権限: アクションとリソースのリファレンス」を参照してください。
-
デフォルトでは、Amazon SNS 用の AWS マネージド CMK [(Default) alias/aws/sns] ((デフォルト) alias/aws/sns) が選択されています。
以下に留意してください。
-
AWS Management Console を初めて使用してトピックに Amazon SNS 用の AWS マネージド KMS を指定する場合は、AWS KMS は、Amazon SNS 用の AWS マネージド KMS を作成します。
-
または、SSE が有効な状態で、トピックで Publish
アクションを初めて使用する場合は、AWS KMS は Amazon SNS 用 AWS マネージド KMS を作成します。
-
AWS アカウントからカスタム KMS を使用するには、[AWS KMS key] (AWS KMS キー) フィールドを選択し、リストからカスタム KMS を選択します。
カスタム KMS の作成手順については、AWS Key Management Service デベロッパーガイドの「キーの作成」を参照してください。
-
AWS アカウントまたは別の AWS アカウントからカスタム KMS ARN を使用するには、[AWS KMS key] (AWS KMS キー) フィールドにそれを入力します。
-
(オプション) デフォルトでは、トピックの所有者のみがトピックを発行またはサブスクライブできます。追加のアクセス許可を設定するには、[アクセスポリシー] セクションを展開します。詳細については、「Amazon SNS での Identity and Access Management」および「Amazon SNS アクセスコントロールのケース例」を参照してください。
コンソールを使用してトピックを作成すると、デフォルトのポリシーでは aws:SourceOwner
条件キーが使用されます。このキーは aws:SourceAccount
に類似しています。
-
(オプション) 失敗したメッセージ配信試行を Amazon SNS で再試行する方法を設定するには、[配信再試行ポリシー (HTTP/S)] セクションを展開します。詳細については、「Amazon SNS メッセージ配信の再試行」を参照してください。
-
(オプション) CloudWatch へのメッセージの配信を Amazon SNS でログに記録する方法を設定するには、[配信ステータスのログ記録] セクションを展開します。詳細については、「Amazon SNS メッセージ配信ステータス」を参照してください。
-
(オプション) トピックにメタデータタグを追加するには、[タグ] セクションを展開し、[キー] と [値] (オプション) に入力し、[タグの追加] を選択します。詳細については、「Amazon SNS トピックのタグ付け」を参照してください。
-
[Create topic] (トピックの作成) を選択します。
トピックが作成され、[MyTopic
] ページが表示されます。
トピックの名前、ARN、(オプション) 表示名、およびトピックの所有者の AWS アカウント ID が [Details] (詳細) セクションに表示されます。
-
トピック ARN をクリップボードにコピーします。例:
arn:aws:sns:us-east-2:123456789012:MyTopic
AWS SDK を使用してトピックを作成するには
AWS SDK を使用するには、認証情報を使用して設定する必要があります。詳細については、『AWS SDK とツールのリファレンスガイド』の「共有設定ファイルと認証情報ファイル」を参照してください。
次のコード例は、Amazon SNS トピックを作成する方法を示しています。
- .NET
-
- AWS SDK for .NET
-
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
using System;
using System.Threading.Tasks;
using Amazon.SimpleNotificationService;
using Amazon.SimpleNotificationService.Model;
/// <summary>
/// This example shows how to use Amazon Simple Notification Service
/// (Amazon SNS) to add a new Amazon SNS topic. The example was created
/// using the AWS SDK for .NET version 3.7 and .NET Core 5.0.
/// </summary>
public class CreateSNSTopic
{
public static async Task Main()
{
string topicName = "ExampleSNSTopic";
IAmazonSimpleNotificationService client = new AmazonSimpleNotificationServiceClient();
var topicArn = await CreateSNSTopicAsync(client, topicName);
Console.WriteLine($"New topic ARN: {topicArn}");
}
/// <summary>
/// Creates a new SNS topic using the supplied topic name.
/// </summary>
/// <param name="client">The initialized SNS client object used to
/// create the new topic.</param>
/// <param name="topicName">A string representing the topic name.</param>
/// <returns>The Amazon Resource Name (ARN) of the created topic.</returns>
public static async Task<string> CreateSNSTopicAsync(IAmazonSimpleNotificationService client, string topicName)
{
var request = new CreateTopicRequest
{
Name = topicName,
};
var response = await client.CreateTopicAsync(request);
return response.TopicArn;
}
}
- C++
-
- SDK for C++
-
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
Aws::SDKOptions options;
Aws::InitAPI(options);
{
Aws::String topic_name = argv[1];
Aws::SNS::SNSClient sns;
Aws::SNS::Model::CreateTopicRequest ct_req;
ct_req.SetName(topic_name);
auto ct_out = sns.CreateTopic(ct_req);
if (ct_out.IsSuccess())
{
std::cout << "Successfully created topic " << topic_name << std::endl;
}
else
{
std::cout << "Error creating topic " << topic_name << ":" <<
ct_out.GetError().GetMessage() << std::endl;
}
}
Aws::ShutdownAPI(options);
- Go
-
- SDK for Go V2
-
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
- Java
-
- SDK for Java 2.x
-
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
public static String createSNSTopic(SnsClient snsClient, String topicName ) {
CreateTopicResponse result = null;
try {
CreateTopicRequest request = CreateTopicRequest.builder()
.name(topicName)
.build();
result = snsClient.createTopic(request);
return result.topicArn();
} catch (SnsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
return "";
}
- JavaScript
-
- SDK for JavaScript V3
-
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
別のモジュールでクライアントを作成し、エクスポートします。
import { SNSClient } from "@aws-sdk/client-sns";
// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create SNS service object.
const snsClient = new SNSClient({ region: REGION });
export { snsClient };
SDK モジュールとクライアントモジュールをインポートし、API を呼び出します。
// Import required AWS SDK clients and commands for Node.js
import {CreateTopicCommand } from "@aws-sdk/client-sns";
import {snsClient } from "./libs/snsClient.js";
// Set the parameters
const params = { Name: "TOPIC_NAME" }; //TOPIC_NAME
const run = async () => {
try {
const data = await snsClient.send(new CreateTopicCommand(params));
console.log("Success.", data);
return data; // For unit tests.
} catch (err) {
console.log("Error", err.stack);
}
};
run();
- Kotlin
-
- SDK for Kotlin
-
これはプレビューリリースの機能に関するプレリリースドキュメントです。このドキュメントは変更される可能性があります。
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
suspend fun createSNSTopic(topicName: String): String {
val request = CreateTopicRequest {
name = topicName
}
SnsClient { region = "us-east-1" }.use { snsClient ->
val result = snsClient.createTopic(request)
return result.topicArn.toString()
}
}
- PHP
-
- SDK for PHP
-
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
require 'vendor/autoload.php';
use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;
/**
* Create a Simple Notification Service topics in your AWS account at the requested region.
*
* This code expects that you have AWS credentials set up per:
* https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
*/
$SnSclient = new SnsClient([
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);
$topicname = 'myTopic';
try {
$result = $SnSclient->createTopic([
'Name' => $topicname,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}
- Python
-
- SDK for Python (Boto3)
-
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource
def create_topic(self, name):
"""
Creates a notification topic.
:param name: The name of the topic to create.
:return: The newly created topic.
"""
try:
topic = self.sns_resource.create_topic(Name=name)
logger.info("Created topic %s with ARN %s.", name, topic.arn)
except ClientError:
logger.exception("Couldn't create topic %s.", name)
raise
else:
return topic
- Ruby
-
- SDK for Ruby
-
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
require "aws-sdk-sns" # v2: require 'aws-sdk'
def topic_created?(sns_client, topic_name)
sns_client.create_topic(name: topic_name)
rescue StandardError => e
puts "Error while creating the topic named '#{topic_name}': #{e.message}"
end
# Full example call:
def run_me
topic_name = "TOPIC_NAME"
region = "REGION"
sns_client = Aws::SNS::Client.new(region: region)
puts "Creating the topic '#{topic_name}'..."
if topic_created?(sns_client, topic_name)
puts "The topic was created."
else
puts "The topic was not created. Stopping program."
exit 1
end
end
run_me if $PROGRAM_NAME == __FILE__
- Rust
-
- SDK for Rust
-
これはプレビューリリースの SDK に関するドキュメントです。SDK は変更される場合があり、本稼働環境では使用しないでください。
GitHub には、その他のリソースもあります。完全な例を見つけて、AWS コード例リポジトリでの設定と実行の方法を確認してください。
async fn make_topic(client: &Client, topic_name: &str) -> Result<(), Error> {
let resp = client.create_topic().name(topic_name).send().await?;
println!(
"Created topic with ARN: {}",
resp.topic_arn().unwrap_or_default()
);
Ok(())
}