FlaskアプリをAWS Lambdaでサーバーレス化する方法を完全ガイド!初心者でもできるデプロイ手順
生徒
「PythonのFlaskで作ったWebアプリを、サーバーレスで動かしてみたいです!AWS Lambdaというものを使うと安くて便利だと聞いたのですが、難しいですか?」
先生
「AWS Lambda(ラムダ)は、必要なときだけプログラムを実行してくれるサービスです。24時間サーバーを借りるよりも費用を抑えられるのが魅力ですね。」
生徒
「サーバーレスってことは、サーバーの準備がいらないんですか?」
先生
「はい、管理をAmazonにお任せできるという意味です。少し特別な準備が必要ですが、手順を追えば初心者でも大丈夫ですよ!」
1. FlaskとAWS Lambdaの基本とメリット
まずは今回の主役であるFlask(フラスク)についておさらいしましょう。これは、Pythonというプログラミング言語を使ってWebサイトやアプリの仕組みを簡単に作れる道具です。そして、それを動かす舞台となるのがAWS Lambda(エーダブリューエス・ラムダ)です。
通常、Webアプリを動かすにはサーバーという「24時間起きて待機しているコンピューター」が必要です。しかし、これには電気代のような維持費(レンタル料)がかかります。一方でサーバーレスという仕組みは、誰かがあなたのサイトにアクセスした瞬間だけコンピューターがパッと起きて処理をし、終わったらすぐに眠りにつきます。眠っている間は料金が発生しないため、初心者の方が公開の練習をするのにも最適なのです。
2. サーバーレス化に必須の道具Mangumとは?
ここで一つ、大切な仲間を紹介します。それがMangum(マンガム)というライブラリです。実は、Flaskは本来「普通のサーバー」で動くように設計されています。そのままでは、AWS Lambdaという特殊な環境でどう動けばいいのか混乱してしまいます。
Mangumは、いわば「翻訳機」です。AWSからの呼び出しを、Flaskが理解できる言葉に通訳してくれます。このMangumを使うことで、いつものように書いたFlaskのプログラムを、そのままサーバーレスの世界へ持っていくことができるようになります。この橋渡し役のおかげで、私たちは複雑な設定を気にせずに開発に集中できるのです。
3. 実行するためのメインプログラムを作成しよう
では、実際にプログラムを書いてみましょう。今回は「こんにちは!サーバーレスの世界へようこそ」と画面に表示するアプリを作ります。ファイル名は「app.py」として保存してください。
from flask import Flask
from mangum import Mangum
app = Flask(__name__)
@app.route("/")
def index():
return "こんにちは!AWS LambdaとFlaskでサーバーレスアプリが動いています!"
@app.route("/user/<name>")
def hello_user(name):
return f"ようこそ、{name}さん!サーバーレスへようこそ。"
# これがLambdaで動かすための魔法の一行です
handler = Mangum(app)
if __name__ == "__main__":
app.run()
コードの中にあるhandler = Mangum(app)という部分が、先ほどお話しした翻訳機の設定です。AWS Lambdaは、実行するときに「handler」という名前の入り口を探しに来ます。そこにMangumをセットしておくことで、Flaskアプリ全体をスムーズに起動させることができるのです。
4. 必要なライブラリを指示書にまとめる
AWSのコンピューターは、あなたのパソコンに入っているソフトをすべて持っているわけではありません。あらかじめ「これとこれを使います」という指示書を渡す必要があります。これがrequirements.txt(リクワイアメンツ・テキスト)です。
以下の内容をテキストファイルに書き、名前を「requirements.txt」にして保存しましょう。
Flask==3.0.0
mangum==0.17.0
このリストがあることで、AWS側は「あ、FlaskとMangumを準備すればいいんだな」と理解してくれます。この準備を忘れると、クラウド上でプログラムを動かした瞬間に「道具が足りません!」と怒られてしまうので注意してください。
5. AWSアカウントの作成と初期設定
次に、Amazonが提供するクラウドサービス、AWSのアカウントを作成します。登録にはクレジットカードが必要ですが、多くのサービスに無料利用枠があるため、個人で学習する範囲ならほとんど料金はかかりません。
ログインしたら、IAM(アイエーエム)という設定画面で「管理者権限」を持ったユーザーを作っておくのがおすすめです。これは、AWSという巨大な遊園地の中で、すべての乗り物に乗れるフリーパスを持つようなものです。セキュリティのために、普段使っているメールアドレスのログイン情報(ルートユーザー)とは別に、作業用のユーザーを作るのがプロのやり方です。
6. データを送るためのパッケージ化作業
AWS Lambdaにプログラムを届けるには、ファイルを一つの袋にまとめる必要があります。これをデプロイパッケージと呼びます。単に「app.py」を送るだけではなく、requirements.txtに書いたFlaskなどのライブラリ本体も一緒に袋に入れなければなりません。
具体的には、パソコンの「ターミナル(黒い画面)」を使って、専用のフォルダにライブラリをダウンロードし、自分のプログラムと一緒にジップファイル(圧縮ファイル)にまとめます。初心者の方には少し難しいかもしれませんが、「必要な道具を全部詰め込んだお弁当箱を作る」作業だと思えば分かりやすいでしょう。
# フォルダを作ってライブラリをインストールするイメージ
mkdir package
pip install -t package Flask mangum
cd package
zip -r ../my_app.zip .
cd ..
zip -g my_app.zip app.py
これで、AWSに送るための「my_app.zip」が完成しました。この中にあなたの知恵と道具がすべて詰まっています。
7. AWS Lambda関数の作成とアップロード
いよいよAWSの管理画面(コンソール)で、Lambdaの関数を作成します。「関数の作成」ボタンを押し、名前を付けて、言語には「Python 3.11」などを選びましょう。
関数ができたら、先ほど作ったジップファイルをアップロードします。ここで一つ重要な設定があります。「ランタイム設定」の編集で、ハンドラという項目をapp.handlerに書き換えてください。これは「app.pyというファイルの中にあるhandlerという入り口を使ってね」という指示になります。この設定が正しいことで、ようやくFlaskとLambdaがつながります。
8. API GatewayでURLを発行する
今のままでは、Lambdaはクラウドの中でひっそりと待機しているだけです。外からアクセスできるようにするために、API Gateway(エーピーアイ・ゲートウェイ)というサービスを連携させます。これは、あなたのアプリ専用の「受付窓口(URL)」を作る役割をします。
Lambdaの設定画面から「トリガーを追加」を選び、API Gatewayを選択します。「HTTP API」という種類を選ぶと、初心者でも簡単に設定できます。設定が完了すると、専用のURLが表示されます。これがあなたのWebサイトの住所になります!
9. 公開後の動作確認とデバッグ
発行されたURLをブラウザに貼り付けて、アクセスしてみましょう。画面に「こんにちは!」と表示されれば、サーバーレス化は大成功です。もしエラーが出てしまった場合は、CloudWatch Logs(クラウドウォッチ・ログ)という機能を確認しましょう。
ここには、プログラムが動いたときの日記が記録されています。「〇〇行目で書き間違いがあります」といったヒントが書いてあるので、それを元に修正します。プログラムを直したときは、またジップファイルを作ってアップロードし直せば、すぐに最新の状態が反映されます。
# 修正の例:もっと歓迎するメッセージに変えてみる
@app.route("/welcome")
def welcome():
# クラウドなら世界中の人が見られます!
return "サーバーレスの冒険へようこそ!あなたのアプリが世界に公開されました。"
サーバーレス化ができれば、アクセスが急に増えてもAWSが自動でパワーを調整してくれるため、あなたは安心して開発に没頭できます。今回の手順をマスターして、ぜひ自分だけの便利なWebアプリを世界中に届けてみてくださいね!