くるくるパーマの株日記

2024年証券口座に1000万円達成が目標


AWS LambdaからAmazon SNSを介してメールをおくってみる

AD

f:id:ktkooon:20160827102431p:plain

技術系のことを発信していきたいと思いつつもポケモンGO に最近頼りっぱなしだったので、 さすがにここら辺でアップしてみようと思いつつ\(^o^)/ 今回は、気になるAWSのサービスAWS Lambdaを使って遊んでみたいと思います。 AWS Lambda 結論からいうとめちゃくちゃ便利です。

エンジニアと名乗る人ならば抑えておきたいサービスであること間違え無しです。 今回は下記の記事を参考に、連携の実験をしていきたいと思います。

qiita.com

では簡単なサービス紹介から

AWS Lambdaとは?

docs.aws.amazon.com

要点をまとめるとこんなサービスです。

  • サーバーレスでコードが実行できるコンピューティングサービス
  • 実行できるコードの種類は現在3種類 (Node.js, Java, Python)
  • 他のサービスS3やDynamo DB のイベント駆動も楽ちん
  • スケジューリングして定期実行もできちゃう
  • 処理の規模によって自動でスケーリングしちゃう

という感じです。 他のAWSサービスと組み合わせて使うのはもちろんですが、 クラウドサービス同士を連携させたい際などにも効果を発揮します。

ijin.github.io

Amazon SNS とは?

今回組み合わせて使ってみる予定のAmazon SNSについてもざっとまとめてみました。

aws.amazon.com

  • プッシュメッセージの送信サービス
  • 複数のプロトコルが使える!(電子メールアドレス、SMS、HTTP エンドポイント、Lambda関数
  • 使用料に応じた料金

Roleの準備

サクサクRoleを作成してきましょう。まずは名前を適当に決めます。 f:id:ktkooon:20160827095948p:plain

次にロールのタイプの選択では今回Lambda用のロールにするので、AWS Lambdaを選択します。 f:id:ktkooon:20160827100006p:plain

そして、ポリシーのアタッチでとりあえずSNSフルアクセスを選びました。 f:id:ktkooon:20160827100129p:plain

roleの設定はこれで終わりです。 f:id:ktkooon:20160827100155p:plain

SNSの準備

通信チャネルである、トピックを作成していきます。 f:id:ktkooon:20160827101046p:plain

トピック名をサクッといれて作成します。 f:id:ktkooon:20160827100714p:plain

今回は、エンドポイントをEmailに設定します。 f:id:ktkooon:20160826072621p:plain

次のステップで必要なので作成したTopicのARNをメモっておきましょう。 f:id:ktkooon:20160826124947p:plain

次にこのトピックにエンドポイントをサブスクライブしていきます。 横文字にでつらいですが、要はこのトピックに対してエンドポイントが対応できる状態にするてきな感じです。 Topic ARNに先ほど作成したTopicのARNをいれ、EndpointにはテストしたいEmailアカウントをいれます。 (今回はGmailで試してみました)

f:id:ktkooon:20160826125649p:plain

で、確認メール送ったよ!的なメッセージがでるのですが…

待てど暮らせど、メールが全然こない。

で、もしやと思い… f:id:ktkooon:20160826130159p:plain

やっぱりspam処理されてました笑 このメール内のConfirm subscriptionをおして、確認は完了。 f:id:ktkooon:20160826130406p:plain

SNSの準備はこれで完了です。

はじめてのLambda 〜Lambda functionをつくってみる〜

次にAWS Lambdaをいじっていきます。 このイカした画面が、好奇心を刺激します。 f:id:ktkooon:20160826073552p:plain

ブループリントが選べるので、今回は適当なhello-worldを選びます。 他にも、s3やdynamo DBと連携する際のブループリントが用意されている親切さっ。 f:id:ktkooon:20160826073939p:plain

トリガーは今回特に選ばずに次へ f:id:ktkooon:20160826074232p:plain

次の画面で今回デフォルト値から変えたのは、以下だけです。 f:id:ktkooon:20160826074855p:plain

  • Name
    • 適当な名前をつけましょう。"Lambda4sns" にしてみました。
  • Lambda function code
    • "Edit code inline"で次のコードを書きます
  • Lambda function handler and roleのRole
    • ここで準備したRoleを設定し、LambdaからSNSを取り扱える権限のあるRoleを設定します。

[動作検証]実際にメッセージはくるのか!?

それではやってみましょう。TEST! f:id:ktkooon:20160827093840p:plain

返り値は特に設定していないので、nullと表示されました。 f:id:ktkooon:20160827093907p:plain

で、うまくいけばgmailがきているはずなのでチェックしてみます。 f:id:ktkooon:20160827094100p:plain

無事にきていますね!開封してみます。 f:id:ktkooon:20160827094132p:plain

完璧です!

夢が広がりますね。 エンドポイントをSMSとかHTTPにもできるので、Emailじゃ気づかないよ! って場合でも、なにかの通知を知らせることができそうです。

ポケモンAPIとかあれば(あるのかな?)自分のポケモンがでたらSMS通知とか! (できたとしてもBANされそうなのでやりませんが…)

おわりに

今回はサンプルとしてLambdaとSNSを連携してみました。 次回はもうちょっと工夫して、なんらかのイベント発生のタイミングで通知するという連携をやってみようかなと思います。

例えば、SlackのWebhook使って何か特定のキーワードを打つとSlackのメッセージをSMSや別のサービスに飛ばしてみたり。

おわり

AD