私の戦闘力は53万です

awsとgcpについて書きます

AWS lambdaからGCPのSDKを使うlambda layerを作成

先日、AWS LambdaからGCPSDKを利用したいと思い、

Layerを固めることがありました。

その際エラーが出てしまい解決までにハマってしまったので、

ブログに書こうと思いました。

エラー内容

固めたzipをlambda Layerとしてアップしたところ

Runtimeエラーとなってしまいました。

実行環境はAmazonLinux2です。

cd /tmp
mkdir python
pip install -t ./python google-cloud-speech
zip -r gcp_speech.zip python
 
{
  "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
 
#3.7系だとエラーが出るので下記も実施しました
sudo yum install libffi-devel
 
 
このインスタンス上でLayerを固め直します。
cd /tmp
mkdir python
pip install -t ./python google-cloud-speech
zip -r gcp_speech.zip python
 
上記でレイヤーを作成するとimportでエラーが出なくなりました!
Layerを固める際には、同一の環境のEC2上で固めるのは必須ですね。
忘れないようにしたいと思います。