AWS lambdaからGCPのSDKを使うlambda layerを作成
先日、AWS LambdaからGCPのSDKを利用したいと思い、
Layerを固めることがありました。
その際エラーが出てしまい解決までにハマってしまったので、
ブログに書こうと思いました。
エラー内容
固めたzipをlambda Layerとしてアップしたところ
Runtimeエラーとなってしまいました。
実行環境はAmazonLinux2です。
{
"errorMessage": "Unable to import module 'lambda_function': cannot import name 'cygrpc' from 'grpc._cython' (/opt/python/grpc/_cython/__init__.py)",
"errorType": "Runtime.ImportModuleError"
}
Runtimeエラーの対策
下記にLambdaのランタイムが記載されているので、同じEC2でpipを固めてみました。
Lambda RuntimeのEC2(AmazonLinux)でpython3系を設定
下記を参考にさせて頂き設定してみました。
実際に実行したコマンドは下記です。
sudo yum install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel
sudo git clone https://github.com/yyuu/pyenv.git /usr/bin/.pyenv
cd /usr/bin/.pyenv
sudo mkdir shims
sudo mkdir versions
sudo chown -R ec2-user:ec2-user /usr/bin/.pyenv
vi ~/.bashrc
#下記を設定
export PYENV_ROOT="/usr/bin/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
fi
source ~/.bashrc
pyenv install --list
pyenv install 3.7.4
pyenv global 3.7.4
pyenv versions
このインスタンス上でLayerを固め直します。
上記でレイヤーを作成するとimportでエラーが出なくなりました!
Layerを固める際には、同一の環境のEC2上で固めるのは必須ですね。
忘れないようにしたいと思います。