LoginSignup
37
23

More than 3 years have passed since last update.

Lambdaのローカル開発環境を構築

Last updated at Posted at 2019-03-21

はじめに

最近、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))
37
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
23