メールで簡単に通知するときに利用する SNS 入門です。 資料は connpass からリンクされている こちら 。
前回の SQS 入門の記事は こちら
SNS の説明
- マルチリージョンで冗長化されている
- プッシュ型 (SQSはプル型)
- 疎結合のためのキーコンポーネント
- お互い知らなくても処理できる
- 1 : n の関係
- 受信者のことは気にしなくていいので、まずはメールが簡単
- その後、
Lambda
-->Slack
などをトピックに追加すれば、複数サービスへの拡張もできる
- その後、
- 再配信(メールサーバー落ちてるときか)をしたい場合は、SQSのデッドレターにためて再送したりする
ハンズオン
CLI での操作とあわせて、マネジメントコンソールで出来上がったトピックを見ながらやるのがおすすめとのこと。
以下、記載内容はハンズオン資料を自分でやり直したメモ。
もとの資料のほうが丁寧なので基本的にはそちらを参照ください。
資料では、環境変数を多用していますが、今回は使わないで実施。
SNSトピックの構築
適当なトピックの名前 handson-cli-sns-topic
で構築。
$ aws sns create-topic --name handson-cli-sns-topic { "TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:handson-cli-sns-topic" }
作ったキューを確認する。
$ aws sns list-topics --query "Topics[?contains(TopicArn, \`handson-cli-sns-topic\`)].TopicArn" --output text arn:aws:sns:ap-northeast-1:123456789012:handson-cli-sns-topic
マネジメントコンソールでも確認できる。
SNSトピックの購読
メールで受信する手順。
メールアドレスは、自身で受信ができるもので確認すること。
以下のコマンドで、受信者を追加する。
$ aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-1:123456789012:handson-cli-sns-topic --protocol email --notification-endpoint hoge@example.com { "SubscriptionArn": "pending confirmation" }
マネジメントコンソールで保留中のサブスクリプションが確認できる。
設定したメールを確認すると subscribe の確認メールがくる。
Confirm subscription のリンクをクリックして購読すると、「購読済み」になるのが確認できる。
今設定した SNS トピックのサブスクリプション ARN の取得手順。
設定したサブスクリプションの削除をする場合などに利用。
$ aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:ap-northeast-1:123456789012:handson-cli-sns-topic --query "Subscriptions[?Endpoint == \`hoge@example.com\`].SubscriptionArn" --output text arn:aws:sns:ap-northeast-1:123456789012:handson-cli-sns-topic:53b77286-f5af-4320-84ea-XXXXXXXXXX
SNSトピックへのメッセージの配信
--message
に本文を指定する。
メールに送信する場合は題名も --subject
で設定することができる。
$ aws sns publish --topic-arn arn:aws:sns:ap-northeast-1:123456789012:handson-cli-sns-topic --message "Hello World" --subject "Message handson-cli-sns" { "MessageId": "000ca175-27e5-5745-850c-XXXXXXXXXX" }
メールを確認すると、「Hello World」のメールが確認できる。
フッターに、アンサブスクライブのリンクがあるので、注意する必要がある。
間違えて、アンサブスクライブしても、再度サブスクライブするメールを受信するので、復旧は可能。
アンサブスクライブのリンクは設定で消すことができるんじゃないかなとのこと。
近しい事例がブログの会社の記事にがありました。
所感
環境変数を多用するのは、実際の作業での差異をなくすために改善していった結果とのこと。
無心で作業をしてもらうには非常に効率的でいいと思いました。
一方、自身で確認するときには「何を設定してたっけな?」となってしまったので、使わない方法で試しました。
SNS トピックは、GurdDuty の通知などエラー系通知で利用するのがメインかなー。
基本的に通知されたくないが、緊急で知りたいもので利用しているケースが多い感じです。