AWS lambdaでglobal変数を使用した際の失敗談
調べているとstaging用のS3バケットにproductionモードで実行したデータが存在したので調査したところ、 コードの中で使用されているglobal変数に問題があった。 該当コードを簡略化したテストコードとその結果を以下に記載。
bucket_path='production_path' def lambda_handler(event, context): global bucket_path if "test_mode" in event: bucket_path='staging_path' print(bucket_path)
実行時のパラメータにtest_mode
が含まれている場合にglobal変数を書き換えるだけのもの。
- 実行時パラメータが以下のようにtest_modeが含まれない状況で実行
{ "_test_mode": "" }
START RequestId: 78045b16-ae03-4be0-9c89-e8841c7026f3 Version: $LATEST production_path END RequestId: 78045b16-ae03-4be0-9c89-e8841c7026f3 REPORT RequestId: 78045b16-ae03-4be0-9c89-e8841c7026f3 Duration: 10.97 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 22 MB
同然出力されるのはproduction_path
- 次に実行時パラメータが以下のようにtest_modeが含まれる状況で実行後、すぐに再度含まれない状況で実行
{ "test_mode": "" }
START RequestId: 119bcfb9-75a4-4bc2-ad34-cedb4f8518c5 Version: $LATEST staging_path END RequestId: 119bcfb9-75a4-4bc2-ad34-cedb4f8518c5 REPORT RequestId: 119bcfb9-75a4-4bc2-ad34-cedb4f8518c5 Duration: 1.72 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 22 MB
{ "_test_mode": "" }
START RequestId: edf3a5ee-9d84-46a3-8973-216b2b863e2c Version: $LATEST staging_path END RequestId: edf3a5ee-9d84-46a3-8973-216b2b863e2c REPORT RequestId: edf3a5ee-9d84-46a3-8973-216b2b863e2c Duration: 0.25 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 22 MB
テストモードで実行した後に連続的に通常モードで実行すると、
テストモードで実行した際にglobal変数へ代入した値が残ったままになっており、
これが原因で通常モードの際にテストモードのbucket_path
が表示されてしまった。
コールドスタートしてないので代入値が残りっぱなしになってたというだけだけど、意外と見つからなかった。