AWS Lambda + Flask 应用示例

前言

AWS Lambda 本身是一个以事件驱动的 Serverless 服务, 最简单的应用就是在入口函数中对接收到的事件/请求进行处理并返回响应. 对于像 Flask 这样的 Web 框架, 并不能直接在 Lambda 上提供服务, 不过我们可以借助 AWS Lambda Web Adapter 实现一个基于 Flask 框架的 Web 后端服务. Lambda 前面再放上一个 API Gateway 即可完成一套完整的 Serverless Web 应用服务.

  • 官方文档
    https://github.com/awslabs/aws-lambda-web-adapter/tree/main
  • 官方 Flask Demo
    https://github.com/awslabs/aws-lambda-web-adapter/tree/main/examples/flask-zip
  • 架构实例
    在这里插入图片描述

随便写个 Flask 应用

requirements.txt

Flask==3.0.3
gunicorn==22.0.0

app.py

from flask import Flask, render_templateapp = Flask(__name__)@app.get("/<username>")
def index(username):return render_template("index.html", username=username)

templates/index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>My Flask</title>
</head><body><h1>Hello {{username}}!</h1>
</body></html>

继续添加个 Shell 脚本用于 Lambda 启动 Flask 应用
run.sh

#!/bin/bashPATH=$PATH:$LAMBDA_TASK_ROOT/bin \PYTHONPATH=$PYTHONPATH:/opt/python:$LAMBDA_RUNTIME_DIR \exec python -m gunicorn -b=:$PORT -w=1 app:app

手动在本地跑一下测试 OK

gunicorn -b=:8080 -w=1 app:app

在这里插入图片描述

部署到 Lambda

先将本地开发好的 Flask 应用包含依赖一并打包成 ZIP 文件:

lpwm@Beijing:/mnt/c/Users/lpwm/Desktop/flask-demo$ mkdir package
lpwm@Beijing:/mnt/c/Users/lpwm/Desktop/flask-demo$ pip install --target ./package/ -r requirements.txt
lpwm@Beijing:/mnt/c/Users/lpwm/Desktop/flask-demo$ cd package/
lpwm@Beijing:/mnt/c/Users/lpwm/Desktop/flask-demo/package$ zip -r ../flask-demo.zip .
lpwm@Beijing:/mnt/c/Users/lpwm/Desktop/flask-demo/package$ cd ..
lpwm@Beijing:/mnt/c/Users/lpwm/Desktop/flask-demo$ zip -ur flask-demo.zip app.py run.sh templates/

打包完成后的 ZIP 压缩包内部长这样, 即所有的依赖会放在项目的根路径(app.py所在位置)中:
在这里插入图片描述

在 Lambda 控制台创建一个新的 Function, Runtime 选择 Python, Architecture 注意选择 x86_64, 目前中国区的 AWS Lambda Web Adapter 还不支持 arm64 架构.
在这里插入图片描述
创建好的 Function 点击 Upload from > .zip file 选择本地准备好的 ZIP 压缩包进行上传.
在这里插入图片描述
划重点 添加 Layer. 中国区 AWS 对应的 Layer ARN 目前还仅支持 x86_64 架构的环境

  • cn-north-1 (Beijing)
    x86_64: arn:aws-cn:lambda:cn-north-1:041581134020:layer:LambdaAdapterLayerX86:22
  • cn-northwest-1 (Ningxia)
    x86_64: arn:aws-cn:lambda:cn-northwest-1:069767869989:layer:LambdaAdapterLayerX86:22
    在这里插入图片描述
    在这里插入图片描述
    配置两个环境变量:

AWS_LAMBDA_EXEC_WRAPPER: /opt/bootstrap 固定内容, 用于初始化 AWS Lambda Web Adapter Layer
PORT: 8080 gunicorn 启动内部 Flask server 时监听的端口, 也是 AWS Lambda Web Adapter 用来访问内部 Web 服务的端口, 可以修改为其他.
在这里插入图片描述
修改 Function 的入口函数
在这里插入图片描述
在这里插入图片描述
测试 Function 没有报错:
在这里插入图片描述

配置 API Gateway

在 Function overview 界面点击 + Add trigger
在这里插入图片描述
建议使用 REST API
在这里插入图片描述
点击 API endpoint 访问测试
在这里插入图片描述
在这里插入图片描述

填坑

直接测试访问是成功了, 但是当修改 URL 中的 flask-demo 为其他内容时, 会出现 Missing Authentication Token 错误:
在这里插入图片描述
打开 API Gateway 控制台检查自动创建的 API Resources
在这里插入图片描述
通过 Lambda 添加 Trigger 创建的 API 会默认添加和 Lambda function 相同名称的一个路由, 接受 ANY 方法请求集成给 Lambda, 结合上面测试的情况来看, 后端的 Flask 会将这个 flask-demo 判定为是要接收的参数. 这种情况显然不是我们想要的.

手动将 /flask-demo 这个路由删掉, 我们手动重新创建
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试一下
在这里插入图片描述
在这里插入图片描述
重新 Deploy
在这里插入图片描述
在这里插入图片描述

再次从浏览器访问
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA、PyCharm等基于IntelliJ平台的IDE汉化方式

PyCharm 或者 IDEA 等编辑器是比较常用的&#xff0c;默认是英文界面&#xff0c;有些同学用着不方便&#xff0c;想要汉化版本的&#xff0c;但官方没有这个设置项&#xff0c;不过可以通过插件的方式进行设置。 方式1&#xff1a;插件安装 1、打开设置 File->Settings&a…

iptables(4)规则匹配条件

简介 前面我们已经介绍了iptables的基本原理,表、链,数据包处理流程。如何查询各种表的信息。还有基本的增、删、改、保存的基础操作。 经过前文介绍,我们已经能够熟练的管理规则了,但是我们只使用过一种匹配条件,就是将”源地址”作为匹配条件。那么这篇文章中,我们就来…

【Java】已解决java.net.MalformedURLException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.net.MalformedURLException异常 在Java的网络编程中&#xff0c;java.net.MalformedURLException是一个常见的异常&#xff0c;它通常表明URL&#xff08;统一资源定位符…

「五度易链」企业大数据API接口开放平台上线啦!

“五度易链”企业大数据API接口开放平台现已正式上线&#xff0c;旨在为广大企业、开发者及个人提供标准、安全、高效、便捷的企业数据API接口服务&#xff0c;帮您更轻松地构建应用、扩展功能&#xff0c;并基于用户应用场景提供专属接口定制服务&#xff0c;助力企业提升研发…

数据分析必备:一步步教你如何用matplotlib做数据可视化(8)

1、Matplotlib 条形图 条形图或条状图是一种图表或图形&#xff0c;它显示带有矩形条的分类数据&#xff0c;其高度或长度与它们所代表的值成比例。可以垂直或水平绘制条形。 条形图显示了离散类别之间的比较。图表的一个轴显示要比较的特定类别&#xff0c;另一个轴表示测量值…

Stable Diffusion WebUI 使用ControlNet:IP-Adapter保持生图的角色一致性

IP-Adapter-FaceID可以在保持人脸一致的条件下生成各种风格的图像。 下载 IP Adapter 需要的 Face ID 模型和 Lora 下载地址&#xff1a;https://huggingface.co/h94/IP-Adapter-FaceID/ 下载 ip-adapter-faceid-plusv2_sd15.bin 和 ip-adapter-faceid-plusv2_sd15_lora.saf…

【MySQL进阶之路 | 高级篇】常见索引(聚簇索引, 二级索引)

1. 常见索引概念 索引按照物理实现方式&#xff0c;可以分为两种&#xff0c;聚簇索引和非聚簇索引.我们也把非聚簇索引称为二级索引或辅助索引. (1). 聚簇索引 聚簇索引并不是一种单独的索引类型&#xff0c;而是一种数据存储方式(所有的数据记录都存储在了叶子节点)&#…

js如何使得四舍五入的百分比之和为100%

在JavaScript中&#xff0c;如果你想要确保一组四舍五入后的百分比之和严格等于100%&#xff0c;那么你不能直接对每个百分比进行四舍五入&#xff0c;因为四舍五入会引入误差。但是&#xff0c;你可以采用一种策略&#xff0c;即先对所有的百分比进行常规的四舍五入&#xff0…

C# WPF入门学习主线篇(二十九)—— 绑定到对象和集合

C# WPF入门学习主线篇&#xff08;二十九&#xff09;—— 绑定到对象和集合 在WPF中&#xff0c;数据绑定是开发动态和交互性用户界面的核心技术。通过数据绑定&#xff0c;我们可以轻松地将UI控件与后台的数据源连接起来&#xff0c;实现数据的自动更新和显示。在本篇文章中&…

wordpress 导航主题 有批量从源码导入功能

下载地址&#xff1a;wordpress导航主题 可以批量导入

ardupilot开发 --- Jetson Orin Nano 后篇

我拼命加速&#xff0c;但贫穷始终快我一步 0~1920. visp-d455&#xff1a;基于IBVS的Pixhawk无人机视觉伺服20.1 基础关于连接、通讯、UDP forward服务&#xff1a;一些相关的、有用的例程Linux C程序的gdb断点调试搭建仿真解决【testPixhawkDroneTakeoff.cpp例程能解锁但起飞…

WIFI6E中的MESH组网功能

什么是WIFI6E和MESH组网&#xff1f; WIFI 6E 是扩展到6GHz 频段的WIFI 6无线通信技术&#xff0c;而“WIFI 6E”中的“6”是指WIFI技术的“第6代”&#xff0c;“E”则是指使用新频段的标准的最新扩展。WIFI 6E通过增加6GHz频段&#xff0c;提供更高的带宽、更低的延迟和更大…

VMware虚拟机下载安装Windows Server 2016

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

从新手小白到红酒大咖:解锁红酒品鉴的终极秘籍,升级之路全攻略

在五彩斑斓的饮品世界中&#xff0c;红酒以其深邃的色泽、丰富的口感和悠久的历史&#xff0c;吸引了无数人的目光。对于红酒的初学者来说&#xff0c;从小白到品鉴师的道路或许充满了未知与挑战&#xff0c;但只要掌握了正确的知识和方法&#xff0c;就能够轻松踏入这个美妙的…

用群辉NAS打造影视墙(Jellyfin篇)

目录 1、安装Jellyfin媒体服务器 2、配置 (1)语言 (2)管理员账户 (3)添加媒体库 (4)指定元数据语言 (5)远程访问设置 (6)修改文件夹权限 (7)刷新电影 (8)启用硬件加速 3、PC浏览器访问 4、手机客户端 5、智能TV客户端 6、解决演员不能显示中文的问…

Jenkins+gitee流水线部署springboot项目

目录 前言 一、软件版本/仓库 二、准备工作 2.1 安装jdk 11 2.2 安装maven3.9.7 2.3 安装docker 2.4 docker部署jenkins容器 三、jenkins入门使用 3.1 新手入门 3.2 jenkins设置环境变量JDK、MAVEN、全局变量 3.2.1 jenkins页面 3.2.2 jenkins容器内部终端 3.2.3 全…

python-赏月

[题目描述] 在某个星球上看到的月亮大小有一个规律&#xff0c;月亮为每30天一个周期&#xff0c;在这30天的周期里&#xff0c;月亮的大小分别为 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1。 虽然天气很冷&#xff0c;但这个星球上的某个居民今…

MyBatis 源码分析--SqlSessionFactory

前言&#xff1a; 前文我们简单的回顾了 MyBatis 的基本概念&#xff0c;有聊到核心组件&#xff0c;工作流程等&#xff0c;本篇我们开始深入剖析 MyBatis 的核心源码&#xff0c;欢迎大家持续关注。 Mybatis 知识传送门 初识 MyBatis 【MyBatis 核心概念】 MyBatis 源码解…

钒能新材料综合回收利用,钒溶液净化富集工艺之离子交换法

钒电池储能产业作为典型的绿色低碳优势产业&#xff0c;是新型储能领域重要发展方向。钒电池储能具备大规模、长周期等优势&#xff0c;是储能领域的重要组成部分&#xff0c;将成为拓展电能利用、应对可再生能源随机波动、支撑可再生能源高占比电力系统的最佳技术途径之一。 …

openEuler 24.03 LTS - 华为欧拉开源版(华为 RHEL 兼容发行版)

openEuler 24.03 LTS - 华为欧拉开源版&#xff08;华为 RHEL 兼容发行版&#xff09; 华为红帽企业 Linux 兼容发行版 请访问原文链接&#xff1a;https://sysin.org/blog/openeuler/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…