はじめに
最近、AWS Lambdaを使用する機会が増えました。
serverless frameworkやaws cliを使用して、修正のたびにデプロイを行い、awslogsにてcloudwatch logsのログを確認しながら、ソースの修正を行うというような非効率な実装を行っていました。
googleにて検索している際に、下記のdocker imageを発見しました。
docker-lambdaを使用方法などを記載していきます。
環境
- macOS Mojave バージョン 10.14
- docker version: 18.06.1-ce
- node v8.11.2
- npm 5.6.0
テスト用のプロジェクトを作成
プロジェクトディレクトリを作成
mkdir test-docker-lambda
test-docker-lambdaディレクトリに移動
cd test-docker-lambda
node の初期設定
npm init
AWSのSDKのモジュールをインスール
npm install aws-sdk
index.jsを作成
touch index.js
テキストエディタにてindex.jsを開きます。
下記のテスト用スクリプトをコピー&ペーストして保存してください。
const aws = require("aws-sdk");
exports.handler = async (event, context) => {
console.log(JSON.stringify(event));
context.succeed({
statusCode: 200,
body: `{"result": "completed"}`
});
};
eventのjsonファイルを作成
touch event.json
下記のJSON文字列をコピー&ペーストして保存してください。
{"test": "test"}
docker-lambdaのdocker imageをダウンロード
下記のコマンドを実行し、docker-lambdaをpull
docker pull docker-lambda
dockerを実行
dockerを実行
docker run --rm -v "$PWD":/var/task lambci/lambda:nodejs8.10 index.handler $(printf '%s' $(cat event.json))
下記のように表示されれば、成功です。
$ docker run --rm -v "$PWD":/var/task lambci/lambda:nodejs8.10 index.handler $(printf '%s' $(cat event.json))
START RequestId: 3c0438a2-df52-14f8-fba8-2fb5dd8581bc Version: $LATEST
2019-03-21T12:38:54.328Z 3c0438a2-df52-14f8-fba8-2fb5dd8581bc {"test":"test"}
END RequestId: 3c0438a2-df52-14f8-fba8-2fb5dd8581bc
REPORT RequestId: 3c0438a2-df52-14f8-fba8-2fb5dd8581bc Duration: 1253.10 ms Billed Duration: 1300 ms Memory Size: 1536 MB Max Memory Used: 39 MB
{"statusCode":200,"body":"{\"result\": \"completed\"}"}
kusunokBookpuro:test-docker-lambda ry_kusunoki$
awsのサービスにアクセス
環境変数を読み込み、ローカル環境からAWSのサービスにアクセスすることも可能みたいです。
下記がコマンド例です。
docker run -e AWS_ACCESS_KEY_ID=[:AWS_ACCESS_KEY_ID] -e AWS_SECRET_ACCESS_KEY=[:AWS_SECRET_ACCESS_KEY] -e AWS_DEFAULT_REGION=[:AWS_DEFAULT_REGION] --rm -v "$PWD":/var/task lambci/lambda:nodejs8.10 index.handler $(printf '%s' $(cat event.json))