AWS lambdaへのソースコードをデプロイするツール『zappa』を紹介します。
zappaってなんだか、
「あのバカめ・・・!どういう技かも見切れんのか」とか
「きたねぇ花火だ」とか言われてそうな名前ですね。

- AWS lambdaでアップロードツールを使う理由を知る
- アップロードツールの種類を知る
- zappaを知る
Contents
AWS lambdaとは
サーバレスアプリを作成する際にAWSのlambdaにお世話になることが多いと思います。
lambdaのエディタで開発することもできます。
しかし、エディタとしては使い勝手が悪かったり、容量が大きいと使えなくなったりと何かと不便です。
制約を取っ払うため、ローカル環境で開発したソースコードをデプロイ(アップロード)して利用することが考えられます。
AWS lambdaのアップローダー
AWS lambdaは、Node.jsやRuby、Pythonなどいくつかの言語に対応しています。
今回は、Pythonに絞って紹介します。
chalice
手前味噌ですが、chaliceで簡単にサーバレスアプリを作る方法も紹介していますので
興味がある方はみてみてください。
serverless
lambda-uploader
zappa
上記、4つくらいが有名どころです。
おすすめは、chaliceです。
多少の使い勝手の悪さはありますが、AWS謹製なので安心して使うことができます。
zappaとは
chaliceを勧めておきながら、なぜzappaを紹介するのか。
それは、chaliceがAWS lambdaとAPI Gatewayのセットでデプロイされるためです。
AWS lambdaだけ使いたいと言った場合にchaliceではなく、zappaを利用するのがいいです。
zappaを使う
virtualenvのインストール
zappaを利用するには、virtuaenvが必要になります。
# homebrewのインストール
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# pyenvのインストール
brew install pyenv
# virutaulenvのインストール
brew install pyenv-virtualenv
# プロファイルの追加
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
exec $SHELL -l
# 仮想環境の構築(Pythonのバージョンは3.6系)
pyenv virtualenv 3.6.5 zappa
# アクティベート
pyenv activate zappa
AWS IAMとcredentialを用意する
AWS コンソールにログインして、IAMを作成してください。
作成中にシークレットキーなどが出てきます。
クレデンシャルファイルを作成します。
pip install awscli
mkdir ~/.aws
aws configure
zappaのインストール
pip install zappa
zappa init
色々、質問が出てくるので答えていきます。
ステージ
What do you want to call this environment (default 'dev'):
dev、staging、productionを選択します。
devで問題ないので、Enterを押しましょう。
※個人で開発する分にはなんでもよいです。
AWS S3のBucket
Your Zappa deployments will need to be uploaded to a private S3 bucket.
If you don't have a bucket yet, we'll create one for you too.
What do you want to call your bucket? (default 'zappa-2txhj5ihk'):
lambdaのソースコードはS3にアップロードされます。
アップロード先のバケット名は何にしますか。って感じです。
デフォルトで問題ないので、Enterを押しましょう。
AWSのregion
You can optionally deploy to all available regions in order to provide fast global service.
If you are using Zappa for the first time, you probably don't want to do this!
Would you like to deploy this application globally? (default 'n') [y/n/(p)rimary]:
デフォルトで問題ないので、Enterを押しましょう。
アプリ名
What's the modular path to your app's function?
This will likely be something like 'your_module.app'.
Where is your app's function?: zappa.app
今回は、zappa.appでいきます。
すべての質問に答えるとzappa_setting.jsonが作成されます。
アプリを作成する
手軽に作成する方法は、Flaskを使います。
Flaskのインストールに関しては、下記を参考にしてください。
zappa.py
zappa.pyをzappa_setting.jsonと同じ階層に作成してください。
from flask import Flask
from zappa.async import task
app = Flask(__name__)
@task
def make_pie():
""" This takes a long time! """
ingredients = get_ingredients()
pie = bake(ingredients)
deliver(pie)
@app.route('/api/order/pie')
def order_pie():
""" This returns immediately! """
make_pie()
return "Your pie is being made!"
zappaをデプロイ
# 初回
zappa deploy
#2回目以降
zappa upload
AWS lambdaとzappaまとめ
サーバレスに欠かせないAWS lambdaへのアップロードについて紹介しました。
zappaは、簡単に導入できるので使ってみてください。