はじめに
AWS LambdaをMacから直接デプロイすることは元々可能でしたが、
ネイティブライブラリをEC2を利用してデプロイしていましたが、
Amazon Linuxのコンテナイメージが公開されたのでMac上でDockerを利用し、
AWS Lambdaの実行環境に近い環境を構築し、デプロイすることが可能になりました。
今回はNode.js用の環境を作ってみました。
検証バージョン
- Mac OS X El Capitan(10.11.6)
- Docker 1.12.3
- Node.js 4.3.2
- npm
- aws-sdk 2.6.3
Docker
HomebrewとCaskを利用している場合は下記のコマンドでインストールできます。
$ brew cask install docker
Dockerの公式サイトでdmgが公開されているのでお好きな方でインストールできます。
https://www.docker.com/products/docker#/mac
インストール後、LaunchpadにDockerが追加されているので起動してください。
ステータスバーにクジラのアイコンが追加され"Docker is running"となっていれば成功です。
コンソール上でもdockerコマンドが利用できるか確認します。
$ docker -v
Docker version 1.12.3, build 6b644ec
Amazon Linuxイメージの入手
AWS CLIから入手する方法もありますが、DockerHubにも公開されたので今回はそちらから取得します。
また、本来であれば2016.03.3がLambda実行環境ですが、Dockerイメージは2016.09以降しか公開されていないのでそちらを利用します。
$ docker pull amazonlinux:2016.09
2016.09: Pulling from library/amazonlinux
8e3fa21c4cc4: Pull complete
Digest: sha256:f1d4ae3f7261a72e98c6ebefe9985cf10a0ea5bd762585a43e0700ed99863807
Status: Downloaded newer image for amazonlinux:2016.09
イメージの確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amazonlinux 2016.09 5b52b314511a 4 days ago 292.3 MB
AWS Lambdaに近い環境を構築
Amazon Linuxイメージをbash実行
$ docker run -i -t amazonlinux:2016.09 /bin/bash
bash-4.2#
ここからはAmazon Linux上で作業します。
Amazon Linuxのバージョンを確認しましょう。
bash-4.2# cat /etc/system-release
Amazon Linux AMI release 2016.09
yumでパッケージを最新に更新し、必要なライブラリをインストールします。
bash-4.2# yum update -y
bash-4.2# yum install gcc44 gcc-c++ libgcc44 cmake wget git aws-cli -y
node.jsをインストール
bash-4.2# wget http://nodejs.org/dist/v4.3.2/node-v4.3.2.tar.gz
bash-4.2# tar zxfv node-v4.3.2.tar.gz
bash-4.2# cd node-v4.3.2
bash-4.2# ./configure
bash-4.2# make
bash-4.2# make install
npmを更新
bash-4.2# npm -g install npm@v4.0.2
npmのaws-sdkをインストール
bash-4.2# npm -g install aws-sdk@2.6.3
デプロイ
この記事ではnode-aws-lambdaを利用してgulpでデプロイしています。
お好きな方法でデプロイしてください。
デプロイやIAMの設定などはAWS LambdaファンクションをGulpでデプロイ、CircleCIからAWS Lambdaファンクションをデプロイしてみたを参考にしてください。
Lambdaデプロイ用にAPIキーをcredentialsに指定します。
bash-4.2# aws configure
AWS Access Key ID [None]: ABCD******************
AWS Secret Access Key [None]: 12*******************
Default region name [None]:
Default output format [None]:
Lambdaにデプロイしたいgitをcloneします。
bash-4.2# mkdir /app
bash-4.2# cd /app
bash-4.2# git clone https://github.com/tomiyan/lambda-sqlite3-sample.git
bash-4.2# cd /app/lambda-sqlite3-sample
IAM Roleは.envにしてあるので.envファイルを作成します。
ROLE=arn:aws:iam::1234***********:role/sampleLambdaExecureRole
npmの依存パッケージを取得し、デプロイします。
bash-4.2# npm i -S
bash-4.2# npm run deploy
おまけ
ここまでの手順をDockerfileにまとめてみました。