参考サイト
こちらの記事を参考にさせていただきました。 AWS Lambda でMeCabを動かす (2018年9月時点) - Qiita
大前提
Lambdaで外部のライブラリを利用する場合、そのライブラリをLambda関数と一緒にZipで固めてアップロードしなくてはならない。 Pythonのライブラリであれば、pip install xxxx -t .でLambda関数と同じパスにインストールしてやれば良い。MeCabなどのバイナリも同様だが、pipほど簡単にはいかない。 また、MeCabはc/c++で実装されており、Lambdaが動く環境と同じ環境でビルドしないとLambdaでは動かない。
本記事では、Lambdaが動く環境(Amazon Linux)でMeCabをビルドし、Lambda Layerにアップロードして使用する方法を説明します。
MeCab、IPA辞書の設定ファイル(mecabrcなど)には、ビルド時(./configure実行時)に指定した場所のパスが書かれる
とのことなので、Lambda Layer使用時にLambda環境に展開される /opt
配下にMeCabの実行ファイルをビルドすれば良さそうです。
コマンド
Amazon Linux上で以下のコマンドを実行しMeCabをインストールします。
ポイントは --prefix=/opt
です。
cd ~ curl -L "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE" -o mecab-0.996.tar.gz tar -zxvf mecab-0.996.tar.gz cd mecab-0.996 sudo ./configure --prefix=/opt --with-charset=utf8 sudo make sudo make install
次にIPA辞書のダウンロードとビルドです。
cd ~ curl -L "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM" -o mecab-ipadic-2.7.0-20070801.tar.gz tar -zxvf mecab-ipadic-2.7.0-20070801.tar.gz cd mecab-ipadic-2.7.0-20070801 sudo ./configure --prefix=/opt --with-charset=utf8 --with-mecab-config=/opt/bin/mecab-config sudo make sudo make install
ビルドできたら、 /opt
まるごと zip化します
sudo zip -r opt.zip /opt
この opt.zip をローカルにダウンロードし、ビルドに用いたAmazon Linuxはシャットダウンしてしまいましょう。
次に、ダウンロードした opt.zip を少し加工して Layerにアップロードします。opt.zip を展開し、中身に入っている bin etc include lib libexec share
を、mecabというディレクトリに入れます。
# カレントディレクトリはどこでも良い mkdir mecab unzip opt.zip mv bin etc include lib libexec share mecab
このmecabディレクトリを再度zip化し、Layerにアップします。
zip -r mecab.zip mecab # Layerにアップロード
SLSを使用するなら、以下のような serverless.yml でデプロイすればOKです!
service: hogehoge provider: name: aws runtime: python3.6 stage: v1 region: ap-northeast-1 layers: mecab: path: mecab description: mecab layer compatibleRuntimes: - python3.6 resources: Outputs: MecabLayerExport: Value: Ref: MecabLambdaLayer Export: Name: MecabLambdaLayer
serverless deploy --aws-profile fugafuga
以上、AWS LambdaでMeCabを動かす(Lambda Layer使用版)方法でした!
良い記事だと思っていただいた方は、以下の「★+」ボタンのクリック、SNSでのシェア、「読者になる」ボタンのクリック、Twitterのフォローをお願いします! twitter.com