omuronの雑記

個人的な備忘録

「JAWS-UG CLI専門支部 #153R SNS入門」受講

jawsug-cli.connpass.com

メールで簡単に通知するときに利用する SNS 入門です。 資料は connpass からリンクされている こちら

前回の SQS 入門の記事は こちら

SNS の説明

  • マルチリージョンで冗長化されている
  • プッシュ型 (SQSはプル型)
  • 疎結合のためのキーコンポーネント
    • お互い知らなくても処理できる
  • 1 : n の関係
    • SNS 1 に対して、受信はいくらでも増やせる
    • 疎結合のポイントとして、Publisher(SNS)は変わらなくても、受信者の拡張ができる
  • 受信者のことは気にしなくていいので、まずはメールが簡単
    • その後、 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

マネジメントコンソールでも確認できる。

f:id:omron:20200519194539p:plain

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"
}

マネジメントコンソールで保留中のサブスクリプションが確認できる。

f:id:omron:20200519195913p:plain

設定したメールを確認すると subscribe の確認メールがくる。

f:id:omron:20200519195516p:plain

Confirm subscription のリンクをクリックして購読すると、「購読済み」になるのが確認できる。

f:id:omron:20200519200412p:plain

今設定した 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」のメールが確認できる。

f:id:omron:20200519200830p:plain

フッターに、アンサブスクライブのリンクがあるので、注意する必要がある。
間違えて、アンサブスクライブしても、再度サブスクライブするメールを受信するので、復旧は可能。

f:id:omron:20200519202645p:plain

アンサブスクライブのリンクは設定で消すことができるんじゃないかなとのこと。
近しい事例がブログの会社の記事にがありました。

dev.classmethod.jp

所感

環境変数を多用するのは、実際の作業での差異をなくすために改善していった結果とのこと。
無心で作業をしてもらうには非常に効率的でいいと思いました。
一方、自身で確認するときには「何を設定してたっけな?」となってしまったので、使わない方法で試しました。
SNS トピックは、GurdDuty の通知などエラー系通知で利用するのがメインかなー。
基本的に通知されたくないが、緊急で知りたいもので利用しているケースが多い感じです。