[小ネタ] Lambda のイベントソースマッピングで SQS からメッセージを取得する際に ReceiveMessage API が実行されていることを確認してみた

[小ネタ] Lambda のイベントソースマッピングで SQS からメッセージを取得する際に ReceiveMessage API が実行されていることを確認してみた

2026.07.22

Amazon SQS での Lambda の使用 - AWS Lambda

Amazon SQS イベントソースマッピングでは、Lambda はキューをポーリングし、イベントと共に関数を同期的に呼び出します。各イベントには、キューからの複数のメッセージのバッチを含めることができます。Lambda は、これらのイベントをバッチとして (一度に 1 バッチずつ) 受け取り、バッチごとに関数を 1 回呼び出します。関数が正常にバッチを処理すると、Lambda はキューからそのメッセージを削除します。

上記ドキュメントに記載されている通り、Lambda のイベントソースマッピングで SQS を使用する場合、SQS キューからのメッセージの取得や削除は自動的に行われます。
一方で、イベントソースマッピングを使用しない場合には SQS キューからのメッセージの取得や削除を明示的に実装する必要があります。
SQS + Lambda という⾮同期処理 ⻩⾦パターン再⼊⾨ #AWSDevDay / SQS-Lambda-DevDay2022 - Speaker Deck

今回はイベントソースマッピングを使用した場合に上記 API が実行されていることを確認してみました。

検証内容

まずはデフォルト設定で SQS の標準キューを作成しました。
2026-07-16_14h03_45

Lambda 関数については以下の設定で作成しました。

  • ランタイム: Python 3.14
  • 実行ロール: AdministratorAccess 権限を付与したカスタム実行ロール
  • コード: 以下の通り
import json

def lambda_handler(event, context):
    print(json.dumps(event))

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

関数作成後、トリガーとしてデフォルト設定で SQS キューを指定しました。
2026-07-16_14h07_04

また、ReceiveMessage API の記録を確認するために CloudTrail の証跡で SQS のデータイベントを記録するよう設定しました。
2026-07-16_14h08_45

準備ができたので SQS のコンソールからテストメッセージを送信します。
2026-07-16_14h09_49

テストメッセージ送信後、Lambda 関数が実行されて CloudWatch Logs に以下のような実行ログが出力されます。

{
  "Records": [
    {
      "messageId": "e5f31a5c-54db-4024-9def-4414de0328d8",
      "receiptHandle": "xxx",
      "body": "test",
      "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1784177185000",
        "SenderId": "xxx",
        "ApproximateFirstReceiveTimestamp": "1784177185004"
      },
      "messageAttributes": {},
      "md5OfBody": "098f6bcd4621d373cade4e832627b4f6",
      "eventSource": "aws:sqs",
      "eventSourceARN": "arn:aws:sqs:ap-northeast-1:012345678901:test",
      "awsRegion": "ap-northeast-1"
    }
  ]
}

上記ログのみではどの API が実行されたのかを確認することはできません。
そこで、CloudTrail の証跡が保存されている S3 バケットのログを確認したところ、ReceiveMessage と DeleteMessageBatch の記録を確認できました。

ReceiveMessage
{
  "eventVersion": "1.11",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "xxx:awslambda_668_20260716044054942",
    "arn": "arn:aws:sts::012345678901:assumed-role/LambdaBasicExecutionRole/awslambda_668_20260716044054942",
    "accountId": "012345678901",
    "accessKeyId": "xxx",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "xxx",
        "arn": "arn:aws:iam::012345678901:role/LambdaBasicExecutionRole",
        "accountId": "012345678901",
        "userName": "LambdaBasicExecutionRole"
      },
      "attributes": {
        "creationDate": "2026-07-16T04:40:54Z",
        "mfaAuthenticated": "false"
      }
    }
  },
  "eventTime": "2026-07-16T04:41:54Z",
  "eventSource": "sqs.amazonaws.com",
  "eventName": "ReceiveMessage",
  "awsRegion": "ap-northeast-1",
  "sourceIPAddress": "52.196.50.243",
  "userAgent": "Lambda:SQSaaES, aws-internal/3 aws-sdk-java/1.12.797 Linux/4.14.355-282.733.amzn2.aarch64 OpenJDK_64-Bit_Server_VM/17.0.19+10-LTS java/17.0.19 kotlin/1.8.22 vendor/Amazon.com_Inc. cfg/retry-mode/standard cfg/auth-source#unknown m/P",
  "requestParameters": {
    "queueUrl": "https://sqs.ap-northeast-1.amazonaws.com/012345678901/test",
    "attributeNames": ["All"],
    "messageAttributeNames": ["HIDDEN_DUE_TO_SECURITY_REASONS"],
    "maxNumberOfMessages": 10,
    "waitTimeSeconds": 20
  },
  "responseElements": null,
  "requestID": "6ad4e891-527f-5a53-b98a-8a4331417347",
  "eventID": "15a8b88f-e16b-410b-ad9b-81da621ac32b",
  "readOnly": true,
  "resources": [
    {
      "accountId": "012345678901",
      "type": "AWS::SQS::Queue",
      "ARN": "arn:aws:sqs:ap-northeast-1:012345678901:test"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": false,
  "recipientAccountId": "012345678901",
  "eventCategory": "Data",
  "tlsDetails": {
    "tlsVersion": "TLSv1.3",
    "cipherSuite": "TLS_AES_128_GCM_SHA256",
    "clientProvidedHostHeader": "sqs.ap-northeast-1.amazonaws.com"
  }
}
DeleteMessageBatch
{
  "eventVersion": "1.11",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "xxx:awslambda_760_20260716044054891",
    "arn": "arn:aws:sts::012345678901:assumed-role/LambdaBasicExecutionRole/awslambda_760_20260716044054891",
    "accountId": "012345678901",
    "accessKeyId": "xxx",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "xxx",
        "arn": "arn:aws:iam::012345678901:role/LambdaBasicExecutionRole",
        "accountId": "012345678901",
        "userName": "LambdaBasicExecutionRole"
      },
      "attributes": {
        "creationDate": "2026-07-16T04:40:54Z",
        "mfaAuthenticated": "false"
      }
    }
  },
  "eventTime": "2026-07-16T04:46:25Z",
  "eventSource": "sqs.amazonaws.com",
  "eventName": "DeleteMessageBatch",
  "awsRegion": "ap-northeast-1",
  "sourceIPAddress": "18.181.85.135",
  "userAgent": "Lambda:SQSaaES, aws-internal/3 aws-sdk-java/1.12.797 Linux/4.14.355-282.733.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/17.0.19+10-LTS java/17.0.19 kotlin/1.8.22 vendor/Amazon.com_Inc. cfg/retry-mode/standard cfg/auth-source#unknown m/P",
  "requestParameters": {
    "queueUrl": "https://sqs.ap-northeast-1.amazonaws.com/012345678901/test",
    "entries": [
      {
        "id": "e5f31a5c-54db-4024-9def-4414de0328d8",
        "receiptHandle": "xxx"
      }
    ]
  },
  "responseElements": {
    "successful": [{ "id": "e5f31a5c-54db-4024-9def-4414de0328d8" }]
  },
  "requestID": "72c7ff43-25c2-54a4-86c6-9d9141a373f7",
  "eventID": "0d813c89-3e89-4789-bc6e-4188eefa0890",
  "readOnly": false,
  "resources": [
    {
      "accountId": "012345678901",
      "type": "AWS::SQS::Queue",
      "ARN": "arn:aws:sqs:ap-northeast-1:012345678901:test"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": false,
  "recipientAccountId": "012345678901",
  "eventCategory": "Data",
  "tlsDetails": {
    "tlsVersion": "TLSv1.3",
    "cipherSuite": "TLS_AES_128_GCM_SHA256",
    "clientProvidedHostHeader": "sqs.ap-northeast-1.amazonaws.com"
  }
}

以上より、 Lambda のイベントソースマッピングで SQS からメッセージを取得する際に ReceiveMessage API が実行されていることを確認できました。
また、DeleteMessageBatch API によってメッセージが削除されていることも確認できました。

まとめ

今回は Lambda のイベントソースマッピングで SQS からメッセージを取得する際に ReceiveMessage API が実行されていることを確認してみました。
どなたかの参考になれば幸いです。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事