localstackによるAWS
Lambdaの開発環境を、
miniconda_卜で、つくったら
簡単便利だった話
米田真治
17/08/19 オープンデベ口ッパーズカンファレンス2017Tokyo 1
about:
・米田真治 (こめだしんじ@komeda_shinji)
・ 運用エンジニア
・ 日本UNI×ユーザ会会員
. 経歴
・ 学生時代!こUNI×に出会う
• Internetにつながる環境がきた
・ いろんなプログラムをビルドしているうちに
開発・構築の楽しさに目覚める
・ 学科のシステム管理を経験
・ システム運用のおもしろさを覚える
・ 就職してISPのサーバ構築・運用に携わる
• 2000年6月サイタスマネジメント創業メンバー
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 2
プログラム開発
・職業プログラマではありませんが、
ちょっとしたツール開発はやります。
・あと、 ossのパクを直したり拡張したり。
・最近の主な開発言語:Python
・環境Mac OS×El Capitan
•OS上の環境とは独立させたい
OSバンドル版のPython(2.7 .10)
_ssl.soで、リンクされているOpenSSL古すぎ
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 3
minicondaで
Python 3.6の環境を構築しよう
-どうしてminiconda?
・手軽にjupyter-notebookを使いたい!
• anaconda(miniconda)なら、
かんたんにインストールできます0
.どうしてPython 3.6?
• bash kernel iこはPython3が必要で、す0
.あとからPython 2.7の環境も作れます。
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 4
minicondaのインストール
1. https://conda.io/miniconda.html から
インストーラ一(bashのスクリプト)を入手します。
2. bashでスクリプトを実行します。
$ bash ./Miniconda3-latest-MacOSX-x86 64.sh
・ インストール後~I.bash_profileを確認すると、 ファイルの末尾に以下の
内容が追加されていることがわかります。
# added by Miniconda3 4.3.21 installer
export PATH=”/Users/username/miniconda3/bin:$PATH”
あとはconda installなりpip installなりご自由に。
17/08/19 オープンデべ口ツjて-ズカンファレンス2017Tokyo 5
AWS Lambdaのコード開発
・みんな大好きAWS Lambda
•AWSのプラット フォーム上で実行されるため、
テスト&デバックが面倒です。
-ローカルに実行環境をつくってテストしたい
.直接エラーメッセージを見たい
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 6
python-lambda-local
• Lambda関数をローカル実行するためのラッパ-
$ pip install python-lambda-local
$ python-lambda-local -1 lib/ ー千 handler -t 5
lambda-test.py event.json
• DynamoDBは口一力jし/〈ージ、ヨンがありますが、
SQSなどはAWS上のサービスを使うことになります0
• LambdaからLambdaを呼びたい場合(こ、
呼び、出されるLambda関数も ローカル実行させること
はできません。
• Lambdaのカスケードしたいんやけど……
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 7
そうだlocalstackを使おう
• https://github.com/localstack/localstack
•AWSのモック環境です。
-料金を気にせずに テストができるます0
.エラーメッセージがそのまま見えます。
サポートしているAPI
• API Gateway
• Kinesis
• DynamoDB
• DynamoDB
Streams
Firehose • SES
Lambda • Route53
SNS ・ CloudFormation
sos ・ CloudWatch
• Redshift
• Elasticsearch • ES (Elasticsearch 一部の機能しか実装されて
• S3 Service) いないAPIもあります
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 8
miniconda環境にlocalstaclく専用の
environmentを作成する
1. environment の作成
$ conda create -n localstack python=2.7
またはS conda create -n localstaclくpython=3.6t
2. environment をactivate
$ . activate localstack
3. localstack をインストール
(localstaclく) $ pip install localstack
4. localstack を起動
(localstaclく) $ localstack start
↑python3の場合、 エラーが出るため
localstack/services/infra.pyの修正が必要で、す。
オープンデベ口ツjてーズカンファレンス2017Tokyo 9
Docker上で、も実行で、きます
• Docker for Mac をインストール
$ localstaclくstart --docker
Docker上のlocalstackは python2.7で、実行されます0
.コマンド起動毎にコンテナが作成されるので、
2回目からはdocker startしましょう。
ムproxyの設定が有効になっていると、
モックサーバのヘルスチェックに失敗することがあります。
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 10
localstackでのデータについて
-基本的には、localstack上に作成したものは、
停止すると消滅します。
• Kinesis、 DynamoDB、 Elasticsearchのみ永続可能
.初期状態では、
DynamoDBは-inMemoryオプションがついた状態で
起動されています。
・データを保存するためには、環境変数DATA DIR
をセットしておきます。
・この環境変数をセッ卜するとKinesisとElasticsearch
のデータ保存場所もここに変更されます。
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 1 1
環境変数DATA DIRをセット
·activate したとき自動設定するように、
フックを作成します。
/User、sfuser、name/miniconda3/envs/localstack/
etc/conda/act1vate.d/env vars.sh:
export DATA_DIR="$CONDA_PREFIX/data"
etc/conda/deactivate.d/env vars.sh:
unset DATA DIR
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 12
開発中
localstackの操作はCし|コマンド使います。
$ zip -ru 千unc.zip handler.py mylib
$ aws --endpoint-url=http://localhost:4574
lambda delete-千unction --千unction-name=my千unc
$ aws --endpoint-url=http:�/localhost:4574
lambda create-千unction --千unction-name=my千unc
--runtime=python2.7 --role=myrole
ー-handler=handler、.handler、
ー-zip-千ile 千ileb://func.zip
$ aws --endpoint-url=http://localhost:4574
lambda invoke -ー千unction-name my千unc
ー-payload ’{”test11: 11test11}1 result.log
localstack を起動し直すと、
SQSやLambdaは再度作成する必要があります。
いちいち面倒くさい。
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 13
そうだ
jupyter-notebookを使おう
• bash kernelで、設定のCし|コマンドを実行すれば、
かんたんに再実行できます。
・ 見出しをつけておけば、 ヒストリから再実行するよりも探しやすい0
. マウスクリックでJll頁に実行できて、 実行結果も一緒に残ります。
・ トライ&エラーの過程も残せて便利です。
・ インストール
$ conda install jupyter jupyter_console qtconsole
notebook nbconvert
• bash kernel
condaのパッケージがないためpipで、インストールしますo
$ pip install bash_kernel
・ IPython kernel specの登録コマンドを実行します。
$ python -m bash_kernel.install
17/08/19 オープンデベ口ツjて-ズカンファレンス2017Tokyo 14
ご JUpyter p州on酬明 L勾out
File Ed� View In鵠rt Cell Kern剖 Help Trusted I Bash 0
�11+ 灰 色 町� 1' ψ 制 ・ C Markdown
4‘
‘’ m
17/08/19
アーカイブ作成
In (SJ: zip - u python.zip hello_world.py
Lambda関数更新
工n [6]: aws -- endpoint-url�http: //localhost:4574 lambda delete-function --function-
In [7 J: aws --endpoint-url=http: I/localhost:4574 lambda create-function --function-
Lambda関数実行
工n [aJ: aws --endpoint-url=http: I/localhost:4574 lambda inv。ke --function-name hell
・'StatusCode'・: 200
}
In [ J:
オープンデベロッJ\ーズカンファレンス2017 Tokyo 15
詳しくはQiitaで、書いています
• Maciこminicondaをつかってjupyter notebookを簡単セットアツ
プする
http://aiita.com/komeda-shinii/items/470c8ca3b2273be1 f825
• miniconda環境にlocalstack専用のenvironmentを作成する
http://aiita.com/komeda-shinii/items/88e493601 b9827de5l da
• localstack をDocker on Mac上で動かす
http://aiita.com/komeda-shinii/items/5a0dl l 9fdee5747f5a1 f
• http_pro×yの設定があるとlocalstackの起動で、工ラーにな
る
http://aiita.com/komeda-shinii/items/c858d4d6f0b0d57854af
17/08/19 オープンデべ口ツjて-ズカンファレンス2017Tokyo 16

localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話