0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

API gateway経由でLambdaでFlaskアプリをZappaなしでデプロイ(忘備録)

Last updated at Posted at 2025-06-14

API gateway経由でLambdaでFlaskアプリをZappaなしでデプロイ

はじめに

今回は、API gateway経由でLambdaにFlaskアプリをZappaなしでデプロイする方法を勉強してみました。

Zappaなしでデプロイする利点として以下があげられます。

・カスタマイズ性
・自分でリソースを設定するので、エラーが特定しやすい

手順

①アプリをローカルで作成

ディレクトリ構成

test ーー app.py
      |__ handler.py

app.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return {"message": "Hello from Lambda!"}

@app.route('/hello/<name>')
def hello_name(name):
    return f'Hello, {name}!'

handler.py

from app import app
import serverless_wsgi

def lambda_handler(event, context):
    return serverless_wsgi.handle_request(app, event, context)

必要なら、venvでapp.pyがflaskで動くか確認してみる。

②packageディレクトリにLambdaにもっていくlibraryパッケージをZipする。

  • packageディレクトリにパッケージをインストール
pip install flask serverless-wsgi  -t ./package
  • packageディレクトリに移動して、パッケージをzip

Mac/Linux

cd package
zip -r ../deployment.zip .
cd ..
zip -g deployment.zip app.py handler.py

Windows PowerShell

cd package
Compress-Archive -Path * -DestinationPath ../deployment.zip

Compress-Archive -Path:pathを指定して圧縮処理をする
*:カレントディレクトリを指定
-DestinationPath ../deployment.zip:圧縮先を指定

# 上の階層に戻る
cd ..

# アプリ本体(app.py と handler.py)を ZIP に追加(Updateモード)
Compress-Archive -Path app.py, handler.py -Update -DestinationPath deployment.zip

③Lambdaにzipファイルを送る

右上:関数の作成を押す
image.png

1から作成
image.png

ロールは、とりあえずなので基本的な~で選択。
image.png

アップロード元を押して、先ほどの作ったdeployment ZIPファイルをアップロード
image.png

ハンドラ:handler.lambda_handlerに変更
image.png

認識されていなかった、コードが出てくる
image.png

  • Lambdaをテストします。
    テストのタブをクリック⇒新しいイベントを作成⇒イベント名:test-flaskとする⇒イベントJSONに以下を張り付ける
{
  "httpMethod": "GET",
  "path": "/",
  "headers": {},
  "queryStringParameters": null,
  "body": null,
  "isBase64Encoded": false
}

テストのオレンジボタンを押す
成功すると緑の 実行中の関数:成功 がでてくる
▼詳細で詳細が確認できる
image.png

APIGatewayにてAPIを作成を押す。
image.png

REST APIを選択。(HTTP APIよりも多機能)
image.png

echo_flaskと名前をつける
エンドポイントタイプは、とりあえずリージョンで。
image.png

うまくいくとこの画面。
image.png

メソッド作成をおすと以下画面
GETを選んで、Lambdaを選ぶ
image.png
Lambdaプロキシ統合を有効化。←重要
Lambdaで作った関数を選ぶ。

image.png

APIをデプロイをする。
image.png

ステージ名は、とりあえずdev
image.png

URLを呼び出すをコピーしてブラウザに貼って接続
image.png

/hello/<name>のデプロイ

リソースを作成を押してリソース名にhelloを入力
image.png
メソッドを作成を押す
image.png
先ほどを同じようにLambdaプロキシ統合をオンにして、先ほどのLambdaを選ぶ

/helloを選択したまま、リソースを作成を押す。
今度は、リソース名:{name}として作成。
同様にメソッドを作成でLambdaプロキシ統合をオンにして、先ほどのLambdaを選んで、メソッドを作成を押す。
APIをデプロイでステージを新しくするなり、そのままでもどちらでもいいのでデプロイ。(ステージはVersionと同じような感じ)
image.png

検証にかなり時間使ったが、できてよかった~。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?