python

zappaでAWS lambdaにPythonのソースコードをアップロードする

zappa

AWS lambdaへのソースコードをデプロイするツール『zappa』を紹介します。

zappaってなんだか、

「あのバカめ・・・!どういう技かも見切れんのか」とか

「きたねぇ花火だ」とか言われてそうな名前ですね。

「きたねぇ花火だ」の画像検索結果「技の性質も見切れんのか ナッパ」の画像検索結果

 

  • AWS lambdaでアップロードツールを使う理由を知る
  • アップロードツールの種類を知る
  • zappaを知る

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は、簡単に導入できるので使ってみてください。

 

ABOUT ME
アバター
ロッピー
コンサルタントから2018年にエンジニアに転向。年収400万円のサラリーマンエンジニアから、半年で月収100万円を稼ぐエンジニアになった。 Python、Golangなど単価の高い言語を得意とする。