Pythonで開発したAWS Lambdaをデプロイしたら,以下のエラーが出て動きませんでした。(読みやすさのため一部改行を加えています)
[ERROR] Runtime.ImportModuleError:
Unable to import module 'lambda_function':
cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_' (/var/task/urllib3/util/ssl_.py)
Traceback (most recent call last):
"Runtime.ImportModuleError","Unable to import module"のエラーは他にも種類がありますが,最近(2023年5月以降)どれを試してもうまくいかなかった場合はこれかもしれません。
状況
- Python(3.10)でAWS Lambda関数を開発
 - APIとの通信のため
import requestsしている - ソースコードとモジュールファイルをzipにまとめてデプロイしたところ,上記のエラーで動かなかった
 
原因
botocoreが,urllib3の最新版v2.0に対応していないことが原因。
- 
urllib3の最新版v2.0が最近リリースされたそうですが,現時点(2023年7月7日)ではbotocoreはこの最新版に対応しておらず,urllib3と依存関係にあるrequestsモジュールも使えなくなってしまったということです。 
解決策
モジュールのインストール時に,以前のバージョンのurllib3を使用するよう条件を追加する。
Lambdaにデプロイすることを考えると,-t(または--target)オプションをつけるかvenvを使用する必要がありますね。
手作業でインストールを行う場合
python3 -m pip install requests "urllib3<2"
requirements.txtを使用する場合
requests
urllib3<2
その他の方法
pyproject.tomlおよびpoetry dependenciesという方法もあるらしいのですが,そもそも私はこれらの方法知らなかった程なので,リンクを貼るに留めておきます。
githubのissue: https://github.com/psf/requests/issues/6443#issuecomment-1535667256
参考サイト
今回の内容で解決しなかった場合はこちらが参考になるかもしれません↓
ここまでお読みいただきありがとうございました。