以下の内容はhttps://cloud-aws-gcp.hateblo.jp/entry/2019/11/30/160237より取得しました。


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を固めてみました。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html 

Lambda RuntimeのEC2(AmazonLinux)でpython3系を設定

下記を参考にさせて頂き設定してみました。
https://michimani.net/post/aws-using-python3-on-amazonlinux/
実際に実行したコマンドは下記です。
 
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上で固めるのは必須ですね。
忘れないようにしたいと思います。
 



以上の内容はhttps://cloud-aws-gcp.hateblo.jp/entry/2019/11/30/160237より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14