【レポート】JAWS-UG CLI専門支部 #153R SNS入門 に参加しました

2020年5月19日にオンラインで行われた『JAWS-UG CLI専門支部 #153R SNS入門』の参加レポートです。
2020.05.19

はじめに

皆さんこんにちは。石橋です。 今回は、JAWS-UG CLI専門支部のオンライン勉強『#153R SNS入門』に参加してきましたので、レポートを書かせて頂きます。 JAWS-UG CLI専門支部には、以前から登録こそはしていたものの、なかなかオフラインの勉強会には参加できずにいました。 現在、CLIに関する勉強会をオンラインで行われているので、退勤後参加させていただくことが多くなり、お世話になっております。 CLIを使いこなしたいなぁを思いながら、なかなか使いこなすまでには至れないでいるので、サービスごとに基本操作をハンズオン形式で教えていただけるのは、非常にありがたいです。

SNSとは

SNSとは

Amazon SNS は、サブスクライブしているエンドポイントまたはクライアントへのメッセージの配信または送信を、調整および管理するウェブサービスです。Amazon SNS には、発行者と受信者という 2 種類のクライアントが存在し、それぞれプロデューサーとコンシューマーとも呼ばれます。発行者は、論理アクセスポイントおよび通信チャネルであるトピックにメッセージを作成して送信することで、受信者と非同期的に通信します。

つまりSNSは、プロデューサー(発行者)から送られて来たメッセージをトピックに格納し、それをEメールなどのプロトコルにより通知するプッシュ型の通知サービスです。 通知するプロトコルは、Amazon SQS、HTTP/S、E メール、SMS、Lambdaなどがサポートされており、トピックを購読するサブスクライバー(受信者、コンシューマー)にはウェブサーバー、E メールアドレス、Amazon SQS キュー、AWS Lambda 関数を指定可能です。

作業

今回はイベントで行ったCLIからSNSを使用して、Eメールを送信するハンズオンを紹介します。

注意事項

  • イベントの資料を元に作業手順を示しています。ハンズオン資料がイベントページ上がっていますので、詳しくはそちらを参考にしてください。
  • 当日行われてた、SNSトピック作成からメールの送信までの作業を以下に示しています。

動作環境

  • aws-cli/1.18.52

①事前作業

メールアドレスの指定(自分が配信したメールアドレスを代入する)

MAIL_ADDRESS=“XXXXX@XXXXX”

一時ファイル用ディレクトリの指定

DIR_TMP=“${HOME}/environment/tmp-handson-cli-sns”

ディレクトリの作成

mkdir -p ${HOME}/environment/tmp-handson-cli-sns

一時ファイル名を指定

FILE_TMP=“${DIR_TMP}/mail_address.tmp” \
&& echo ${FILE_TMP}

一時ファイルを作成

cat << EOF > ${FILE_TMP}
MAIL_ADDRESS=‘${MAIL_ADDRESS}’
EOF
cat ${FILE_TMP}

②SNSトピックの構築(handson-cli-sns-topic)

リージョンの指定

export AWS_DEFAULT_REGION=‘ap-northeast-1’

SNSトピック名の指定

SNS_TOPIC_NAME=‘handson-cli-sns-topic’

SNSトピックの構築

aws sns create-topic \
--name ${SNS_TOPIC_NAME}

SNSトピック“handson-cli-sns-topic”が存在することを確認

aws sns list-topics \
--query “Topics[?contains(TopicArn, \`${SNS_TOPIC_NAME}\`)].TopicArn” \
--output text

コンソールでもトピックが存在することを確認

check_topic

③SNSトピックの購読

SNSトピック名の指定

SNS_TOPIC_NAME=‘handson-cli-sns-topic’

SNS通知プロトコル名の指定

SNS_SUBSCRIPTION_PROTOCOL=‘email’

通知先エンドポイントの指定

SNS_SUBSCRIPTION_ENDPOINT=“${MAIL_ADDRESS}” \
&& echo ${SNS_SUBSCRIPTION_ENDPOINT}

トピックARNの取得

SNS_TOPIC_ARN=$( \
aws sns list-topics \
--query “Topics[?contains(TopicArn, \`${SNS_TOPIC_NAME}\`)].TopicArn” \
--output text \
) \
&& echo ${SNS_TOPIC_ARN}

SNSトピックを購読

aws sns subscribe \
--topic-arn ${SNS_TOPIC_ARN} \
--protocol ${SNS_SUBSCRIPTION_PROTOCOL} \
--notification-endpoint ${SNS_SUBSCRIPTION_ENDPOINT}

登録したメールアドレスに“AWS Notification - Subscription Confirmation”という標題のメールが届くので、“Confirm subscription”リンクをクリックして承認。

SNSトピック“handson-cli-sns-topic”にプロトコル“email”のエントポイント(メールアドレス)“<通知先メールアドレス>“が存在することを確認

aws sns list-subscriptions-by-topic \
--topic-arn ${SNS_TOPIC_ARN} \
--query “Subscriptions[?Endpoint == \`${SNS_SUBSCRIPTION_ENDPOINT}\`].Endpoint” \
--output text

SNSトピック“handson-cli-sns-topic”に登録されているエントポイント“<通知先メールアドレス>“のサブスクリプションARNが存在する(“PendingConfirmation”ではない)ことを確認

aws sns list-subscriptions-by-topic \
--topic-arn ${SNS_TOPIC_ARN} \
--query “Subscriptions[?Endpoint == \`${SNS_SUBSCRIPTION_ENDPOINT}\`].SubscriptionArn” \
--output text

コンソールでもトピックのサブスクリプションを確認

check_confrim

④SNSトピックへのメッセージの配信

メッセージ本文の指定

SNS_MESSAGE_BODY=‘Hello World!’

eメールメッセージの題名を指定

SNS_MESSAGE_SUBJECT=‘Message handson-cli-sns’

SNSトピックにeメールメッセージを配信

aws sns publish \
--topic-arn ${SNS_TOPIC_ARN} \
--message “${SNS_MESSAGE_BODY}” \
--subject “${SNS_MESSAGE_SUBJECT}”

登録したメールアドレスにメールが来ているか確認。

まとめ

CLIからSNSを使って、登録してメールアドレスにメールを送信することができました。実際にCLIをどのように使っていくか、シェル変数の使い方--queryでの絞り方が毎回とても参考になります。 イベントの実際のハンズオン資料では、手順が細分化されていたり、変数を確認するコマンドを実行したりと手順通りに行えば、必ず実行できるように、ハンズオンが作成されており、初学者にとても親切な資料になっています。 また現在『オンライン:復習シリーズ』にて、各サービスの基本手順の復習を行っているので、まだ参加されたことがない方は是非参加されてみてはいかがでしょうか。

参考

SQS 公式ドキュメント

ハンズオン(簡易版): SNS入門