Lambda マネージドランタイムの boto3 に新サービスのモデルがない場合は PYTHONPATH でバンドル版を優先する
DevOps Agent の API を Lambda から呼ぼうとしたら UnknownServiceError: Unknown service: 'devops-agent' になった。
Lambda の Python マネージドランタイムに含まれる boto3 はバージョンが古く、新しいサービスのサービスモデルが含まれていないことがある。デプロイパッケージに新しい boto3 をバンドルしても、マネージドランタイム側が優先されてしまう。
解決策は環境変数 PYTHONPATH=/var/task を設定すること。これにより /var/task(デプロイパッケージの展開先)がインポートパスの先頭になり、バンドルした boto3 が優先される。
# デプロイパッケージに boto3 をバンドル
pip install boto3 -t .
zip -r function.zip .
# Lambda の環境変数に追加
aws lambda update-function-configuration \
--function-name my-function \
--environment "Variables={PYTHONPATH=/var/task}" \
--region ap-northeast-1DevOps Agent に限らず、GA 直後のサービスでは同じ問題が起きる可能性がある。
