주제에 게시 - Amazon Simple Notification Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

주제에 게시

해당 전화번호에서 Amazon SNS 주제를 구독하면 단일 SMS 메시지를 수많은 전화번호에 한 번에 게시할 수 있습니다. SNS 주제는 구독자를 추가한 다음 해당 구독자 모두에게 메시지를 게시할 수 있는 통신 채널입니다. 사용자가 구독을 취소하거나 구독자가 AWS 계정의 SMS 메시지 수신을 옵트아웃할 때까지 구독자는 주제에 게시된 모든 메시지를 수신합니다.

주제로 메시지 전송(콘솔)

주제를 생성하려면

SMS 메시지를 전송할 주제가 아직 없는 경우 다음 단계를 완료합니다.

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

  2. 콘솔 메뉴에서 SMS 메시징을 지원하는 AWS 리전을 선택합니다.

  3. 탐색 창에서 주제를 선택합니다.

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

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

    1. 유형에서 표준을 선택합니다.

    2. 이름에 주제 이름을 입력합니다.

    3. (선택 사항) 표시 이름에 SMS 메시지의 사용자 지정 접두사를 입력합니다. 주제에 메시지를 전송할 때 Amazon SNS는 오른쪽 꺽쇠괄호(>) 및 공백 다음에 표시 이름을 접두사로 추가합니다. 표시 이름은 대/소문자로 구분하지 않으며 Amazon SNS는 표시 이름을 대문자로 전환합니다. 예를 들어, 주제의 표시 이름이 MyTopic이고 메시지가 Hello World!인 경우 메시지는 다음과 같이 나타납니다.

      MYTOPIC> Hello World!
  6. 주제 생성을 선택합니다. 주제 이름과 Amazon 리소스 이름(ARN)은 주제 페이지에 나타납니다.

SMS 구독을 생성하려면

구독을 사용하여 메시지를 주제에 한 번 게시하여 SMS 메시지를 여러 수신자에게 전송할 수 있습니다.

참고

Amazon SNS를 사용하여 SMS 메시지를 보내기 시작하는 경우 AWS 계정이 SMS 샌드박스에 있습니다. SMS 샌드박스는 SMS 발신자로서의 평판을 위협하지 않고 Amazon SNS 기능을 사용해 볼 수 있는 안전한 환경을 제공합니다. 계정이 SMS 샌드박스에 있는 동안 Amazon SNS의 모든 기능을 사용할 수 있지만 SMS 메시지는 확인된 대상 전화번호로만 보낼 수 있습니다. 자세한 내용은 SMS 샌드박스 섹션을 참조하세요.

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

  2. 탐색 창에서 구독을 선택합니다.

  3. 구독 페이지에서 구독 생성을 선택합니다.

  4. 구독 생성 페이지의 세부 정보에서 다음을 수행합니다.

    1. 주제 ARN에 SMS 메시지를 보낼 주제의 Amazon 리소스 이름(ARN)을 입력하거나 선택합니다.

    2. 프로토콜에서 SMS를 선택합니다.

    3. 엔드포인트에서 주제를 구독할 전화번호를 입력합니다.

  5. 구독 생성을 선택합니다. 구독 정보는 구독 페이지에 나타납니다.

    전화번호를 더 추가하려면 다음 단계를 반복합니다. 다른 유형의 구독을 추가할 수도 있습니다(예: 이메일).

메시지를 전송하려면

메시지를 주제에 게시하면 Amazon SNS는 주제를 구독하는 모든 전화번호로 해당 메시지를 전송합니다.

  1. Amazon SNS 콘솔주제 페이지에서 SMS 메시지를 보낼 주제의 이름을 선택합니다.

  2. 주제 세부 정보 페이지에서 [Publish to topic]을 선택합니다.

  3. 주제에 메시지 게시 페이지의 메시지 세부 정보에서 다음을 수행합니다.

    1. 주제에 이메일 구독이 포함되고 이메일 및 SMS 구독에 모두 게시하려는 경우가 아닌 한 제목 필드를 비워 둡니다. Amazon SNS는 귀하가 이메일 제목 줄로 입력한 제목을 사용합니다.

    2. (선택 사항) 유지 시간(TTL)에 Amazon SNS가 SMS 메시지를 모바일 애플리케이션 엔드포인트 구독자에게 전송해야 하는 시간(초)을 입력합니다.

  4. 메시지 본문에서 다음을 수행합니다.

    1. 메시지 구조에서 모든 전송 프로토콜에 대해 동일한 페이로드를 선택하여 주제를 구독하는 모든 프로토콜 유형에 동일한 메시지를 보냅니다. 또는 각 전송 프로토콜에 대한 사용자 지정 페이로드를 선택하여 다양한 프로토콜 유형의 구독자에 대한 메시지를 사용자 지정합니다. 예를 들어, 전화번호 구독자에 대한 기본 메시지와 이메일 구독자에 대한 사용자 지정 메시지를 입력할 수 있습니다.

    2. 엔드포인트로 보낼 메시지 본문에 메시지 또는 전송 프로토콜당 사용자 지정 메시지를 입력합니다.

      주제에 표시 이름이 있는 경우 Amazon SNS는 해당 이름을 메시지에 추가하므로 메시지 길이가 증가합니다. 표시 이름 길이는 이름에 포함된 문자 수 더하기 Amazon SNS가 추가하는 오른쪽 꺾쇠괄호(>) 및 공백에 해당하는 2자입니다.

      SMS 메시지의 크기 할당량에 대한 자세한 내용은 휴대폰에 게시에서 확인하세요.

  5. (선택 사항) 메시지 속성에 타임스탬프, 서명, ID와 같은 메시지 메타데이터를 추가합니다.

  6. 메시지 게시를 선택합니다. Amazon SNS는 SMS 메시지를 전송하고 성공 메시지를 표시합니다.

주제로 메시지 전송(AWS SDK)

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

다음 코드 예제에서는 작업 방법을 보여줍니다.

  • Amazon SNS 주제를 생성합니다.

  • 전화번호를 주제에 구독시킵니다.

  • 모든 구독 전화번호가 한 번에 메시지를 받을 수 있도록 주제에 SMS 메시지를 게시합니다.

Java
SDK for Java 2.x
참고

GitHub에 더 많은 내용이 있습니다. AWS 코드 예제 리포지토리에서 전체 예제를 찾고 설정 및 실행하는 방법을 배워보세요.

주제를 만들고 해당 ARN을 반환합니다.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.CreateTopicRequest; import software.amazon.awssdk.services.sns.model.CreateTopicResponse; import software.amazon.awssdk.services.sns.model.SnsException; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class CreateTopic { public static void main(String[] args) { final String usage = """ Usage: <topicName> Where: topicName - The name of the topic to create (for example, mytopic). """; if (args.length != 1) { System.out.println(usage); System.exit(1); } String topicName = args[0]; System.out.println("Creating a topic with name: " + topicName); SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); String arnVal = createSNSTopic(snsClient, topicName); System.out.println("The topic ARN is" + arnVal); snsClient.close(); } public static String createSNSTopic(SnsClient snsClient, String topicName) { CreateTopicResponse result; 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 ""; } }

주제에 엔드포인트를 구독 설정합니다.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.SnsException; import software.amazon.awssdk.services.sns.model.SubscribeRequest; import software.amazon.awssdk.services.sns.model.SubscribeResponse; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class SubscribeTextSMS { public static void main(String[] args) { final String usage = """ Usage: <topicArn> <phoneNumber> Where: topicArn - The ARN of the topic to subscribe. phoneNumber - A mobile phone number that receives notifications (for example, +1XXX5550100). """; if (args.length < 2) { System.out.println(usage); System.exit(1); } String topicArn = args[0]; String phoneNumber = args[1]; SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); subTextSNS(snsClient, topicArn, phoneNumber); snsClient.close(); } public static void subTextSNS(SnsClient snsClient, String topicArn, String phoneNumber) { try { SubscribeRequest request = SubscribeRequest.builder() .protocol("sms") .endpoint(phoneNumber) .returnSubscriptionArn(true) .topicArn(topicArn) .build(); SubscribeResponse result = snsClient.subscribe(request); System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is " + result.sdkHttpResponse().statusCode()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }

발신자의 ID, 최고 가격 및 유형과 같은 메시지의 속성을 설정합니다. 메시지 속성은 선택 사항입니다.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest; import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse; import software.amazon.awssdk.services.sns.model.SnsException; import java.util.HashMap; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class SetSMSAttributes { public static void main(String[] args) { HashMap<String, String> attributes = new HashMap<>(1); attributes.put("DefaultSMSType", "Transactional"); attributes.put("UsageReportS3Bucket", "janbucket"); SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); setSNSAttributes(snsClient, attributes); snsClient.close(); } public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) { try { SetSmsAttributesRequest request = SetSmsAttributesRequest.builder() .attributes(attributes) .build(); SetSmsAttributesResponse result = snsClient.setSMSAttributes(request); System.out.println("Set default Attributes to " + attributes + ". Status was " + result.sdkHttpResponse().statusCode()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }

주제에 메시지를 게시합니다. 메시지는 모든 구독자에게 전송됩니다.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.PublishRequest; import software.amazon.awssdk.services.sns.model.PublishResponse; import software.amazon.awssdk.services.sns.model.SnsException; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class PublishTextSMS { public static void main(String[] args) { final String usage = """ Usage: <message> <phoneNumber> Where: message - The message text to send. phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s """; if (args.length != 2) { System.out.println(usage); System.exit(1); } String message = args[0]; String phoneNumber = args[1]; SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); pubTextSMS(snsClient, message, phoneNumber); snsClient.close(); } public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) { try { PublishRequest request = PublishRequest.builder() .message(message) .phoneNumber(phoneNumber) .build(); PublishResponse result = snsClient.publish(request); System.out .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }