はじめに
LambdaをDockerイメージでデプロイする方法を、調査する機会があったので自分の備忘用にメモ書きを残します。
今回は、デプロイ用のNodeイメージを用意する所をメモ書きします。
Dockerファイルの記載方法がハマりどころでした。
EC2に、Node.jsの環境を用意する
- コンパイル環境の用意
- gitの用意
- nvmのインストール
- nvmを使ってNode.jsをインストール
sudo yum update
sudo yum -y install gcc-c++
sudo yum -y install git
git clone https://github.com/creationix/nvm.git ~/.nvm
「.bash_profile」を書き換えて、ログイン時にNVMの情報を読み込むようにする。
# nvm
if [[ -s ~/.nvm/nvm.sh ]] ; then
source ~/.nvm/nvm.sh ;
fi
を末尾に追記する。
端末(Teraterm)を切断 → 再接続し、プロファイルを有効にする。
nvm ls-remote
でインストール可能なバージョンを確認する。
nvm install v20.18.0
node --version
Docker上に転送するモジュールとコード一式を用意
- デプロイプロジェクト用のディレクトリを用意する
cd
mkdir DeployProject
cd ./DeployProject
- npm init で package.json を作成する
- 必要なライブラリ群をインストールする
npm install aws-sdk
npm install http
npm install aa
npm install executors
npm install request
ここまでで、
- node_modules
- package-lock.json
- package.json
が作成される。
FROM public.ecr.aws/lambda/nodejs:20
RUN mkdir -p /opt
COPY index.js ${LAMBDA_TASK_ROOT}
COPY node_modules/ ${LAMBDA_TASK_ROOT}/node_modules/
COPY package-lock.json ${LAMBDA_TASK_ROOT}
COPY package.json ${LAMBDA_TASK_ROOT}
CMD [ "index.handler" ]
を、$HOME/DeployProject/Dockerfileに用意する。
公式のLambda実行環境イメージに、自分のソース&ライブラリ群を転送するイメージです。
node_modules ディレクトリの転送記述は、上記の記載で大丈夫でした。
まとめ
今回のビルド用の環境用意までを記載しました。
node_modulesの転送用の書き方や、package.json、package-lock.jsonを用意しておかないとLambdaとして動かしたときに上手く動かなかったというのが、今回のメモ書きの大事なところです。
AWSの相談・お困りごとありましたら、、、
AWSの活用方法や、お困りごとの相談、随時、お仕事の受付しております。
AWSのLambda開発関連で、ライトな開発や、ちょっと、こんな事を自動化したい!等も、お気軽に問い合わせください。