- AWS Lambdaとは?
- Amazon SNS とは?
- Roleの準備
- SNSの準備
- はじめてのLambda 〜Lambda functionをつくってみる〜
- [動作検証]実際にメッセージはくるのか!?
- おわりに
技術系のことを発信していきたいと思いつつもポケモンGO に最近頼りっぱなしだったので、 さすがにここら辺でアップしてみようと思いつつ\(^o^)/ 今回は、気になるAWSのサービスAWS Lambdaを使って遊んでみたいと思います。 AWS Lambda 結論からいうとめちゃくちゃ便利です。
エンジニアと名乗る人ならば抑えておきたいサービスであること間違え無しです。 今回は下記の記事を参考に、連携の実験をしていきたいと思います。
では簡単なサービス紹介から
AWS Lambdaとは?
要点をまとめるとこんなサービスです。
- サーバーレスでコードが実行できるコンピューティングサービス
- 実行できるコードの種類は現在3種類 (Node.js, Java, Python)
- 他のサービスS3やDynamo DB のイベント駆動も楽ちん
- スケジューリングして定期実行もできちゃう
- 処理の規模によって自動でスケーリングしちゃう
という感じです。 他のAWSサービスと組み合わせて使うのはもちろんですが、 クラウドサービス同士を連携させたい際などにも効果を発揮します。
Amazon SNS とは?
今回組み合わせて使ってみる予定のAmazon SNSについてもざっとまとめてみました。
- プッシュメッセージの送信サービス
- 複数のプロトコルが使える!(電子メールアドレス、SMS、HTTP エンドポイント、Lambda関数)
- 使用料に応じた料金
Roleの準備
サクサクRoleを作成してきましょう。まずは名前を適当に決めます。
次にロールのタイプの選択では今回Lambda用のロールにするので、AWS Lambdaを選択します。
そして、ポリシーのアタッチでとりあえずSNSフルアクセスを選びました。
roleの設定はこれで終わりです。
SNSの準備
通信チャネルである、トピックを作成していきます。
トピック名をサクッといれて作成します。
今回は、エンドポイントをEmailに設定します。
次のステップで必要なので作成したTopicのARNをメモっておきましょう。
次にこのトピックにエンドポイントをサブスクライブしていきます。 横文字にでつらいですが、要はこのトピックに対してエンドポイントが対応できる状態にするてきな感じです。 Topic ARNに先ほど作成したTopicのARNをいれ、EndpointにはテストしたいEmailアカウントをいれます。 (今回はGmailで試してみました)
で、確認メール送ったよ!的なメッセージがでるのですが…
待てど暮らせど、メールが全然こない。
で、もしやと思い…
やっぱりspam処理されてました笑 このメール内のConfirm subscriptionをおして、確認は完了。
SNSの準備はこれで完了です。
はじめてのLambda 〜Lambda functionをつくってみる〜
次にAWS Lambdaをいじっていきます。 このイカした画面が、好奇心を刺激します。
ブループリントが選べるので、今回は適当なhello-worldを選びます。 他にも、s3やdynamo DBと連携する際のブループリントが用意されている親切さっ。
トリガーは今回特に選ばずに次へ
次の画面で今回デフォルト値から変えたのは、以下だけです。
- Name
- 適当な名前をつけましょう。"Lambda4sns" にしてみました。
- Lambda function code
- "Edit code inline"で次のコードを書きます
- Lambda function handler and roleのRole
- ここで準備したRoleを設定し、LambdaからSNSを取り扱える権限のあるRoleを設定します。
[動作検証]実際にメッセージはくるのか!?
それではやってみましょう。TEST!
返り値は特に設定していないので、nullと表示されました。
で、うまくいけばgmailがきているはずなのでチェックしてみます。
無事にきていますね!開封してみます。
完璧です!
夢が広がりますね。 エンドポイントをSMSとかHTTPにもできるので、Emailじゃ気づかないよ! って場合でも、なにかの通知を知らせることができそうです。
裏ポケモンAPIとかあれば(あるのかな?)自分のポケモンがでたらSMS通知とか! (できたとしてもBANされそうなのでやりませんが…)
おわりに
今回はサンプルとしてLambdaとSNSを連携してみました。 次回はもうちょっと工夫して、なんらかのイベント発生のタイミングで通知するという連携をやってみようかなと思います。
例えば、SlackのWebhook使って何か特定のキーワードを打つとSlackのメッセージをSMSや別のサービスに飛ばしてみたり。
おわり