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>