CloudFormation で SNS トピックを作成する
CloudFormation スタック内に SNS トピックを生成するには、CloudFormation テンプレートで AWS::SNS::Topic というタイプのリソースを定義します。
このリソースのプロパティはすべてオプショナル(省略可能)なので、最低限のリソース定義は次のようになります。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
MyTopic:
Type: AWS::SNS::Topic
トピック名 (Properties.TopicName
) すら指定していませんが、その場合は、CloudFormation のスタック名と、トピックの論理 ID(上記の場合は MyTopic
)の組み合わせから、自動的にトピック名が割り当てられるようになっています(例: mystack-MyTopic-WMD9B9WWLEXN
)。
上記のテンプレートから CloudFormation スタックを生成するには、AWS CLI を使って次のように実行します。
$ aws cloudformation deploy --stack-name mystack \
--template-file template.yml \
--capabilities CAPABILITY_IAM
無事スタックが生成されたら、次のようにして生成された SNS トピックの物理 ID (ARN) を調べることができます。
$ aws cloudformation describe-stack-resources \
--stack-name mystack \
--output text \
--query "StackResources[].PhysicalResourceId"
arn:aws:sns:ap-northeast-1:123456789012:mystack-MyTopic-WMD9B9WWLEXN
Lambda 関数や S3 バケットから SNS トピックに対して publish するときは、この ARN を指定することになります。
SNS トピックの設定いろいろ
トピック名 (TopicName)
トピック名の生成を CloudFormation に任せるのではなく、明示的にトピック名を指定する方法です。
Resources:
MyTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: topic-hello
上記のように TopicName
プロパティを指定すると、SNS トピックの ARN は次のようになります。
arn:aws:sns:ap-northeast-1:123456789012:topic-hello
FIFO トピック (FifoTopic)
FIFO トピックとして作成するには、FifoTopic
プロパティを true に設定します。
Resources:
MyTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: topic-hello.fifo
FifoTopic: true
FIFO トピックを作るときは、TopicName
で明示的に .fifo
で終わる名前を付けないと、次のようなエラーになるみたいです。
ほんと AWS はこういうところが分かりにくすぎる。。。
Invalid parameter: Topic Name (Service: AmazonSNS; Status Code: 400; ...
タグ (Tags)
SNS トピックにタグを付けたいときは、Tags
プロパティで次のように指定します(他のリソースでタグを設定する場合も同様です)。
Resources:
MyTopic:
Type: AWS::SNS::Topic
Properties:
Tags:
- Key: key1
Value: value1
- Key: key2
Value: value2