🔥

[爆速] ZappaでAPI Gateway + Lambdaにデプロイ!

2022/10/27に公開約2,000字

1.はじめに

API Gateway + LambdaのアーキテクチャでREST API作成したりするユースケースは多いかと思います。そんな時に便利なライブラリないかな〜と探していたら 「Zappa」 というものを見つけました✊
今回は、「Zappa」を使用して実際にAWSにデプロイしてみたいと思います!

2.Zappa とは?

Pythonのサーバーレスフレームワーク
https://github.com/Miserlou/Zappa

WSGIアプリケーションに対応しているので、lambdaにFlask/Django等のWSGIアプリケーションをデプロイするするのに便利ですね。手軽にデプロイしたいときは、SAM や Serverless Frameworkより良いかと思います。

3.ハンズオン

早速やっていきましょう

3.1.Zappaのインストール

pip でインストールできます

$ pip install zappa

3.2.初期設定する

とりあえず作業用フォルダを作成

$ mkdir it-training
$ cd it-training

以下のコマンド実行で初期化します

$ zappa init
  • 基本 defaultの設定でOKですが、「Where is your app's function?:」 の部分は、ご自身のアプリファイルの名前を指定してあげてください。
  • 今回は、「app.app」 でいきたいと思います
  • Flaskアプリケーションの起動ファイルを設定してる感じですね。

初期設定が終わると zappa_settings.json が作成されています

$ cat zappa_settings.json
{
    "dev": {
        "app_function": "app.app",
        "aws_region": "ap-northeast-1",
        "profile_name": "default",
        "project_name": "it-trarining",
        "runtime": "python3.8",
        "s3_bucket": "zappa-6jgjbjdyx"
    }
}

3.3.実行するファイルを作成する

from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def hello():
    return 'hello world!'
 
if __name__ == '__main__':
    app.run()

3.4.デプロイする

初回のデプロイ

$ zappa deploy dev

※ デプロイでうまくいってなさそうなら cloudwatchのロググループから辿ってエラーを見に行く

2回目以降は以下のコマンドで

$ zappa update dev

うまくデプロイできると以下のような出力が出てきます

Your updated Zappa deployment is live!: https://XXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/dev

なんとAPIGatewayの設定も勝手にやってくれてます。( まじ優秀 )

4.発展

ここまできたら細かい設定をしたくなるかと思います。

  • APIGatewayの設定 (認証キーとかもろもろ)
  • SSL証明書の設定
  • cloudwatchの詳細
  • cache
  • COSRなどなど

「zappa_settings.json」 を編集することで細かいところまで設定できるのでぜひ試してみてくださいませ。
JSONが嫌な人はyamlでも設定できるみたい 👀

dev:
  app_function: your_module.your_app
  s3_bucket: your-code-bucket
  events:
  - function: your_module.your_function
    event_source:
      arn: arn:aws:s3:::your-event-bucket
      events:
      - s3:ObjectCreated:*
$ zappa deploy dev -s my-custom-settings.yml

5.終わりに

「Zappa」 便利です。快適な開発ライフを✨

Discussion

ログインするとコメントできます