ひろこま Hack Log

プログラミングや機械学習などの知識を記録・共有します

AWS LambdaでMeCabを動かす(Lambda Layer使用版)

f:id:twx:20210321131857p:plain
AWS Lambda

参考サイト

こちらの記事を参考にさせていただきました。 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

Koma Hirokazu 's Hacklog ―― Copyright © 2018 Koma Hirokazu