Deploy FastAPI on AWS Lambda | In 9 MINUTES

Поділитися
Вставка
  • Опубліковано 8 лип 2023
  • FastAPI has taken the Python community by storm with its high performance, ease of use, and automatic validation. In this super-condensed tutorial, we’re marrying FastAPI with the mighty AWS Lambda for serverless bliss!
    🛠️ What You'll Learn 🛠️
    ✅ How to create a simple FastAPI application
    ✅ How to set up and configure AWS Lambda
    ✅ Deploying FastAPI on AWS Lambda
    ✅ Best practices and troubleshooting tips
    ⚡️Commands from the video:
    1. pip3 install -t dependencies -r requirements.txt
    2. (cd dependencies; zip ../aws_lambda_artifact.zip -r .)
    3. zip aws_lambda_artifact.zip -u main.py
    🎥 React + FastAPI: • How to build a React +...
    🎥 MongoDB + FastAPI: • Unlocking the Power of...
    🎥 MySQL + FastAPI: • How to build a FastAPI...
    🎥 PostgreSQL + FastAPI: • How to build a FastAPI...
    ===========================
    🎓 Courses can be found:
    FastAPI Beginner & Advanced: www.udemy.com/course/fastapi-...
    Learn Chatbot Development: www.udemy.com/course/the-comp...
    ===========================
    🛒 GEAR & RECOMMENDED BOOKS: kit.co/codingwithroby
    👨‍💻 Hi, I am Eric!👨‍💻
    Hey! I’m a seasoned developer and cloud enthusiast. I love sharing my knowledge and helping others to discover the exciting world of programming and cloud technologies. For more tutorials, tips, and tech magic, don’t forget to hit that subscribe button and ring the bell for notifications!
    🙏 Support The Channel 🙏
    If you found this tutorial helpful, please give it a thumbs up 👍, comment, and share it with your network 🌍
    #fastapi #lambda #python

КОМЕНТАРІ • 118

  • @tntmurphyfever
    @tntmurphyfever Місяць тому +3

    Really great tutorial. Thank you so much for sharing. FYI - to people who may be reading the comments - if you setup your FastApi with .env locally and are running with dotenv, you will need to change all those os.getenv() to ENV_VAR = os.environ['NAME'] in lambda.

    • @codingwithroby
      @codingwithroby  Місяць тому

      Thank you! Also I appreciate you dropping this to help other students 🙂

  • @santoshturamari6741
    @santoshturamari6741 4 дні тому +1

    Thanks, it is a great tutorial. In a short video, you explained the process nicely.

  • @Welcomevideo-je3rm
    @Welcomevideo-je3rm 3 дні тому +1

    Fantastic tutorial! I really appreciate your work.

  • @andresguzman8816
    @andresguzman8816 3 місяці тому +1

    nice video, man, really helpful

  • @user-wt8jk2bu3r
    @user-wt8jk2bu3r 7 місяців тому

    great video , very high quality also

    • @codingwithroby
      @codingwithroby  7 місяців тому

      Much appreciated! I am glad you were able to get value 🙂

  • @6Diego1Diego9
    @6Diego1Diego9 Місяць тому +1

    This actually worked, Gemini was giving me wrong information.

  • @edwardwong654
    @edwardwong654 2 місяці тому +5

    The Lambda function worked, but when I uploaded the zip file, I got an "internal server error" which I traced to "errorMessage": "Unable to import module 'main': No module named 'pydantic_core._pydantic_core' ". Any ideas?

    • @sbussisodube1084
      @sbussisodube1084 Місяць тому

      had the same issue. I retried the video and this time I removed all dependencies in the requirements.txt file besides just fasapi and mangum after pip freeze > requirements.txt and it worked. video mark 1:04

    • @sbussisodube1084
      @sbussisodube1084 Місяць тому

      package issue

  • @sulaiman.micheal
    @sulaiman.micheal 11 місяців тому

    Thanks. I appreciate this.

  • @Loco-Poco
    @Loco-Poco 4 місяці тому +5

    I am getting "errorMessage": "Unable to import module 'main': No module named 'pydantic_core._pydantic_core'",

    • @vini1520
      @vini1520 3 місяці тому

      pip3 install -r requirements.txt --platform manylinux2014_x86_64 --target=dependencies --implementation cp --python-version 3.10 --only-binary=:all: --upgrade openai

    • @vini1520
      @vini1520 3 місяці тому

      try to use this command 🙂

    • @deveshmishra6119
      @deveshmishra6119 3 місяці тому

      Hey I'm getting the same problem how you resolved it?

    • @simranverma7480
      @simranverma7480 3 місяці тому

      @@deveshmishra6119 how can i resolve

    • @marcoviera7120
      @marcoviera7120 2 місяці тому

      Include architecture in your pip install commands. e.g: pip install \
      --platform manylinux2014_x86_64 \
      --target=my-lambda-function \
      --implementation cp \
      --python-version 3.9 \
      --only-binary=:all: --upgrade \
      pandas

  • @zeki7540
    @zeki7540 Рік тому +1

    That's great!

  • @user-ju9fj1ob5v
    @user-ju9fj1ob5v 10 місяців тому +2

    AMAZING tutorial! 👏

    • @codingwithroby
      @codingwithroby  10 місяців тому

      Glad you enjoyed it! Woot woot!

    • @user-ju9fj1ob5v
      @user-ju9fj1ob5v 10 місяців тому

      I would like to host the frontend files on an S3 bucket, but I'm not finding any tips on how to make this work. Would you have any material on that?@@codingwithroby

    • @user-ju9fj1ob5v
      @user-ju9fj1ob5v 10 місяців тому

      Well, just as I wrote the last comment I thought that I can just specify the S3 URL as path for the templates and it will load as if it were on the same local as the app (that in my case will be in lambda)

  • @EdwardSapp
    @EdwardSapp 5 місяців тому +7

    What if you have multiple routers added to the main app and each router has several endpoints. Does this still work?

    • @akcelero
      @akcelero 3 місяці тому

      as far as I was able to check - yes works without any problem

  • @HashtagTiluda
    @HashtagTiluda 7 місяців тому +1

    This is amazing! Was wondering, what if my FastAPI app has multiple folders and files? How should I create the artifact in that case?

    • @codingwithroby
      @codingwithroby  7 місяців тому +1

      You should still be able to do the exact same thing, but you will want to add the other files along with main.

  • @FatimaHABIB-jm4ji
    @FatimaHABIB-jm4ji 8 місяців тому

    Thanks Eric for this great tutorial ;
    I have a question though; I could not install zip " × python setup.py egg_info did not run successfully.
    │ exit code: 1
    ╰─> [9 lines of output]" I tried every possible solution proposed online;
    anyone have faced this error while installing this package ?
    Thanks

  • @shalineesharma8704
    @shalineesharma8704 5 місяців тому +1

    Wow 🤩

  • @eugeniosp3
    @eugeniosp3 10 місяців тому +2

    Easy easy sub. Nice job roby

    • @codingwithroby
      @codingwithroby  10 місяців тому +1

      Woot woot, thanks for the kind words 🙂

    • @eugeniosp3
      @eugeniosp3 10 місяців тому

      @@codingwithroby do you have any info on how to access this from a client side call? Say I want to make a get request with a json payload how would i access this? Is it the function URL? Also what type of auth would it be?

  • @esgosar
    @esgosar 7 місяців тому +1

    Thanks!

  • @willk7471
    @willk7471 9 місяців тому +1

    Nice video. Is this something that will interact with a database as well?

    • @codingwithroby
      @codingwithroby  9 місяців тому +1

      Of course! You can do this exact same thing if you are using SQLite but if you are using a different type of database you just need to make sure all the connections are setup beforehand. If you need to see how to connect FastAPI to databases, I have multiple videos for different database you may find helpful 🙂

  • @adamrichic8753
    @adamrichic8753 8 місяців тому

    Very well, thanks a lot

  • @TheChihuhua
    @TheChihuhua Місяць тому +1

    Nice!

  • @rohanalmighty
    @rohanalmighty 12 днів тому

    Great Video
    I'd recommend using the FastAPI version that is shown in this video, else things might not work, didn't work in my case.
    How do I set restrictions so that nobody can hit my api too many times and I get a bill sent by AWS.

    • @codingwithroby
      @codingwithroby  12 днів тому

      If you want to add it in the code you can implement Rate Limiting. One of the most popular libraries for this is: pypi.org/project/ratelimiter/

  • @excuseop9339
    @excuseop9339 8 місяців тому

    what if we have another folder . Do i need add folder using this "zip aws_lambda_artifact.zip -u folder_name"

  • @ragefurious5650
    @ragefurious5650 11 місяців тому

    this is dope but is there any way i could get the windows variation of some of these console lines?

    • @codingwithroby
      @codingwithroby  11 місяців тому

      Do the commands not work for Windows?

    • @6Diego1Diego9
      @6Diego1Diego9 Місяць тому

      they should work in Powershell

  • @user-ni5tt8wh2b
    @user-ni5tt8wh2b 4 місяці тому

    did you mean to delete `uvicorn` from the generated `requirements.txt` file? that came w/ the install of fastapi?

    • @user-ni5tt8wh2b
      @user-ni5tt8wh2b 4 місяці тому

      around 1'30" into the video

    • @vini1520
      @vini1520 3 місяці тому

      @@user-ni5tt8wh2b Below are my requirements
      fastapi==0.110.0
      mangum==0.17.0

  • @jdrcreations1947
    @jdrcreations1947 21 день тому

    I get internal server error despite changing my handler details. What could be the reason

  • @KTMedia-hx5gg
    @KTMedia-hx5gg 10 місяців тому

    the second command doesn't work in my end. It is giving 1. Missing closing ) in expression and 2. Unexpected token ) in expression or statement

    • @codingwithroby
      @codingwithroby  10 місяців тому

      Hmm, I just retried it and it is working correctly. Are you sure there is no typos?

    • @KTMedia-hx5gg
      @KTMedia-hx5gg 10 місяців тому +1

      @@codingwithroby Yeah, I noticed it afterwards that I was using powerhell while you were in zsh. I had to use an alternative to that command for powershell

    • @codingwithroby
      @codingwithroby  9 місяців тому +2

      Do you mind sharing what the alternative command was?

    • @willhg
      @willhg 3 місяці тому

      @@codingwithroby this is the command for VSCode powershell terminal : "Compress-Archive -Path . -destinationpath ../aws_lambda_artifact.zip"

  • @antonioclevenielsonvieirad2173
    @antonioclevenielsonvieirad2173 3 місяці тому

    hello my friend
    what theme are you using in vscode?

    • @codingwithroby
      @codingwithroby  3 місяці тому

      One Dark Pro - it is an theme that you need download!

  • @thanhquachable
    @thanhquachable 9 місяців тому +1

    what if we update our code ? we create and upload a new zip file?

    • @codingwithroby
      @codingwithroby  9 місяців тому

      Yes, in this video I didn't go over how to setup lambda deployments automatically. If you want to do this I'd look at GitHub actions to communicate to your lambda

  • @thonnatigopi
    @thonnatigopi 13 днів тому +1

    Kindly make a s3 uploads and trigger using lambda and fast api bro

    • @codingwithroby
      @codingwithroby  13 днів тому +1

      I will add it to my backlog 🙂

    • @thonnatigopi
      @thonnatigopi 13 днів тому +1

      @@codingwithroby and also how to use custom packages like ffmpeg for audio conversation and others , to trigger lambda and use GPU , inhouse models like whisper model how to use them to trigger pls kindly make a video I'm eagerly waiting

    • @thonnatigopi
      @thonnatigopi 13 днів тому

      Use everything in vscode because cloud developers can't give credentials to developers in company, so kindly make a video for python automatic project in vscode and if possible dockerize integration deploy and aws lambda and Sam

  • @JarvisMillan
    @JarvisMillan 10 місяців тому +2

    how about larger files? i think you cant upload larger packaged .zip files.

    • @codingwithroby
      @codingwithroby  10 місяців тому +2

      For larger files you will probably not want to do a lambda, but instead use EC2 which I will eventually make a video on

    • @tamaspleszkan6100
      @tamaspleszkan6100 8 місяців тому +2

      Use lambda layers for dependencies. That way you also get the option to edit the code in the editor on the lambda page. If your lambda gets to the point where without dependencies it exceeds the lambda limit, you are packing too much stuff into it.

    • @moverecursus1337
      @moverecursus1337 2 місяці тому

      Mount a EFS on a EC2, pip install --target with target to the EFS, delete ec2 instance, create a lambda with a mounting to the EFS and make PYTHONPATH as the local on efs you installed your dependencies.
      I am doing this for a segmentation model inference application

  • @amarnathreddysurapureddy9111
    @amarnathreddysurapureddy9111 7 місяців тому +1

    if i import some files from another file is it zip every thing

  • @jorgesisco981
    @jorgesisco981 5 місяців тому

    Great video!, quick question: will I be able to use all the endpoints without setting them up in the api gateway?

    • @johnhorton3727
      @johnhorton3727 5 місяців тому +1

      You can proxy all routes/methods to the lambda using {proxy+}

  • @hemantsah8567
    @hemantsah8567 7 місяців тому

    Just curious. Knowing the functionality of Lambda that it is serverless(instances are spawned on request), should I still choose fastapi with Mangum or go with Chalice framework?

    • @codingwithroby
      @codingwithroby  7 місяців тому +1

      I see nothing wrong with using FastAPI with Mangum

  • @ptk6909
    @ptk6909 8 місяців тому

    This deployment on aws in this video free or not ?
    and also can open /docs or swagger ?

    • @codingwithroby
      @codingwithroby  8 місяців тому

      Yes (part of free tier) and yes 🙂

    • @ptk6909
      @ptk6909 8 місяців тому

      @@codingwithroby I follow your video until deploy successful and open /docs swagger also successful. api can use complete But except api method post api must have parameter/data{} before excute after I input and press excute result error 504 ( This swagger from my code on local have no any problems )

  • @sachinsharma4539
    @sachinsharma4539 6 місяців тому +3

    i followed your video and deploy code zip to lambda when i test i am getting error: "errorMessage": "Unable to import module 'main': No module named 'pydantic_core'"

    • @KnightDark1233
      @KnightDark1233 6 місяців тому +2

      I'm having the same issue

    • @zth-ue5oy
      @zth-ue5oy 5 місяців тому +2

      did you solve this problem? I have the same issue

    • @zth-ue5oy
      @zth-ue5oy 5 місяців тому

      did you solve this problem? I have the same issue@@KnightDark1233

    • @instructabuild
      @instructabuild 5 місяців тому

      I found a workaround to this issue, see my post from Feb 9, 2024 in comments. Hope it helps someone else too...

  • @athulkrishnadiyil1735
    @athulkrishnadiyil1735 9 місяців тому +1

    mangum seems like no longer maitained ....?

    • @codingwithroby
      @codingwithroby  9 місяців тому

      It has not had a PR in awhile, but it is still widely used.

  • @kzzz3
    @kzzz3 8 місяців тому +1

    mangum seems abandoned. Last commit was made almost a year ago

    • @codingwithroby
      @codingwithroby  8 місяців тому

      Yeah, but Mangum is still the best option for deploying FastAPI on lambdas. When a better handler comes out you can wrap app in it

  • @amarnathreddysurapureddy9111
    @amarnathreddysurapureddy9111 7 місяців тому +2

    I am getting Internal Server Error After followed,

  • @pushkarkathayat7893
    @pushkarkathayat7893 4 місяці тому

    The only issue is their cold start

  • @SajanKumar-mx2jg
    @SajanKumar-mx2jg Місяць тому

    Magnum is not maintained so I don't we should use it.

    • @codingwithroby
      @codingwithroby  Місяць тому

      As of right now though it is a wrapper that doesn"t need maintained (as of now).

  • @CesarAugustoPerezTafur
    @CesarAugustoPerezTafur 10 місяців тому

    Hi, How are you? first thank you for the tutorial, second, i have troblue when test de app in aws, it still show Internal server Error message, although i edited Handler in console. i wrote main.handler. the only ting that i made differenet was replace this command lines 2. (cd dependencies; zip ../aws_lambda_artifact.zip -r .)
    3. zip aws_lambda_artifact.zip -u main.py for
    Compress-Archive dependencies/*.* lambda_function2.zip and Compress-Archive main.py -update aws_lambda_artifact.zip
    Could you help me?

    • @SoulCTO
      @SoulCTO 10 місяців тому +2

      You need to debug to see what is happening. Maybe it is some incompatibility between lib version supported by aws lambda. What you can try to do is in your requirements.txt, force the version of fast api to 0.99.0 (fastapi==0.99.0) and remove the version of pydantic and pydantic core (so it will get the correct one. When you run locally with uvicorn you will find the right version). This happened to me in another project and might fix the issue.

    • @codingwithroby
      @codingwithroby  10 місяців тому +4

      For the time being, I found the best FastAPI version to be 0.99.0

    • @CesarAugustoPerezTafur
      @CesarAugustoPerezTafur 9 місяців тому

      Thanks all for the answer. I solve the problem changing the py lance versión, i mafe a video in spanish with the solution ua-cam.com/video/FUsJmLO2G4g/v-deo.htmlsi=z-mQPlbBjFde_3g0

    • @CesarAugustoPerezTafur
      @CesarAugustoPerezTafur 9 місяців тому

      @@codingwithroby hi,
      I deployed my api with mysql in lambda but not all of them work, only the delete one and the query by user_id work. vbx54teybuuh3rvjyss67x3j740mnyft.lambda-url.us-east-2.on.aws/docs. could you help me

    • @honchan83
      @honchan83 8 місяців тому +1

      @@SoulCTO Thank you so much for leaving this comment, I have spent days to figure out what goes wrong. AWS won't give us that much hints to fix the problem. I did not realise it is the fastapi version that making things to fail.

  • @hmp3854
    @hmp3854 8 місяців тому

    Thanks!