Skip to main content

sns

create topic

$ aws sns create-topic --name <Topic Name>
$ aws sns list-topics
$ aws sns get-topic-attributes --topic-arn <Topic ARN>

create subscription

$ aws lambda list-functions | jq '.Functions[].FunctionArn'

$ aws sns subscribe --topic-arn <Topic ARN> --protocol lambda --notification-endpoint <Lambda ARN>
$ aws sns list-subscriptions
$ aws sns get-subscription-attributes --subscription-arn <Subscription ARN>

publish

$ aws sns publish --topic-arn <Topic ARN> --subject "test subject" --message "this is test message"

unsubscribe

$ aws sns unsubscribe --subscription-arn <Subscription ARN>

delete topic

$ aws sns delete-topic --topic-arn <Topic ARN>

create SNS with CloudFormation

prepare yaml file

$ cat sns.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
  MySNSTopic:
    Type: 'AWS::SNS::Topic'
  MySubscription:
    Type: 'AWS::SNS::Subscription'
    Properties: 
      Endpoint: !Ref lambdaARN
      Protocol: lambda
      TopicArn: !Ref MySNSTopic
Parameters:
  lambdaARN:
    Type: String
$ aws cloudformation validate-template --template-body file://sns.yml

prepare paremeter file

$ jq '.' sns.parameter
[
  {
    "ParameterKey": "lambdaARN",
    "ParameterValue": "<lambda ARN>"
  }
]

create stack

$ aws cloudformation create-stack --template-body file://sns.yml --stack-name <Stack Name> --parameters file://sns.parameter

confirm CloudFormation

$ aws cloudformation list-stacks
$ aws cloudformation describe-stacks --stack-name <Stack Name>
$ aws cloudformation get-template --stack-name <Stack Name> --query 'TemplateBody' | xargs -0 printf

confirm SNS

$ aws sns list-topics
$ aws sns list-subscriptions

delete stack

$ aws cloudformation delete-stack --stack-name <Stack Name>
$ aws cloudformation list-stacks --query 'StackSummaries[?StackName==`<Stack Name>`]'
$ aws cloudformation describe-stacks --stack-name <Stack Name>