@shinyaz

Lambda マネージドランタイムの boto3 に新サービスのモデルがない場合は PYTHONPATH でバンドル版を優先する

約1分

DevOps Agent の API を Lambda から呼ぼうとしたら UnknownServiceError: Unknown service: 'devops-agent' になった。

Lambda の Python マネージドランタイムに含まれる boto3 はバージョンが古く、新しいサービスのサービスモデルが含まれていないことがある。デプロイパッケージに新しい boto3 をバンドルしても、マネージドランタイム側が優先されてしまう。

解決策は環境変数 PYTHONPATH=/var/task を設定すること。これにより /var/task(デプロイパッケージの展開先)がインポートパスの先頭になり、バンドルした boto3 が優先される。

Terminal
# デプロイパッケージに 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-1

DevOps Agent に限らず、GA 直後のサービスでは同じ問題が起きる可能性がある。

共有する

田原 慎也

田原 慎也

ソリューションアーキテクト @ AWS

AWS ソリューションアーキテクトとして金融業界のお客様を中心に技術支援をしており、クラウドアーキテクチャや AI/ML に関する学びをこのサイトで発信しています。このサイトの内容は個人の見解であり、所属企業の公式な意見や見解を代表するものではありません。