zappaでlambdaデプロイしたら、rekognition DetectLabelsのレスポンスがローカル環境と変わってハマった。
解決方法
-
デプロイパッケージにboto3を含める。(zappa deployするディレクトリでpip install boto3 -t .)
-
zappa_settings.jsonを
{
"dev": {
"app_function": "your_app.app",
"aws_region": "your_region",
"profile_name": "your_profile_name",
"project_name": "your_project_name",
"runtime": "python3.6",
"s3_bucket": "your_s3_backet",
"exclude": ["/var/runtime/boto*"] //追加
}
}
にする。
原因
lambda内にデフォルトで搭載されているboto3のバージョンが古いことが原因らしい。
(バージョンによってDetectLabelsのレスポンスが若干違うっぽい)
zappaのドキュメント曰く、
By default, Zappa will exclude Boto, because it's already available in the Lambda execution environment.
"exclude": [".gz", ".rar"], // A list of regex patterns to exclude from the archive. To exclude boto3 and botocore (available in an older version on Lambda), add "boto3*" and "botocore*".
とのことなので、デフォルト搭載のboto3を呼ばれないようにする。
cloud watch logを追うと、Loading JSON file: /var/runtime/botocore/data/endpoints.json
とあったので、"exclude": ["/var/runtime/boto*"]
を追加した。
"exclude": ["*.a"]
でもいけた。