

AWS Lambda が ねんがんの SQS イベントソースをてにいれたぞ!
はじめまして!プラットフォーム技術部の小林(雄)です。
だいぶ出遅れてしまいましたが、2018年6月28日にLambdaのイベントソースにSQSがサポートされました!
AWSのマネージドサービスを活用してサーバレスや疎結合なシステムを構築する場合、SQSやLambdaの活用は必須でしたが、これまではSQSをトリガーにしてLambdaを実行する場合、EC2かLambda上で定期的にSQSへポーリングするプログラムの実行が必要になり、コスト面でも実装面でも悩ましい所でした。
LambdaのイベントソースにSQSがサポートされたことによって、上記のプログラムの実装、実行は不要となり、SQSをトリガーとしてLambdaを実行することが非常に容易になります。
本記事では、SQSのメッセージをトリガーにしてLambdaを起動する方法について確認していきたいと思います。
仕様の確認
Lambda
AWS Lambdaはサーバのプロビジョニングや管理が不要でコード実行可能なサーバレスコンピューティングサービスです。Lambdaの具体的な仕様に関しては、以下を参照下さい。
※ 2018/7/18時点では、サポートされたイベントソースにSQSの記載はまだありませんでした。
Amazon Simple Queue Service (SQS)
Amazon Simple Queue Service(SQS)は完全マネージド型のメッセージキューイングサービスです。マイクロサービス、分散システム、及びサーバレスアプリケーションの疎結合化とスケーリングが可能です。SQSの具体的な仕様に関しては、以下を参照下さい。
確認の流れ
SQSメッセージをトリガーにしてLambda関数を起動する方法について、今回は以下の流れで確認していきたいと思います。
- SQSの作成
- トリガーにするSQSの作成
- Lambda用のロールの作成
- Lambdaの実行とSQS、Cloudwatch logsへのアクセス権限を有するIAMポリシーの作成
- 上記ポリシーがアタッチされたIAMロールの作成
- Lambda関数の作成
- 実行させるLambda関数の作成
- SQSメッセージをトリガーとしてLambda関数を実行させる設定
- 動作確認
- SQSメッセージをトリガーとしてLambda関数が実行されているかを確認
また、確認は東京リージョンにて行います。
SQSのメッセージをトリガーにしてLambdaを起動する方法
それでは実際に確認して行きたいと思います!
SQSの作成
まずはSQSでキューを作成します。AWSマネジメントコンソールへ接続し、「新しいキューの作成」を行います。


「キュー名」に任意の名前(ここではark-lambda-sqsとします)を入力し、「キューの作成」を行います。


「キュー名」以外の項目について、今回はすべてデフォルト設定としています。ちゃんと作成できているか確認してみましょう。


これでSQSのキューが作成されました。
Lambda用ロールの作成
Lambda関数から定期的にSQSへポーリングが行われるため、SQSへのアクセス権限を有するロールが必要となるため、Lambda用のIAMロールを作成します。
まずはIAMのメニューから「ポリシー」を選択し、「ポリシーの作成」を行います。


サービスに「SQS」を、アクションに「リスト、読み込み、書き込み」を、リソースに「すべてのリソース」を選択し、「Review Policy」へと進みます。
※ 実際に利用する際には適切な権限を設計の上、付与してください。


名前欄に「Ark-Lambda-SQS」と入力し、「Create Policy」を行いポリシーを作成します。また、同じ流れを繰り返して「Cloudwatch logs」に対するポリシーも併せて作成します。


Cloudwatch logs用のポリシーも作成できたら、つぎはIAMのロールを作成します。IAMのメニューから「ロール」を選択し、「ロールの作成」を行ないます。


サービスから「Lambda」を選択し、「次のステップ:アクセス権限」へ進みます。


先ほど作成した2つのポリシーを選択し、「次のステップ:確認」へ進みます。


ロール名に「Ark-Lambda-SQS」と入力し、ポリシーに先ほど選択した2つのポリシーが適応されていることを確認し、「ロールの作成」を行います。


以上でIAMロールの作成は完了です。
Lambda関数の作成
続いて実際に処理を行う、Lambda関数を作成していきます。Lambdaのメニューから「関数」を選択し、「関数の作成」を行います。


「設計図」を選択し、フィルター欄にSQSと入力しエンターキーを押下、表示された「sqs-poller」を選択後、「設定」へと進みます。


基本的な情報欄に名前を入力、ロール欄で「既存のロールを選択」を選択し、手順:2.Lambda用ロールの作成で作成したロールを選択します。


つぎにトリガーの設定として、SQSキュー欄にて手順:1.SQSの作成で作成したSQSキューを選択し、「トリガーの有効化」にチェックを入れます。


Lambdaの関数のコードはデフォルトのままでLambda関数を作成します。


これで設定は完了です。実際にSQSにメッセージを作成し、Lambda関数が実行されるか確認してみます。
動作確認
SQSの画面にて、手順:SQSの作成にて作成したキューを選択し、「キュー操作」から「メッセージの送信」を選択します。


メッセージ本文欄に任意の文字列を入力し、「メッセージの送信」を行います。


これでLambda関数が実行されていれば成功です。Cloudwatch logsからLambda関数の実行ログを確認してみます。


無事、Lambda関数が実行されていました!
まとめ
これからはSQSをトリガーにしてLambdaを実行する場合、EC2かLambda上で定期的にSQSへポーリングするプログラムの実行が「不要」に!
SQSをトリガーにしてLambda関数を実行してみましたが、以前の手間に比べて驚くほど簡単に実現できました。AWSはどんどん便利に、使いやすくなっていきますね。
置いていかれない様にこれからも新機能の確認を続けて行きたいと思います。