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?

Docker+AWS Lambda+Python(Flask)で簡単にサーバーレスAPIを実装する

Last updated at Posted at 2024-10-04

🛢️ はじめに

ローカルの Docker 環境で AWS Lambda(Serverless Framework)と Python(Flask)でサーバーレス API を実装,デプロイします.非常に簡単にAPIを実装できるので便利です.皆さんも試してはいかがでしょうか.

🛢️ 自己紹介

初めまして.趣味でweb開発を勉強している273*(ツナサンド) / Kei.と申します.関西の大学生です.最近はフルスタック開発やツール制作を行なっています.まだまだ初心者です.

🛢️ 完成品

以下のリポジトリにテンプレートを用意しましたので,お好きに使ってください!

🛢️ 実装

使用ツール

  • Docker:PCの中に仮想環境を作れるツール.他のプロセスと遮断できるため環境の差をなくすことができる.
  • AWS Lambda:AWSが提供しているサービス.プログラムを定義しておき,インターネットを通じて実行できる.
  • Serverless Framework:サーバレス・アプリケーションを簡単に構築するためのツール.Node,Pythonなどいろんな言語やフレームワークに対応している.LambdaやAPIGatewayの設定を自動化,ymlで実装できる.
  • Python:機械学習やwebシステムなどなんでも作れる万能なプログラミング言語.
  • Flask:Pythonのwebフレームワーク.
  • WSGI:Pythonのwebフレームワークとwebサーバーを接続するインタフェース.読み方はウィスキーやウィズギー.

事前準備

  1. こちらを参考にAWSからアクセスキーとシークレットキーを発行してください.

  2. Macを使用している場合は設定からAirPlayレシーバーを切っておきましょう.
    (ポートがFlaskのデフォルトポートである5000番と重複しているため)


実装

  1. 上記のリポジトリをクローンしてください.

  2. docker-compose.ymlcontainer_nameにコンテナ名を設定し,docker compose build でDockerイメージを構築します.

  3. docker compose up -dでデタッチドモードでコンテナを起動します.

  4. docker exec -it 設定したコンテナ名 /bin/bashでコンテナの中に入ります.

  5. serverless でプロジェクトを作成します.

    1. 今回はFlaskで実装してみたいのでAWS / Python / Flask APIを選択します.
    2. プロジェクト名を設定します.
    3. Serverless Frameworkのログインを求められますので,表示されたリンクからログインしてください(Login/Registerを選びます).
    4. アプリを作成するか既存のアプリを選択するか聞かれますのが,Skip Adding An Appを選択します.
    5. AWSの認証を求められますので,Save AWS Credentials in a Local Profileを選択して事前準備で用意したアクセスキーを入力します.
    6. 作成されたディレクトリに移動し,npm iを実行します.
  6. serverless.ymlでPythonのバージョン(runtimeの部分)をpython3.9に変更し,customwsgipythonBin: /usr/bin/python3を追加します.

  7. docker-compose.ymlのコメントアウトされている部分を解除し,FLASK_APPにapp.pyのパスを指定します.

  8. exitでコンテナから抜け, docker compose downでコンテナの終了させます.

  9. docker compose upでコンテナ内のflaskアプリがローカルで起動します.この時点でhttp://localhost:5000 をGETメソッドで叩くと,jsonでHello from root!とレスポンスが返ってきます.

  10. コンテナの中に入って,aws configureコマンドでAWSの認証をしておきましょう.region(AWSサーバー)やoutput format(デフォルトはjson)はお好みでどうぞ.

  11. デプロイする時はコンテナの中に入り,serverless.ymlのあるディレクトリに移動し,sls deployを実行します.するとAWSに自動でデプロイされます.デプロイ後,ターミナルにデプロイ先のリンクが表示されます.AWS コンソールからも確認できます.また,LambdaとAPI Gatewayが作成,接続されているのを確認できます.

🛢️ 最後に

いかがでしたでしょうか.簡単にサーバーレスAPIを実装することができました!
serverless.ymlで環境をコードで書けたり非常に便利ですね!他にもPython以外の言語やDynamoDBS3と連携することもでき,動作をローカルで試すことも可能です.誰かの参考になったら幸いです.最後まで読んでいただきありがとうございました.それでは!

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?