LoginSignup
4
4
はじめての記事投稿

AWS Lambdaでrequestsが使えない=> cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_'

Last updated at Posted at 2023-07-06

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を使用する場合

requirements.txt
requests
urllib3<2

その他の方法

pyproject.tomlおよびpoetry dependenciesという方法もあるらしいのですが,そもそも私はこれらの方法知らなかった程なので,リンクを貼るに留めておきます。

githubのissue: https://github.com/psf/requests/issues/6443#issuecomment-1535667256

参考サイト

今回の内容で解決しなかった場合はこちらが参考になるかもしれません↓

ここまでお読みいただきありがとうございました。

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4