Amazon SNS 주제 생성 - Amazon Simple Notification Service

Amazon SNS 주제 생성

Amazon SNS 주제는 커뮤니케이션 채널 역할을 하는 논리적 액세스 포인트입니다. 주제를 사용하여 여러 엔드포인트(예: AWS Lambda, Amazon SQS, HTTP/S 또는 이메일 주소)를 그룹화할 수 있습니다.

해당 메시지를 필요로 하는 다른 여러 시스템과 연동하는 메시지 생산자 시스템(예: 전자 상거래 웹 사이트)의 메시지를 브로드캐스트하기 위해 생산자 시스템에 대해 주제를 생성할 수 있습니다.

가장 먼저 이루어지고 가장 흔한 Amazon SNS 태스크는 주제를 생성하는 것입니다. 이 페이지에서는 AWS Management Console, AWS SDK for Java 및 AWS SDK for .NET를 사용하여 주제를 만드는 방법을 보여줍니다.

주제가 생성되는 동안 주제 유형(표준 또는 FIFO)을 선택하고 주제의 이름을 지정합니다. 주제를 생성한 후에는 주제 유형이나 이름을 변경할 수 없습니다. 다른 모든 구성 선택 사항은 주제 생성 중에 선택할 수 있는 사항이며 나중에 편집할 수 있습니다.

중요

개인 식별 정보(PII)나 기타 기밀 정보 또는 민감한 정보를 주제 이름에 추가하지 마십시오. 주제 이름을 통해 CloudWatch Logs를 포함하여 다른 Amazon Web Services에 액세스할 수 있습니다. 주제 이름은 개인 데이터나 민감한 데이터에 사용하기 위한 것이 아닙니다.

AWS Management Console을 사용하여 주제를 생성하려면

  1. Amazon SNS 콘솔에 로그인합니다.

  2. 다음 중 하나를 수행하세요.

    • 이전에 AWS 계정에서 주제를 생성한 적이 없다면 홈 페이지에서 Amazon SNS에 대한 설명을 읽으세요.

    • 이전에 AWS 계정에서 주제를 생성한 적이 있는 경우 탐색 창에서 주제를 선택합니다.

  3. 주제 페이지에서 주제 생성을 선택합니다.

  4. 주제 생성 페이지의 세부 정보 섹션에서 다음을 수행합니다.

    1. 유형에서 주제 유형(표준 또는 FIFO을 선택합니다.

    2. 주제의 이름을 입력합니다. FIFO 주제의 경우 이름 끝에 .fifo를 추가합니다.

    3. (선택 사항) 주제의 표시 이름을 입력합니다.

    4. (선택 사항) FIFO 주제의 경우 콘텐츠 기반 메시지 중복 제거를 선택하여 기본 메시지 중복 제거를 활성화할 수 있습니다. 자세한 정보는 FIFO 주제에 대한 메시지 중복 제거에서 확인하세요.

  5. (선택 사항) 암호화 섹션을 확장하고 다음을 수행합니다. 자세한 내용은 섹션을 참조하세요저장 시 암호화

    1. 암호화 활성을 선택합니다.

    2. 고객 마스터 키(CMK)를 지정합니다. 자세한 내용은 섹션을 참조하세요주요 용어

      각 CMK 유형에 대해 설명, 계정CMK ARN이 표시됩니다.

      중요

      해당 CMK의 소유자가 아니거나 kms:ListAliaseskms:DescribeKey 권한이 없는 계정으로 로그인하는 경우, Amazon SNS 콘솔에서 해당 CMK에 대한 정보를 볼 수 없습니다.

      CMK의 소유자에게 이 권한을 부여해 달라고 요청해야 합니다. 자세한 정보는 AWS Key Management Service 개발자 안내서AWS KMS API 권한: 작업 및 리소스 참조를 참조하세요.

      • Amazon SNS용 AWS 관리형 CMK(기본값) alias/aws/sns는 기본적으로 선택됩니다.

        참고

        다음 사항에 유의하세요.

        • 주제에 대한 Amazon SNS용 AWS 관리형 CMK를 지정하는 데 AWS Management Console을 처음으로 사용하면 AWS KMS에서 Amazon SNS용 AWS 관리형 CMK를 생성합니다.

        • 또는 SSE가 활성화된 주제에서 Publish 작업을 처음으로 사용하는 경우에는 AWS KMS에서 Amazon SNS용 AWS 관리형 CMK를 생성합니다.

      • AWS 계정에서 사용자 지정 CMK를 사용하려면 CMK(Customer master key) 필드를 선택한 다음 목록에서 사용자 지정 CMK를 선택합니다.

        참고

        사용자 지정 CMK 생성에 대한 지침은 AWS Key Management Service 개발자 안내서키 생성을 참조하세요.

      • AWS 계정 또는 다른 AWS 계정의 사용자 지정 CMK ARN을 사용하려면 CMK(Customer master key) 필드에 입력합니다.

  6. (선택 사항) 기본적으로 주제 소유자만 주제에 게시하거나 주제를 구독할 수 있습니다. 추가 액세스 권한을 구성하려면 액세스 정책 섹션을 확장합니다. 자세한 정보는 Amazon SNS의 Identity and Access ManagementAmazon SNS 액세스 제어의 예제 사례에서 확인하세요.

    참고

    콘솔을 사용하여 주제를 생성하는 경우 기본 정책은 aws:SourceOwner 조건 키를 사용합니다. 이 키는 aws:SourceAccount와 비슷합니다.

  7. (선택 사항) Amazon SNS가 실패한 메시지 전송을 재시도하는 방식을 구성하려면 전송 재시도 정책(HTTP/S) 섹션을 확장합니다. 자세한 내용은 섹션을 참조하세요Amazon SNS 메시지 전송 재시도

  8. (선택 사항) Amazon SNS가 CloudWatch로의 메시지 전송을 로깅하는 방식을 구성하려면 전송 상태 로깅 섹션을 확장합니다. 자세한 내용은 섹션을 참조하세요Amazon SNS 메시지 전송 상태

  9. (선택 사항) 메타데이터 태그를 주제에 추가하려면 태그 섹션을 확장하고, (옵션)을 입력한 다음 태그 추가를 선택합니다. 자세한 내용은 섹션을 참조하세요Amazon SNS 주제 태그 지정

  10. 주제 생성을 선택합니다.

    주제가 생성되고 MyTopic 페이지가 표시됩니다.

    주제의 이름, ARN, (선택 사항) 표시 이름주제 소유자의 AWS 계정 ID가 세부 정보 섹션에 표시됩니다.

  11. 다음 예와 같이 주제 ARN을 클립보드에 복사합니다.

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

AWS SDK를 사용하여 주제를 생성하려면

AWS SDK를 사용하려면 자격 증명을 사용하여 구성해야 합니다. 자세한 정보는 AWS SDK 및 도구 참조 가이드공유 구성 및 자격 증명 파일을 참조하세요.

다음 코드 예제는 Amazon SNS 주제를 생성하는 방법을 보여줍니다.

.NET
AWS SDK for .NET

/// <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; }
  • GitHub에서 지침과 추가 코드를 확인해 보세요.

  • API에 대한 세부 정보는 AWS SDK for .NET API 참조CreateTopic을 참조하세요.

C++
C++용 SDK

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);
  • GitHub에서 지침과 추가 코드를 확인해 보세요.

  • API에 대한 세부 정보는 AWS SDK for C++ API 참조CreateTopic을 참조하세요.

Go
SDK for Go V2
  • GitHub에서 지침과 추가 코드를 확인해 보세요.

  • API에 대한 세부 정보는 AWS SDK for Go API 참조CreateTopic을 참조하세요.

Java
SDK for Java 2.x

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 ""; }
  • GitHub에서 지침과 추가 코드를 확인해 보세요.

  • API에 대한 세부 정보는 AWS SDK for Java 2.x API 참조CreateTopic을 참조하세요.

JavaScript
SDK for JavaScript V3

별도의 모듈에서 클라이언트를 생성하고 내보냅니다.

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
Kotlin용 SDK
참고

이 시험판 설명서는 미리 보기 버전 기능에 관한 것입니다. 변경될 수 있습니다.

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() } }
  • GitHub에서 지침과 추가 코드를 확인해 보세요.

  • API에 대한 세부 정보는 AWS Kotlin용 SDK API 참조CreateTopic을 참조하세요.

PHP
SDK for PHP

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)

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
  • GitHub에서 지침과 추가 코드를 확인해 보세요.

  • API에 대한 세부 정보는 AWS SDK for Python(Boto3) API 참조CreateTopic을 참조하세요.

Ruby
SDK for Ruby

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는 변경될 수 있으며 프로덕션에서 사용해서는 안 됩니다.

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(()) }
  • GitHub에서 지침과 추가 코드를 확인해 보세요.

  • API에 대한 세부 정보는 AWS SDK for Rust API 참조CreateTopic을 참조하세요.