Python无服务器架构实战:手把手教你部署第一个Serverless应用

Python无服务器架构实战:手把手教你部署第一个Serverless应用 一

文章目录CloseOpen

你是不是也遇到过这种情况:想做个小工具或API服务,却被服务器配置、运维、扩容这些事搞得头大?去年我帮一个做自媒体的朋友搭过一个“每日热点聚合”工具,他本来想租台云服务器,结果光配置环境、装依赖就花了两天,每月还得掏好几百服务器费用。后来我 他试试无服务器架构,用Python写核心逻辑,部署到云函数上,结果不到两小时就跑通了,现在每月费用连50块都不到——这就是Python+无服务器架构的魅力:让你把精力全放在代码上,不用再操心服务器那摊子事。

先搞懂:“无服务器”到底是个啥?

你可能会说:“没服务器怎么跑代码?”其实“无服务器”(Serverless)不是真的没有服务器,而是云厂商帮你把服务器藏起来了。你只需要写代码,然后告诉云平台“我的代码要做什么”,剩下的服务器维护、扩容、灾备,全由平台搞定。打个比方,传统部署像你自己买锅买菜做饭,Serverless就像点外卖——你只管吃(写代码),不用管厨房(服务器)。

而Python和Serverless简直是天生一对。你想想,Python语法简洁,几行代码就能实现复杂功能;生态丰富,不管是数据处理(Pandas)、API开发(Flask/FastAPI)还是爬虫(Requests),都有现成的库。更重要的是,几乎所有云厂商(AWS、阿里云、腾讯云)都把Python作为Serverless的“一等公民”,提供专门的运行时环境和优化工具。就像AWS Lambda文档里说的,Python是目前用户最活跃的运行时之一,社区支持和资源都非常丰富(AWS Lambda Python开发指南)。

这3个优势,让我再也不想碰传统服务器

我自己从2020年开始用Serverless部署Python应用,这几年踩过不少坑,但也实实在在感受到了它的好处,尤其是对中小项目和个人开发者来说:

  • 成本几乎“按滴付费”:传统服务器不管你用不用,都得按天/月付费;Serverless是“用多少算多少”,比如阿里云函数计算,每月有100万次免费调用额度,每次调用按毫秒计费。像我朋友那个热点聚合工具,每天跑3次,每次调用2秒,算下来一年费用可能就一顿饭钱。
  • 完全不用管“服务器那摊子事”:以前我维护服务器时,每周都得登录检查内存占用、打安全补丁,生怕被攻击。现在用Serverless,代码写完点“部署”就完事,就算突然有10万用户访问,云平台会自动扩容到几十上百个实例,访问量下来又会缩回去,全程不用你动手。
  • 开发到上线快到离谱:上个月我帮同事写了个“Excel数据自动校验”工具,从写代码到部署上线只用了40分钟——因为不用配服务器、不用装Nginx、不用买域名备案(用云平台自带的API网关就能直接访问),写完Python函数,配置个触发器,直接就能用。
  • 传统部署VS Serverless部署,差别到底有多大?

    为了让你更直观感受,我整理了一个对比表,是我之前帮客户评估方案时做的,你可以看看哪种更适合你:

    对比维度 传统服务器部署(EC2/云服务器) Python Serverless部署(Lambda/函数计算)
    初始配置 需手动装系统、依赖、配置网络,新手至少1天 直接选Python运行时,3分钟配好基础环境
    成本 按服务器规格付费,闲置时也收费(如2核4G约300元/月) 按调用次数+运行时间付费,低流量场景几乎免费(100万次调用/月内免费)
    运维工作量 需定期更新系统、监控负载、处理故障,每周至少2小时 零运维,云厂商自动处理服务器故障和扩容
    扩缩容能力 需手动调整服务器规格或配置负载均衡,响应慢 自动扩缩容,从1次/秒到10万次/秒无缝应对

    30分钟从零部署你的第一个Python Serverless应用

    说了这么多好处,你肯定想动手试试了吧?接下来我就带你用阿里云函数计算(国内访问方便,免费额度也足)部署一个“天气查询API”——输入城市名,返回实时天气。全程30分钟,跟着做就能跑通,就算你是第一次接触Serverless也不用怕。

    第一步:准备工具和账号(5分钟)

    你需要先准备这3样东西:

  • 一个阿里云账号(注册地址),实名认证后能领180天免费额度,足够我们用了;
  • 本地电脑装Python 3.8+(官网下载就行,记得勾选“Add Python to PATH”);
  • 安装阿里云CLI工具(在命令行输pip install aliyun-fc2,这是函数计算的Python SDK,后面部署要用)。
  • 我第一次用的时候,因为没装CLI工具,直接在网页上写代码,结果复制粘贴时格式乱了,折腾了好久。所以 你现在就把CLI装好,后面部署会更顺利。

    第二步:写30行Python代码实现天气查询(10分钟)

    我们的API功能很简单:接收GET请求,参数是city(城市名),返回该城市的实时温度和天气状况。核心逻辑用requests库调用免费天气API(比如“和风天气”的免费接口,注册就能领key),然后用JSON返回结果。

    先新建一个文件夹(比如weather-api),里面创建两个文件:

  • index.py:存放Python代码
  • requirements.txt:声明依赖(只有requests
  • index.py代码

    (直接复制过去,记得把YOUR_API_KEY换成你的和风天气key):

    import requests
    

    import json

    def handler(event, context):

    # 解析请求参数(阿里云函数计算会把HTTP请求信息放到event里)

    event_dict = json.loads(event)

    city = event_dict.get('queryParameters', {}).get('city', '北京') # 默认查北京

    # 调用和风天气API获取数据(免费接口文档:https://dev.qweather.com/docs/api/weather/now/)

    weather_url = f"https://devapi.qweather.com/v7/weather/now?location={city}&key=YOUR_API_KEY"

    response = requests.get(weather_url)

    weather_data = response.json()

    # 提取需要的信息(温度、天气状况)

    if weather_data.get('code') == '200':

    now = weather_data['now']

    result = {

    "city": city,

    "temperature": now['temp'] + "℃",

    "weather": now['text'],

    "message": "查询成功"

    }

    else:

    result = {"message": "查询失败,可能城市名错误"}

    # 返回JSON格式响应(阿里云要求返回特定格式,包含statusCode和body)

    return {

    "statusCode": 200,

    "headers": {"Content-Type": "application/json"},

    "body": json.dumps(result, ensure_ascii=False)

    }

    requirements.txt

    就一行:

    requests==2.31.0

    这里有个小细节:阿里云函数计算的handler函数必须接收eventcontext两个参数,event里包含请求信息(比如URL参数、请求体),context是运行时上下文(不用管)。我第一次写的时候忘了解析event,直接用city = event['city'],结果一直报错“KeyError”,后来看文档才知道要先json.loads(event),这个坑你可别踩。

    第二步:配置触发器(让API能被外部访问)

    代码写好了,怎么让别人通过URL访问呢?这就需要“触发器”——告诉云平台“当有人访问某个URL时,就执行我的代码”。

  • 登录阿里云函数计算控制台(控制台地址),左上角选“华东2(上海)”地域(延迟低);
  • 新建“服务”(相当于项目文件夹),名字随便填(比如my-first-serverless),其他默认;
  • 服务里新建“函数”,选“从零开始创建”,运行时选“Python 3.9”,函数名称填weather-api
  • 代码上传:选“通过本地文件上传”,把刚才的index.pyrequirements.txt拖进去;
  • 配置触发器:点“触发器配置”→“新建触发器”,类型选“API网关触发器”,认证方式选“匿名访问”(方便测试),路径填/weather,方法选GET
  • 这里要注意:API网关路径别用特殊字符,比如/weather就很好记。我之前试过用/get_weather_info,结果测试时总记错路径,后来改成短路径就顺手多了。

    第三步:部署、测试和调试(5分钟)

    配置完触发器,直接点“部署”按钮,等10秒左右就部署完成了。这时候API网关会生成一个访问URL,比如https://xxxxxx.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/my-first-serverless/weather-api/weather/

    现在打开浏览器,在URL后面加?city=上海,比如https://xxxxxx.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/my-first-serverless/weather-api/weather/?city=上海,应该就能看到返回结果了:

    {"city": "上海", "temperature": "25℃", "weather": "多云", "message": "查询成功"}

    如果没成功,别慌,先看“日志”。在函数详情页点“日志查询”,能看到代码运行的每一步输出。比如我第一次测试时返回“查询失败”,看日志发现是和风天气API的key填错了,重新换key就好了。

    最后:3个让你的Serverless应用更稳定的小技巧

    部署成功只是开始,想让应用跑得更稳,这几个细节你得注意:

  • 依赖别贪多:Python的requests库虽然好用,但体积不小。如果你的代码很简单,试试用urllib(Python自带库)替代,能减少包体积,加快冷启动速度(冷启动就是函数第一次运行时的启动时间,包越小越快)。
  • 日志多打一点:在关键步骤(比如API调用前后)用print输出日志,比如print(f"调用天气API返回:{weather_data}"),出问题时查日志会很方便。
  • 免费额度用满:阿里云函数计算每月有100万次免费调用+400,000 GB秒的计算资源,个人项目基本够用。如果流量大了,记得在控制台设置“资源使用上限”,避免意外扣费。
  • 按这些步骤做完,你的第一个Python Serverless应用应该已经跑起来了!这个天气API虽然简单,但涵盖了Serverless开发的核心流程:写代码→配触发器→测试→调试。你可以试着扩展功能,比如加上“ 3天预报”,或者把结果存到云数据库里——Serverless的玩法其实很多。

    如果你按步骤做的时候遇到问题,或者成功跑通了,都欢迎回来告诉我!说不定下次我们可以一起开发更复杂的应用呢~


    你写Python代码的时候肯定离不开各种第三方库吧?比如调API要用requests,处理数据可能用Pandas,这些库在本地跑没问题,部署到Serverless环境时就得特别注意依赖管理了。最基础的办法是在项目根目录建个requirements.txt文件,把你用到的库和版本号都写进去,比如你用了requests 2.31.0版本,就直接写“requests==2.31.0”。这样云平台部署的时候会自动读取这个文件,帮你把依赖都装好。我之前有个项目没指定版本号,只写了“requests”,结果云平台装了最新版,里面有个方法名变了,代码直接报错,后来加上版本号“==2.31.0”才解决——所以版本号最好写死,避免不同版本带来的兼容性问题。

    不过要是你用的库带C扩展,比如Pandas、NumPy这些科学计算库,光靠requirements.txt可能就行不通了。因为这些库安装时需要编译C代码,而Serverless环境通常没有编译工具,直接装会失败。这时候就得用“层”(Layer)功能,简单说就是把编译好的依赖包提前打包成“层”,然后让你的函数引用这个层。比如阿里云有现成的“Python科学计算层”,里面已经预装了Pandas、NumPy这些常用库,你直接在函数配置里勾选这个层就行,省得自己打包。我之前帮朋友部署一个数据处理函数,用了Pandas,试了好几次requirements.txt都失败,后来发现阿里云有公共层,勾上之后一秒就跑通了。所以如果可以的话,尽量优先选纯Python库,比如用requests(纯Python)而不是某些带C扩展的HTTP库,能少踩很多坑。


    Python无服务器架构适合开发哪些类型的应用?

    适合轻量化、事件驱动型应用,如API接口、定时任务(如数据同步)、文件处理(如图片压缩)、小工具(如天气查询)等。不适合长时间运行(超过15分钟)或需要持续连接的应用(如实时聊天),因为多数云厂商对单次函数执行时间有限制(如阿里云函数计算默认超时时间为300秒)。

    Serverless应用冷启动会影响使用体验吗?如何缓解?

    冷启动(首次调用或闲置后启动)可能导致1-3秒延迟,对实时性要求高的场景有影响。缓解方法包括:选择更小的依赖包(如用urllib替代requests减少加载时间)、配置云厂商的“预置并发”功能(提前预热实例)、避免频繁更新代码(每次更新可能触发冷启动)。多数个人项目和中小流量场景下,冷启动影响可忽略。

    部署Python Serverless应用时,如何处理第三方库依赖?

    需在项目根目录创建requirements.txt文件,列出依赖包(如requests==2.31.0),云平台会自动安装。若依赖包含C扩展(如部分数据分析库),需通过“层”(Layer)功能提前打包编译好的依赖,或使用云厂商提供的公共层(如阿里云的Python科学计算层)。 优先选择纯Python库,减少部署复杂度。

    如何监控Python Serverless应用的运行状态和费用?

    云厂商提供完善的监控工具:阿里云函数计算可在控制台查看“调用次数”“执行时间”“错误率”等指标,日志可通过“日志服务SLS”实时查看;费用方面,可设置“资源使用上限”(如每月调用次数不超过100万次),并开通消费预警(短信/邮件通知)。个人项目可利用免费额度(如阿里云每月100万次免费调用+400GB秒计算资源),基本无需额外付费。

    0
    显示验证码
    没有账号?注册  忘记密码?