LoginSignup
9
8

More than 3 years have passed since last update.

WSL + Docker Desktop for Windows + docker-lambda + Python でローカル開発環境を構築

Last updated at Posted at 2020-01-18

概要

AWS Lambda のローカル開発環境を Windows 上で構築しなければならなくなったため、
自分なりの構築手順を備忘録として記述していきます。
その通りやるだけで簡単に構築できる素晴らしい記事 を参考に進めていきたいと思います。

  • WSL(Windows Subsystem for Linux)の環境を構築します。
  • ローカルに Docker Desktop for Windows の環境を構築します。
  • WSL からローカルの Docker Desktop for Windows を操作できるようにします。
  • ローカル環境に AWS Lambda(Python) の開発環境を構築します。

環境情報

  • Windows10 Pro(1909)
  • WSL(Ubuntu 18.* LTS)
  • bash
  • Docker
  • Python3.6

※ちなみに記事の内容は bash を想定して書いていますが
 私の環境は fish ですので表示が間違っている可能性があります。
 万が一、間違っている箇所がありましたら、
 お手数ですがコメントで教えていただけると助かります。

前提知識

  • 基本的なLinux(Ubuntu, bash)の操作を理解している
  • 仮想OS, WSL, Dockerに関する基本的な知識がある
  • AWS Lambda の基本的な知識がある

WSLの構築

下記の素晴らしい記事を参考に「おまけ」「アンインストール」以外を実施
※下記の 初めにやっておく設定 の中で Hyper-V にチェックが無い場合は
 一緒にチェックを入れて有効にしてください。

WSLのインストール・アンインストール方法

Docker Desktop on Windows をインストール

下記の素晴らしい記事を参考に「おまけ」「アンインストール」以外を実施
docker desktop for windows の docker デーモンを WSL から使えるようにする の時に
 Shared Drives でローカルの作業ディレクトリのあるドライブにチェックを入れておいてください。

docker desktop for windows + WSL で docker 環境

ソースを準備

GitHub にこの記事で使用するソースのテンプレートを用意しました。
下記のリンクから MIT License で公開しています。
ご自由にお使いください。

ソースコードのTemplateをダウンロード

エイリアスを登録

新規のLambda関数はテンプレートのソースを基に作成していくため、
Dockerを実行する際のコマンドは常に一定になる想定です。
毎回入力するのは大変ですので、あらかじめ WSL にエイリアスを登録しておきます。

.bash_aliases を vim で開く(無ければ新規作成)

~$ sudo vim ~/.bash_aliases && source ~/.bash_aliases

.bash_aliases に下記コマンドを追加

.bash_aliases
alias docrun='docker run -v $(wslpath -m $PWD):/var/task --env-file .env lambci/lambda:python3.6 lambda_function.lambda_handler $(printf "%s" $(cat event.json))'

簡単にですが docrun の内容を説明します。

docker run
Dockerイメージからコンテナを生成・実行

-v $(wslpath -m $PWD):/var/task
ホストOSのディレクトリ:コンテナのディレクトリ でボリュームを割り当てています。
※コンテナ上の /var/task の中で、左に指定したホストOSのディレクトリの中が見えるということです。
ただし、WSL 上でローカル環境のディレクトリにいる時

/mnt/d/Program/Python/AWS/docker-lambda $ echo $PWD
/mnt/d/Program/Python/AWS/docker-lambda

となっていますので、これをローカル環境のパスに変換するために

/mnt/d/Program/Python/AWS/docker-lambda $ echo $(wslpath -m $PWD)
D:/Program/Python/AWS/docker-lambda

としています。

--env-file .env
環境変数ファイルを読み込みます。

lambci/lambda:python3.6
Dockerイメージを指定しています。

lambda_function.lambda_handler
lambda_function.py の lambda_handler を実行するようにしています。

$(printf "%s" $(cat event.json))
event.json の内容を lambda_handler の引数 event に渡しています。

Lambda関数を実行してみる

Windows

テンプレートのソースファイルを作業ディレクトリにコピーします。(ここでは D:\Program\Python\AWS\docker-lambda にします。)

WSL

作業ディレクトリに移動

~$ cd /mnt/d/Program/Python/AWS/docker-lambda/

Lambda関数を実行

/mnt/d/Program/Python/AWS/docker-lambda $ docrun
START RequestId: c02ba91d-7783-1719-3b5e-269dfb11c807 Version: $LATEST
event:{'Hello': 'World'}
ENV:LOCAL
END RequestId: c02ba91d-7783-1719-3b5e-269dfb11c807
REPORT RequestId: c02ba91d-7783-1719-3b5e-269dfb11c807  Init Duration: 439.63 ms        Duration: 4.32 ms       Billed Duration: 100 ms Memory Size: 1536 MB    Max Memory Used: 39 MB

"{\"message\": \"success\"}"

初めて実行する時はDockerイメージのPullから始まります。
Pull完了後に関数が実行され、上記のような表示がされれば環境構築は完了です。

参考

WSLのインストール・アンインストール方法
docker desktop for windows + WSL で docker 環境
docker-lambdaでAWS Lambda環境をお手軽に動かす
いまさらだけどDockerに入門したので分かりやすくまとめてみた

最後に

なるべく初学者の方にもわかるように説明しているつもりですが、
分かりづらい点があったり、間違っている点がありましたら
コメントをいただけると助かります。

9
8
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
9
8