LoginSignup
8
8

More than 5 years have passed since last update.

AWS lambda上でiconvを使う(コマンドじゃなくてね)

Last updated at Posted at 2015-12-26

はじめに

AWS lambda上でiconv(node-iconv)を使うには、少しテクニックが必要です。
AWS Lambda内で文字コードを変換する方法

なるほど、lambdaの実行環境にiconvコマンドがあるから、それを叩けば良いのか。
いやしかし、別のモジュールが内部的にiconvを使っている場合はどうするんだろう。

色々と調べた結果(その過程は果てしないので割愛w)、iconvのように実行環境に依存するようなモジュールをlambda上で扱う場合は、ターゲット環境を用意してビルドする必要があるようです。
Using Packages and Native nodejs Modules in AWS Lambda

ではやってみます。

準備

まずはEC2(Linux)を一台用意して、nodeをインストールします。
※上記リンクの記事では、nodeのバージョンを0.10.33にしていますが、現在のlambdaのNodeは0.10.36ですので、今回は0.10.36を用意します。

EC2
$ sudo yum update
$ sudo yum install gcc44 gcc-c++ libgcc44 cmake –y
$ wget http://nodejs.org/dist/v0.10.36/node-v0.10.36.tar.gz
$ tar -zxvf node-v0.10.36.tar.gz
$ cd node-v0.10.36 && ./configure && make
$ sudo make install
$ node -v
v0.10.36

となればOKです。
makeには結構時間がかかりますので、のんびりコーヒーでもどうぞ。

2015-12-31 追記

コンパイルしなくても n を使えば node のバージョン管理は簡単にできますし、複数のバージョンで環境を作りたい方にはおすすめです。

EC2
$ sudo npm install -g n
$ sudo n 0.10.36

lambda用のiconvを生成

Nodeの環境ができたので、いよいよiconvを準備します。

EC2
$ mkdir iconv && cd iconv
$ npm install iconv@1.2.3

現在のiconvの最新バージョンは、2.1.11なのですが、これだとNodeの0.10.36で動きません(少なくともこちらの環境ではダメでした)。なので、あえて1.2.3をインストールしました。
さらに念の為に、iconvをビルドしておきます。

EC2
$ cd node_modules/iconv/
$ node-gyp configure
$ node-gyp rebuild

warningが結構でますが、最後に
gyp info ok
と出れば成功です。

EC2
$ cd ../
$ ls -l
drwxrwxr-x 3 ec2-user ec2-user 4096 12月 26 14:34 .
drwxrwxr-x 3 ec2-user ec2-user 4096 12月 26 14:34 ..
drwxrwxr-x 5 ec2-user ec2-user 4096 12月 26 14:36 iconv

このiconvというフォルダを、実際にlambdaにデプロイするパッケージのnode_modules内のiconvと差し替えてデプロイすればOKなはずです。
差し替えることによって、ローカルで実行時にはエラーが出るようになってしまうので、lambdaにデプロイする時に、その都度差し替えるのがよいかも知れません。ちなみに僕は、gulpを使って、lambda用のビルド環境を生成する際に、iconvフォルダだけを差し替えるようにしています。

忙しいあなたに

上記手順で作成したiconvを用意しておきました。
※zipファイルなので、解凍して使ってください。なお、動かなくて責任は持ちませんのであしからず。
iconv.zip

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8