아마존 웹 서비스를 다루는 기술 30장 - 11. SNS

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

AWS API, CLI 활용하기

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

SNS

SNS 토픽에 메시지를 보내는 방법은 다음과 같습니다.

  • Message: 메시지 내용을 설정합니다. UTF-8로 인코딩해야 하며 최대 크기는 262,144 바이트입니다(문자 개수가 아닌 바이트 단위입니다).
  • Subject: 이메일 구독에 메시지를 보낼 때 이메일의 제목입니다. 다른 프로토콜에는 사용하지 않습니다.
  • TopicArn: SNS 토픽의 ARN을 설정합니다.
  • TargetArn: EndpointArn을 설정합니다. EndpointArn은 Device Token을 SNS 애플리케이션에 추가하면 생성됩니다. 이 옵션은 SNS 토픽이 아닌 개별적으로 메시지를 보낼 때 사용합니다. TopicArn과 TargetArn은 둘 중 하나만 사용할 수 있습니다.

SNS를 사용하는 방법은 '26장 푸시 알림 서비스 SNS'를 참조하기 바랍니다.

sns_1.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sns = new AWS.SNS();

var params = {
  Message: 'Hello SNS', // 필수
  Subject: 'Hello',
  TopicArn: 'arn:aws:sns:ap-northeast-1:232075047203:admin', // 필수
  //TargetArn: 'arn:aws:sns:ap-northeast-1:232075047203:endpoint/GCM/ExampleGCM/bae3463b-d6c0-3d81-89cf-44c5a8662de5', // 필수
};

sns.publish(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});
AWS CLI
$ aws sns publish --message "Hello SNS" --subject "Hello" --topic-arn arn:aws:sns:ap-northeast-1:232075047203:admin
$ aws sns publish --message "Hello SNS" --subject "Hello" --target-arn arn:aws:sns:ap-northeast-1:232075047203:endpoint/GCM/ExampleGCM/bae3463b-d6c0-3d81-89cf-44c5a8662de5

SNS 토픽에 프로토콜별로 다른 메시지를 보내는 방법은 다음과 같습니다.

  • Message: 메시지 내용을 설정합니다. JSON 형태로 작성해야 하며, 텍스트 형식으로 변환해서 전달해야합니다. 각 프로토콜별로 보낼 메시지를 설정할 수 있고, 여기서 설정하지 않은 프로토콜에는 default에 설정한 메시지를 보냅니다.
  • TopicArn: SNS 토픽의 ARN을 설정합니다.
  • MessageStructure: Message를 JSON 텍스트로 설정했다면 json으로 설정합니다.
sns_2.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sns = new AWS.SNS();

var message = {
  default: 'Hello SNS Topic',
  email: 'Hello SNS email',
  sqs: 'Hello SNS SQS', 
  http: 'Hello SNS http',
  APNS: {
    aps: {
      alert: 'Hello SNS APNS',
      sound: 'default'
    }
  },
  GCM: {
    data: {
      message: 'Hello SNS GCM'
    }
  }
};

var params = {
  Message: JSON.stringify(message), // 필수
  TopicArn: 'arn:aws:sns:ap-northeast-1:232075047203:admin', // 필수
  MessageStructure: 'json'
};

sns.publish(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});

메시지 내용을 JSON 형태로 작성합니다.

{
  "default": "Hello SNS Topic",
  "email": "Hello SNS email",
  "sqs": "Hello SNS SQS", 
  "http": "Hello SNS http",
  "APNS": {
    "aps": {
      "alert": "Hello SNS APNS",
      "sound": "default"
    }
  },
  "GCM": {
    "data": {
      "message": "Hello SNS GCM"
    }
  }
}

--message 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.

AWS CLI
$ aws sns publish --message '{ "default": "Hello SNS Topic", "email": "Hello SNS email", "sqs": "Hello SNS SQS", "http": "Hello SNS http", "APNS": { "aps": { "alert": "Hello SNS APNS", "sound": "default" } }, "GCM": { "data": { "message": "Hello SNS GCM" } } }' --topic-arn arn:aws:sns:ap-northeast-1:232075047203:admin --message-structure json

SNS 토픽의 구독 목록을 출력하는 방법은 다음과 같습니다.

  • TopicArn: SNS 토픽의 ARN을 설정합니다..
  • NextToken: API 호출 한 번에 내용을 모두 받아 올 수 없을 때 NextToken 값이 리턴됩니다. 두 번째 API 호출부터 직전 API 호출에서 받은 NextToken 값을 설정하면 다음 내용을 받아옵니다.
sns_3.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sns = new AWS.SNS();

var params = {
  TopicArn: 'arn:aws:sns:ap-northeast-1:232075047203:admin', // 필수
  //NextToken: ''
};

sns.listSubscriptionsByTopic(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});
AWS CLI
$ aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:ap-northeast-1:232075047203:admin

SNS 토픽에 구독을 생성하는 방법은 다음과 같습니다.

  • Protocol: 생성할 구독의 프로토콜을 설정합니다. http, https, email, email-json, sms, sqs, application을 사용할 수 있습니다.
  • TopicArn: SNS 토픽의 ARN을 설정합니다.
  • Endpoint: 각 프로토콜의 엔드포인트를 설정합니다.
    • http: http://로 시작하는 주소를 설정합니다.
    • https: https://로 시작하는 주소를 설정합니다.
    • email, email-json: 이메일 주소를 설정합니다.
    • sms: 핸드폰 번호를 설정합니다.
    • sqs: SQS 큐의 ARN을 설정합니다.
    • application: 모바일 장치의 EndpointArn를 설정합니다. EndpointArn은 Device Token을 SNS 애플리케이션에 추가하면 생성됩니다.
sns_4.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sns = new AWS.SNS();

var params = {
  Protocol: 'application', // 필수
  TopicArn: 'arn:aws:sns:ap-northeast-1:232075047203:admin', // 필수
  Endpoint: 'arn:aws:sns:ap-northeast-1:232075047203:endpoint/GCM/ExampleGCM/bae3463b-d6c0-3d81-89cf-44c5a8662de5'
};

sns.subscribe(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});
AWS CLI
$ aws sns subscribe --protocol application --topic-arn arn:aws:sns:ap-northeast-1:232075047203:admin --notification-endpoint arn:aws:sns:ap-northeast-1:232075047203:endpoint/GCM/ExampleGCM/bae3463b-d6c0-3d81-89cf-44c5a8662de5

SNS 토픽에서 구독을 삭제하는 방법은 다음과 같습니다.

  • SubscriptionArn: 구독 ARN을 설정합니다. 구독 ARN은 Subscribe 함수로 SNS 토픽에 구독을 생성할 때 리턴됩니다. 또는, listSubscriptionsByTopic 함수로 구해도 됩니다.
sns_5.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sns = new AWS.SNS();

var params = {
  SubscriptionArn: 'arn:aws:sns:ap-northeast-1:232075047203:admin:748d2cf0-2794-4eb6-b26b-3bd10606cda5' // 필수
};

sns.unsubscribe(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});
AWS CLI
$ aws sns unsubscribe --subscription-arn arn:aws:sns:ap-northeast-1:232075047203:admin:748d2cf0-2794-4eb6-b26b-3bd10606cda5

SNS 어플리케이션에 엔드포인트를 추가하는 방법은 다음과 같습니다.

  • GCM, APNS 모두 사용 방법은 동일합니다.
  • PlatformApplicationArn: Application ARN을 설정합니다.
  • Token: Device Token을 설정합니다.
sns_6.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sns = new AWS.SNS();

var params = {
  PlatformApplicationArn: 'arn:aws:sns:ap-northeast-1:232075047203:app/GCM/ExampleGCM', // 필수
  Token: 'APA91bEtMOwbiMBK9xos6ASX8aylQENNmX6NQ7pHQhy4rSvUtXJzjLCOCsiOK69mwy7qu9hIEWHTmFtKCSYS0c5v_m3RojYIfy1LrcCbv9vdL12qtKAMwLFX1-MpCAC0PQa8l', // 필수
};

sns.createPlatformEndpoint(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});
AWS CLI
$ aws sns create-platform-endpoint --platform-application-arn arn:aws:sns:ap-northeast-1:232075047203:app/GCM/ExampleGCM --token APA91bEtMOwbiMBK9xos6ASX8aylQENNmX6NQ7pHQhy4rSvUtXJzjLCOCsiOK69mwy7qu9hIEWHTmFtKCSYS0c5v_m3RojYIfy1LrcCbv9vdL12qtKAMwLFX1-MpCAC0PQa8l

다른 함수들의 사용 방법은 다음 링크를 참조하기 바랍니다.
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.