LoginSignup
2
1

LambdaのLayerをCloud9で作る

Last updated at Posted at 2023-06-20

はじめに

Cloud9を使用してLambdaで使用するLayerを作るときのzipの作成手順をまとめておく

作成時につまづいた部分も残しておくことで、未来の自分のためになることを期待

Cloud9の準備

マネコンから Cloud9 > [関数の作成] > 名前を入力して [作成]

Cloud9 IDEの「開く」からエディタの画面へ

image.png

右下のターミナルで操作していく
FireShot Capture 413 - lambda_layer - AWS Cloud9 - ap-northeast-1.console.aws.amazon.com.png

環境構築

pyenvのインストール

sudo yum install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel tk-devel libffi-devel xz-devel

sudo yum remove -y openssl-devel
sudo yum install -y openssl11 openssl11-devel

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

bashrc

vi ~/.bashrc

export PATH="/home/ec2-user/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"


source ~/.bashrc

入れたいpythonのバージョンを指定してインストール

pyenv install 3.9.16
pyenv global 3.9.16

バージョン確認

python3 -V

モジュールを入れるディレクトリ

mkdir python && cd $_

Layer化したいものを詰めてzip化

pip3 install requests -t .
cd ../
zip -r requests.zip python/
aws s3 cp requests.zip s3://<backet_name>/requests.zip    # S3に上げる場合はaws cliから可能

作成したファイルを右クリックでダウンロードも可能
FireShot Capture 414 - lambda_layer - AWS Cloud9 - ap-northeast-1.console.aws.amazon.com.png

あとはLayerに画面で作成するだけです。

必要なくなったらインスタンスの削除を忘れずに。

memo

個人的メモ書き。

requestsとboto3

(2023.06.21)
python3.9のLambdaに対して、何も考えず上記の方法でrequestsのLayerを作って適用したら、import時にエラーが発生した。

boto3 requests cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_'

requestsを外してboto3だけにするとimportは成功するし、boto3を入れずにrequestsのLayerだけにしたらその場合も成功する...

(原因)
両方とも依存関係の中に urllib3 があり、違うバージョンの2つが共存する状態になっていた。

  • boto3は urllib3-1.26.16
  • requestsは urllib3-2.0.3 (バージョン指定しなかったせいで最新の2.31.0を入れようとしていた)

requestsのバージョンを下げていき、urllib3のバージョンを揃えて解決。

2
1
0

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
2
1