Mac
Node.js
docker
lambda

MacでDockerとAmazon Linuxコンテナを使ってAWS Lambda (Node.js-v4.3.2)にデプロイしてみた。

More than 1 year has passed since last update.


はじめに

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ファイルを作成します。


/app/lambda-sqlite3-sample/.env

ROLE=arn:aws:iam::1234***********:role/sampleLambdaExecureRole


npmの依存パッケージを取得し、デプロイします。

bash-4.2# npm i -S

bash-4.2# npm run deploy


おまけ

ここまでの手順をDockerfileにまとめてみました。

https://github.com/tomiyan/docker-lambda-deploy-sample


参考資料