質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.90%

AWS LambdaとDjangoでRestfulAPIを作るデメリットについて

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 377

meuar

score 18

閲覧いただきありがとうございます。

AWS LambdaでRestfulAPIを作るベストプラクティクスについてに質問です。

Webアプリケーションのバックエンドに使用する技術としてLambdaでサーバーレスにしようか検討しています。さらに、開発を効率化するためにDjangoの導入を考えているのですが、ネットで調べたところあまり事例がないようでした。

そこで以下のことが疑問です。

  • AWS LambdaとDjangoを用いてRestfulAPIを作るのはなんらかのデメリットがあるから事例が少ないのでしょうか?

  • LambdaでRestfulAPIを作成する時に一つのプロジェクトにAPIをまとめるのか、それともマイクロサービスみたいにプロジェクトを別々に分けた方が良いのでしょうか?

ご回答よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

(1) AWS LambdaとDjangoを用いてRestfulAPIを作るのはなんらかのデメリットがあるから事例が少ないのでしょうか?

基本的に API Gateway + lambda の構成では Serverless Framework などのデプロイツールを組み合わせてプロジェクトを作成し、開発することが多いです。

URL のルーティングは API Gateway の設定パラメータで定義することになります。なので、質問者様がイメージなさるような、Webサーバーにアプリを置いてコードでルーティングを設定する、といったものとは少々イメージが異なります。

ルーティングの定義はコードではなくテンプレート (CloudFormation) の側でやってしまうことになるので、Django や Flask などの Webアプリフレームワークはここにはまらず、デプロイツールとの組み合わせによって効率化を図るのが良いでしょう...というのが答えになると思います。

※Zappa と呼ばれるデプロイツールがあり、これを使う場合ならば Django や Flask を書く要領でAPIを開発できます。よって、一応事例はゼロではないですが、私の把握する限り Zappa は主流の方法では全くないのでよほど強い動機がなければ Serverless Framework を使うのが良いと思います
※Serverless Framework の代替案としては、他に Terraform, AWS CDK などが挙げられます

(2) LambdaでRestfulAPIを作成する時に一つのプロジェクトにAPIをまとめるのか、それともマイクロサービスみたいにプロジェクトを別々に分けた方が良いのでしょうか?

Serverless Framework を使った開発であれば、1つのAPIサービス郡に対して1つのプロジェクト、という区切りが割と多いと思います。

その他

API Gateway + lambda の構成を採る場合は1つの path に対して lambda 1本、という対応関係になるよう構築するのが普通です。なので、別の回答者様が仰る「デプロイパッケージサイズ」の問題は、よほど追加パッケージを入れない限りは心配ないと思います。

RDSとの相性が悪い点も、今はかなり解消されましたが別の回答者様が仰る通りです。基本的にはDynamoDBをバックエンドとして想定することになると思いますが、それが開発工数に対してどうか、という点は検討が必要になるでしょう。

また、別の問題として「同時実行数」の制限は少々気にする必要があると思います同じリージョンの中で、同時に実行状態になれるlambda functionのインスタンス数は上限があります(東京リージョンなら1000/1minぐらいだったと思います)。リクエストのピークが高いシステムで採用されるのであれば、非同期なAPI、アーキテクチャ設計によって対処する必要が出てきます。

社内でひっそり使う程度のものであれば、同時実行数の制限は特に問題はないと思います。個人的にはそのユースケースでもサーバーレス構成はよく使うので、できれば使ってみていただきたいですし、良さを体感してほしいなとは思っています(開発環境さえあれば、Hello world的なAPIなら5分でデプロイまでできてしまいます)。
しかし、よくある Web app + RDB な構成とはちょっと勝手が違うことも事実なので、もし開発工数見合なご事情があってのご質問であれば、EC2やECSを使うのが確実かと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

これは私見ですが、単純にそれほどメリットがないからだと思います。

まず、Lambdaというサービスの特性について。
Lambdaはざっくりいうと
イベントドリブンにそれほど複雑じゃない処理を実行させる
ことが向いているサービスです。
一つのLambda関数にそんなに沢山のものを詰め込むのはあまり筋のいい方法ではありません。

AWS Lambda とは

また、Lambdaには様々な制限があります。
AWS Lambda の制限
引っかかる可能性が高いのは
呼び出しペイロードとデプロイパッケージサイズでしょう。

ペイロードは内容によるのでなんともですが、パッケージサイズについては

50 MB (zip 圧縮済み、直接アップロード)
250 MB (解凍、レイヤーを含む)

までのものしか上げられません。
ソースのサイズが膨れ上がってくるとここに引っかかる可能性はそれなりに高そうに思えます。

それであれば分割すれば、と思うかもしれませんが、せっかくフレームワークが全てまとめてくれている機能をわざわざ分割するのはフレームワークを使っている意味が薄くなってしまいます。
また、Lambdaを使ってAPIを作る場合API Gatewayが使えるので、それもわざわざフレームワークを使うことが少ない理由の一つかと思います。

それから、以前はLambdaとRDBMSの組み合わせはアンチパターンと言われていました。
なぜAWS LambdaとRDBMSの相性が悪いかを簡単に説明する
今はそうなっていた原因を解消する方法が記事中にも書いてありますが、これは結構最近の話です。
なのでこれも過去にそういった事例があまり見られなかった理由の一つでしょう。

djangoを使ったAPIを作りたいのならわざわざLambdaを使うより、普通にEC2インスタンス上に構成するか、ECSを使ってそこにコンテナとして載せるかのほうが筋がいいやり方だと思います。
Lambdaをわざわざ使うのは諸々の制限を考えるとデメリットのほうが大きいのかなと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.90%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る