🦋

LambdaでSQS発行&受取り

2024/02/11に公開

Lambda->SQS->Lambdaをした。
SDK for JavaScript (v3)で構築。Web上にはv2の情報など多くあったので、探すのに時間かかったん。。
これしてたら半日終わった...orz

やりたかったこと

Lambda1から大量のキューを発行してLambda2がキューを受け取って順序関係なく処理をする。

前提

  • Lambdaが使える
  • SQSキューが作成されている
  • Lambdaに実行ロール,アクセス権限が設定されている(SQSとか..)

実際のコード

LambdaからSQSMessageを発行

SQSMessage発行する側<Lambda1>
import { SendMessageCommand, SQSClient } from "@aws-sdk/client-sqs";
 
// SQSキューを作成すると発行されるよ
const SQSQueueUrl = "https://sqs.ap-northeast-1.amazonaws.com/0000222224444/xxxxxxxxxx";

const region = 'ap-northeast-1'
const sqsClient = new SQSClient({
  region,
});

export const handler = async (event) => {
  const queueMessage = JSON.stringify({foo: "bar"})
  const sendedSQSOutput = await sqsClient.send(
    new SendMessageCommand({
      QueueUrl: SQSQueueUrl,
      // DelaySeconds: 3,
      // やり方2通り?
      MessageAttributes: {
        foo: {
          DataType: "String",
          StringValue: "bar",
        },
      },
      MessageBody: queueMessage,
    })  
  )

  return {
    statusCode: 200,
    body: "成功",
  };
}

受け取り側Lambda

受け取り側のコード<Lambda2>
 export const handler = async (event) => {
 
   // レスポンス
  console.log(event.Records[0]);
  
  const response = {
    statusCode: 200,
    body: "成功",
  };
  return response;
};

レスポンスevent.Records[0]の中身

event.Records[0]
{
  messageId: '06c893f9-xxxx-47f6-xxxx-01c0e29c4ab5',
  receiptHandle: 'xxxxxxx',
  body: '{"foo":"bar"}',
  attributes: {
    ApproximateReceiveCount: '1',
    AWSTraceHeader: 'Root=1-xxxxxxx-xxx;Parent=xx;Sampled=0;Lineage=xxx:0',
    SentTimestamp: '1707641273576',
    SenderId: 'xxxx:xxxxxxx',
    ApproximateFirstReceiveTimestamp: '1707641273584'
  },
  messageAttributes: {
    foo: {
      stringValue: 'bar',
      stringListValues: [],
      binaryListValues: [],
      dataType: 'String'
    }
  },
  md5OfMessageAttributes: 'xxxxxxxxxxxxxxxxx',
  md5OfBody: 'xxxxxxxxxxxxxxxxx',
  eventSource: 'aws:sqs',
  eventSourceARN: 'arn:aws:sqs:ap-northeast-1:xxxxxxxx:xxxxxxxxxxx',
  awsRegion: 'ap-northeast-1'
}

さいごに

今回初めてSQSを使用した
間違い等あればコメント下さい!(=^x^=)

リソース

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs.html
https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v3/developer-guide/javascript_sqs_code_examples.html

Discussion