【小技】PythonでLambdaのテストイベントを作るコツ

どうも、LambdaではPythonしか書けない寺内です。

他のAWSサービスから連携するLambdaスクリプトを作るとき、テストイベントを作っておくと、連携元のサービスと独立してスクリプトを実行することができるので便利ですね。

このテストイベントをゼロから作るのは面倒です。そこで最初は、連携元のサービスを起動して、そこで発生するイベントをLambdaで出力をしてイベントデータを得ることをします。
そのときよくやりがちなのが、以下のコードでCloudWatch logsに出力することです。

def lambda_handler(event, context):
    print(event)
    return

event変数は、pythonの辞書型変数です。print文で出力すると、以下のような形になります。
例では、Amazon Connect から呼び出された時のイベントです。

{
    'Details': {
        'ContactData': {
            'Attributes': {
                'phonenumber': '+81ABAAAABBBB'
            },
            'Channel': 'VOICE',
            'ContactId': '11111111-2222-3333-afc0-AAAAAAAAAAAA',
            'CustomerEndpoint': {
                'Address': '+81ABAAAABBBB',
                'Type': 'TELEPHONE_NUMBER'
            },
            'CustomerId': None,
            'Description': None,
            'InitialContactId': '11111111-2222-3333-afc0-AAAAAAAAAAAA',
            'InitiationMethod': 'INBOUND',
            'InstanceARN': 'arn:aws:connect:ap-northeast-1:123412341234:instance/999999999-8888-7777-666666666666',
            'LanguageCode': 'en-US',
            'MediaStreams': {
                'Customer': {
                    'Audio': None
                }
            },
            'Name': None,
            'PreviousContactId': '11111111-2222-3333-afc0-AAAAAAAAAAAA',
            'Queue': None,
            'References': {},
            'SystemEndpoint': {
                'Address': '+1XXXYYYZZZZ',
                'Type': 'TELEPHONE_NUMBER'
            }
        },
        'Parameters': {
            'phonenumber': '+81ABAAAABBBB'
        }
    },
    'Name': 'ContactFlowEvent'
}

これは、JSONっぽい形をしているので、テストイベントの作成に使えそうなのですが、JSON形式ではありません。
このやり方でテストイベントを作ろうとすると、以下の2点をエディタで修正する必要があります。

  • 文字列を括っているシングルコーテーションをダブルコーテーションに変更
  • `None`を`null`に変更

こうした手間をかけないでJSON形式で出力するには、以下のようにJSONライブラリを使います。

import json

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

これで正確なJSON形式のイベントデータがCloudWatch Logsで得られます。

{
    "Details": {
        "ContactData": {
            "Attributes": {
                "phonenumber": "+81ABAAAABBBB"
            },
            "Channel": "VOICE",
            "ContactId": "11111111-2222-3333-afc0-AAAAAAAAAAAA",
            "CustomerEndpoint": {
                "Address": "+81ABAAAABBBB",
                "Type": "TELEPHONE_NUMBER"
            },
            "CustomerId": null,
            "Description": null,
            "InitialContactId": "11111111-2222-3333-afc0-AAAAAAAAAAAA",
            "InitiationMethod": "INBOUND",
            "InstanceARN": "arn:aws:connect:ap-northeast-1:123412341234:instance/999999999-8888-7777-666666666666",
            "LanguageCode": "en-US",
            "MediaStreams": {
                "Customer": {
                    "Audio": null
                }
            },
            "Name": null,
            "PreviousContactId": "11111111-2222-3333-afc0-AAAAAAAAAAAA",
            "Queue": null,
            "References": {},
            "SystemEndpoint": {
                "Address": "+1XXXYYYZZZZ",
                "Type": "TELEPHONE_NUMBER"
            }
        },
        "Parameters": {
            "phonenumber": "+81ABAAAABBBB"
        }
    },
    "Name": "ContactFlowEvent"
}

これをコピーすれば、手間なくテストイベントを作成することができます。
めでたしめでたし。

著者について
寺内康之

SF好きで夢見がち。小学生の頃にPC-8001に出会い、その後パソコン通信にはまり、UNIX好きになり、ネットワークエンジニアとなる。AWSと出会い、徐々に上位レイヤーに進出中。
2024年 Japan AWS Top Engineers に選出される。

寺内康之をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSアプリケーション開発クラウドソリューション
シェアする
タイトルとURLをコピーしました