AWS Lambda が ねんがんの SQS イベントソースをてにいれたぞ!

2018年8月21日Amazon Sinple Queue Service,Amazon Web Services,AWS Lambda

はじめまして!プラットフォーム技術部の小林(雄)です。

だいぶ出遅れてしまいましたが、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関数を起動する方法について、今回は以下の流れで確認していきたいと思います。

  1. SQSの作成
    • トリガーにするSQSの作成
  2. Lambda用のロールの作成
    • Lambdaの実行とSQS、Cloudwatch logsへのアクセス権限を有するIAMポリシーの作成
    • 上記ポリシーがアタッチされたIAMロールの作成
  3. Lambda関数の作成
    • 実行させるLambda関数の作成
    • SQSメッセージをトリガーとしてLambda関数を実行させる設定
  4. 動作確認
    • SQSメッセージをトリガーとしてLambda関数が実行されているかを確認

また、確認は東京リージョンにて行います。

SQSのメッセージをトリガーにしてLambdaを起動する方法

それでは実際に確認して行きたいと思います!

SQSの作成

まずはSQSでキューを作成します。AWSマネジメントコンソールへ接続し、「新しいキューの作成」を行います。

SQSの作成

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

新しいキューの作成

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

ちゃんとSQSのキューが作成できているか確認

これでSQSのキューが作成されました。

Lambda用ロールの作成

Lambda関数から定期的にSQSへポーリングが行われるため、SQSへのアクセス権限を有するロールが必要となるため、Lambda用のIAMロールを作成します。

まずはIAMのメニューから「ポリシー」を選択し、「ポリシーの作成」を行います。

IAMポリシーの作成

サービスに「SQS」を、アクションに「リスト、読み込み、書き込み」を、リソースに「すべてのリソース」を選択し、「Review Policy」へと進みます。

※ 実際に利用する際には適切な権限を設計の上、付与してください。

SQSに各種アクセス許可を付与する

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

ポリシーの作成と確認

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

IAMロールの作成

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

IAMロールの作成

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

IAMロールの作成

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

IAMロールの作成

以上でIAMロールの作成は完了です。

Lambda関数の作成

続いて実際に処理を行う、Lambda関数を作成していきます。Lambdaのメニューから「関数」を選択し、「関数の作成」を行います。

Lambda関数の作成

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

Lambda関数の作成

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

Lambda関数の作成

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

SQSトリガーの有効化

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

SQSトリガーの追加

これで設定は完了です。実際にSQSにメッセージを作成し、Lambda関数が実行されるか確認してみます。

動作確認

SQSの画面にて、手順:SQSの作成にて作成したキューを選択し、「キュー操作」から「メッセージの送信」を選択します。

メッセージを送信して動作を確認する

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

送信するメッセージの内容を入力する

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

Lambda関数の実行ログを確認する

無事、Lambda関数が実行されていました!

まとめ

これからはSQSをトリガーにしてLambdaを実行する場合、EC2かLambda上で定期的にSQSへポーリングするプログラムの実行が「不要」に!

SQSをトリガーにしてLambda関数を実行してみましたが、以前の手間に比べて驚くほど簡単に実現できました。AWSはどんどん便利に、使いやすくなっていきますね。

置いていかれない様にこれからも新機能の確認を続けて行きたいと思います。

  • Zabbix Enterprise Appliance
  • 低コスト・短納期で提供するまるごとおまかせZabbix