【小技】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"
}

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

タイトルとURLをコピーしました