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

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

More than 1 year has passed since last update.

はじめに

最近、AWS Lambdaを使用する機会が増えました。
serverless frameworkやaws cliを使用して、修正のたびにデプロイを行い、awslogsにてcloudwatch logsのログを確認しながら、ソースの修正を行うというような非効率な実装を行っていました。

googleにて検索している際に、下記のdocker imageを発見しました。

https://github.com/lambci/docker-lambda

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))

ry-kusunoki
エンジニア歴4年目の新米エンジニアです。MacBookProを買ったので、勉強のメモとして記事を投稿しています。ポエムではなく、有効な記事を書いていきたいです。 ※この発言は個人の見解であり、所属する組織の公式見解ではありません。
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした