Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

参考資料

tomiyan
最近はAPI Gateway、Lambda、k8sを主にやっています
http://tomiyan.net/
kurashicom
「北欧、暮らしの道具店」を運営するクラシコムのエンジニアチーム。
https://hokuohkurashi.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away