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

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

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

前提条件

このチュートリアルでは、基本的な 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. [ロールの作成] を選択します。

  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. サンプルコードをファイル名 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

関数をテストする

invoke AWS 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" } ] }

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

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

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

    AWS CLI バージョン 2 を使用している場合、cli-binary-format オプションは必須です。これをデフォルト設定にするには、aws configure set cli-binary-format raw-in-base64-out を実行します。詳細については、AWS CLI でサポートされているグローバルコマンドラインオプションを参照してください。

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

Amazon SQS キュー を作成する

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

キューを作成するには

  1. [Amazon SQS console] (Amazon SQS コンソール) を開きます。

  2. [Create queue] (キューを作成) を選択し、キューを設定します。詳細な手順については、「Amazon Simple Queue Service デベロッパーガイド」の「Amazon SQS キューの作成 (コンソール)」を参照してください。

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

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

Amazon SQS キューと Lambda 関数の間でマッピングを作成するには、次の create-event-source-mapping AWS 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 console] (Amazon SQS コンソール) を開きます。

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

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

  4. [Message body (メッセージ本文)] にテストメッセージを入力します。

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

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

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

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

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

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

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

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

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

Lambda 関数を削除するには

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

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

  3. [アクション] を選択してから、[削除] をクリックします。

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

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

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

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

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

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

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