docker-lambdaで簡単なLambda開発環境を構築

f:id:ykarakita:20170528025727p:plain使ってみた時に調べたことをメモ。

前提

  • Mac
  • Docker version 17.03.1-ce, build c6d412e
  • aws-cli/1.11.82 Python/3.6.1 Darwin/16.6.0 botocore/1.5.45
  • こちらの記事を参考にデプロイパッケージ作成用のImageをmylambdaという名前で準備済み
  • Python3.6のLambda環境を作るよ

手順

1. 新規作成Directory内に以下のファイルを作成する

  • lambda_function.py
    • def lambda_handler(event, context):がhandlerになる
  • requirements.txt
# こんな感じ
requests
# こんな感じ
{
  "key3": "value3",
  "key2": "value2",
  "key1": "value1"
}

2. デプロイパッケージを作成する

$ docker run -v "$PWD":/var/task mylambda

実行するとdeploy_package.zipが作成される。

3. ローカルでFunctionを実行してみる

$ docker run -v "$PWD":/var/task lambci/lambda:python3.6 lambda_function.lambda_handler $(printf '%s' $(cat input.json))

すでにコンテナが存在する場合は

$ docker start -a [コンテナID]

Lambdaファンクションの実行結果が出力される。

4. AWS CLIを使ってlambdaにアップロードする

$ aws lambda create-function \
--role arn:aws:iam::[アカウントID]:role/lambda_basic_execution \
--runtime python3.6 \
--handler lambda_function.lambda_handler \
--zip-file fileb://./deploy_package.zip \
--region ap-northeast-1
--function-name MyTestFunction \

5. コードを更新する

aws lambda update-function-code \
--zip-file fileb://./deploy_package.zip \
--publish
--function-name MyTestFunction \

まとめ

Dockerばり便利。

参考にした記事