グローバル変数というより handler 外で実行されるコードについて。
Lambda は Warm start している間は handler 以外の内容をキャッシュ(という言い方が正しいかは知らない)しているので、以下のようなことが起こる。

> cat handler.py
import json
import random

secret = random.random()

def gen_rand(event, context):
    body = {"value": secret}
    return {
        "statusCode": 200,
        "body": json.dumps(body)
    }

> curl $ENDPOINT
{"value": 0.8271942175442388}
> curl $ENDPOINT
{"value": 0.8271942175442388}
> curl $ENDPOINT
{"value": 0.8271942175442388}
> curl $ENDPOINT
{"value": 0.8271942175442388}
> curl $ENDPOINT
{"value": 0.8271942175442388}

見てのとおり secret はキャッシュされているので、Warm start 中は同じ値が返ってしまう。
この仕組みしらないとハマってしまったり、意図しないバグを作り込んでしまうなぁ。