チュートリアル: Amazon SQS で Lambda の使用 - AWS Lambda

チュートリアル: Amazon SQS で Lambda の使用

このチュートリアルでは、 Amazon Simple Queue Service (Amazon SQS) キューからのメッセージを消費するLambda関数を作成します。 

Prerequisites

このチュートリアルでは、基本的な Lambda オペレーションと Lambda コンソールについてある程度の知識があることを前提としています。初めての方は、Lambda の開始方法 の手順に従って最初の Lambda 関数を作成してください。

次のステップを完了するには、コマンドを実行するコマンドラインターミナルまたはシェルが必要です。コマンドと予想される出力は、別々のブロックにリストされます。

aws --version

次のような出力が表示されます。

aws-cli/2.0.57 Python/3.7.4 Darwin/19.6.0 exe/x86_64

コマンドが長い場合、コマンドを複数行に分割するためにエスケープ文字 (\) が使用されます。

Linux および macOS では、任意のシェルとパッケージマネージャーを使用します。Windows 10 では、Linux 用の Windows サブシステムをインストールして、Windows 統合バージョンの Ubuntu および Bash を入手できます。

実行ロールを作成する

必要なリソースにアクセスするためのアクセス許可を関数に与える実行ロールを作成します。AWS

実行ロールを作成するには

  1. AWS Identity and Access Management (IAM) コンソールの [Roles (ロール)] ページを開きます。

  2. [Create role] を選択します。

  3. 次のプロパティでロールを作成します。

    • 信頼されたエンティティ - AWS Lambda

    • アクセス許可 - AWSLambdaSQSQueueExecutionRole

    • ロール名 - lambda-sqs-role

AWSLambdaSQSQueueExecutionRole ポリシーには、Amazon SQS と から項目を読み取り、Amazon CloudWatch Logs にログを書き込むために、関数が必要とするアクセス許可があります。

関数を作成する

Amazon SQS メッセージを処理するLambda関数を作成します。この例では、Node.js 12 コードが各メッセージを CloudWatch Logs のログに書き込みます。

注記

他の言語によるサンプルコードについては、「Amazon SQS 関数コードのサンプル」を参照してください

例 index.js

exports.handler = async function(event, context) { event.Records.forEach(record => { const { body } = record; console.log(body); }); return {}; }

関数を作成するには

注記

以下の手順を実行すると、Node.js 12 で関数が作成されます。他の言語では、手順は似ていますが、いくつかの詳細が異なります。

  1. サンプルコードを PY ファイルとして保存しますindex.js

  2. デプロイパッケージを作成します。

    zip function.zip index.js
  3. create-function AWS Command Line Interface (AWS CLI) コマンドを使用して、関数 を作成します。

    aws lambda create-function --function-name ProcessSQSRecord \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs12.x \ --role arn:aws:iam::123456789012:role/lambda-sqs-role

関数をテストする

invokeAWS CLI コマンドおよびサンプルの Amazon SQS イベントを使用して、手動で Lambda 関数を呼び出します。

ハンドラが例外をスローせずに正常に戻る場合、Lambda はメッセージが正しく処理されたと見なし、キュー内の新しいメッセージを読み取りを開始します。メッセージが正常に処理された後、Lambdaはメッセージをキューから自動的に削除します。 ハンドラーが例外をスローした場合、Lambda はメッセージの バッチが正常に処理されなかったと見なし、Lambdaは同じメッセージのバッチで関数を呼び出します。

  1. 次の JSON を input.txt という名前のファイルに保存します。

    { "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "test", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" } ] }

    先行する JSON は、Amazon SQS が Lambda 関数に送信する可能性のあるイベントをシミュレートします。ここで、"body" にはキューからの実際のメッセージが含まれています。

  2. 次の invoke AWS CLI コマンドを実行します。

    aws lambda invoke --function-name ProcessSQSRecord \ --payload file://input.txt outputfile.txt

    AWS CLI バージョン 2 を使用している場合、cli-binary-format オプションは必須です。このオプションは、AWS CLI設定ファイルで設定することもできます。

  3. ファイルoutputfile.txtで出力を確認します。

Amazon SQS キュー を作成する

Lambda 関数がイベントソースとして使用できる Amazon SQS キューを作成します。

キューを作成するには

  1. Amazon SQS コンソールを開きます。

  2. 選択 キューを作成し、キューを設定します。詳細な手順については、Amazon Simple Queue Service Developer Guideの「Creating an Amazon SQS queue (console)」を参照してください。

  3. キューの作成後、Amazonリソース名 (ARN)を記録します。こちらは、次のセクションでキューを Lambda 関数と関連付ける際に必要になります。

イベントソースを設定する

Amazon SQS キューと Lambda 関数の間でマッピングを作成するには、次のcreate-event-source-mappingAWS CLIコマンドを実行します。

aws lambda create-event-source-mapping --function-name ProcessSQSRecord --batch-size 10 \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue

次のコマンドを実行して、イベントソースのマッピングのリストを取得できます。

aws lambda list-event-source-mappings --function-name ProcessSQSRecord \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue

セットアップをテストする

これで、次のようにセットアップをテストできます。

  1. Amazon SQS コンソールを開きます。

  2. 以前に作成したキューの名前を選択します。

  3. メッセージの送信と受信を選択します。

  4. [メッセージ本文]で、テストメッセージを入力します。

  5. [メッセージの送信] を選択します。

Lambdaがキューにアップデートをポーリングします。新しいメッセージがあると、Lambda はキューからのこの新しいイベントデータを使用して関数を呼び出します。   関数が実行され、Amazon CloudWatch にログが作成されます。CloudWatch コンソールでログを表示できます。

リソースのクリーンアップ

このチュートリアル用に作成したリソースは、保持を希望しない場合、すぐに削除できます。使用しなくなった AWS リソースを削除することで、AWS アカウントに請求される料金が発生しないようにできます。

実行ロールを削除するには

  1. IAM コンソールの [Roles (ロール)] ページを開きます。

  2. 作成した実行ロールを選択します。

  3. [ロールの削除] を選択します。

  4. [はい、削除します] を選択します。

Lambda 関数を削除するには

  1. Lambda コンソールの [Functions] (関数) ページを開きます。

  2. 作成した関数を選択します。

  3. [ Actions] で、[Delete ] を選択します。

  4. [削除] を選択します。

Amazon SQS キューを削除するには

  1. AWS Management Console にサインインし、Amazon SQS コンソール (https://console.aws.amazon.com/sqs/) を開きます。

  2. 作成したキューを選択します。

  3. [削除] を選択します。

  4. テキストボックスに「delete」と入力します。

  5. [削除] を選択します。