外观
创建Web函数
约 1482 字大约 5 分钟
2025-05-21
您可以通过FuncX轻松构建Web应用和API服务。FuncX兼容多种流行语言的Web框架(如Java SpringBoot、Python Flask和Node.js Express等),因此您可以快速迁移现有应用。FuncX会为您管理底层计算资源,当通过浏览器或URL访问服务时,系统将根据需求自动启动和扩展实例;无访问时则自动销毁实例,您只需为实际资源使用量付费。
创建Web函数操作概述
通过本文您将了解如何使用FuncX部署一个Flask应用,整体流程如下:
- 开发及测试Web应用:在本地使用示例代码创建项目,编辑并测试API代码,确保API功能正常。如果您希望迁移现有应用,可以跳过此步骤。
- 生成代码包:安装必要的依赖库到本地的项目目录,然后将项目打包为一个ZIP文件,用于部署至FuncX。
- 上传并部署应用:配置函数创建参数,然后上传代码包,完成函数创建。
- 测试Web函数:调用Web函数以验证Flask应用的运行情况。
操作指引
您可以使用以下方式创建函数并部署代码。
- 控制台创建:适用于构建轻量级应用或快速验证等场景,您可以快速创建单个函数。 为了简化操作,本文将详细介绍使用控制台创建函数的步骤。
1. 开发及测试Web应用
- 请在本地打开一个新的命令行窗口,执行以下命令,将应用所需的Flask和tabulate依赖库安装到本地环境:
pip install Flask tabulate
- 创建一个名为code的文件夹,并在其中新建一个名为app.py的文件。将以下示例代码粘贴到该文件中。这段代码实现了一个简单的日历服务并封装成API接口,用户输入年月信息(如2025年1月),API将返回对应的日历表格。
app.py
import calendar
from flask import Flask, request
from tabulate import tabulate
import logging
import json
logger = logging.getLogger()
app = Flask(__name__)
@app.route("/", methods=["POST"])
def get_month_calendar():
# 获取请求ID并打印日志
requestId = request.headers.get('x-fc-request-id', '')
logger.info("FC Invoke Start RequestId: " + requestId)
# 获取请求内容并检查请求格式
data = json.loads(request.stream.read().decode('utf-8'))
if not ('year' in data and 'month' in data):
message = "Request must be in format like {'year': '1999', 'month': '12'}"
return message
# 获取日历表格
result = print_calendar(year=int(data['year']), month=int(data['month']))
# 返回前打印函数执行完成的日志
logger.info("FC Invoke End RequestId: " + requestId)
return result
def print_calendar(year, month):
# 获取指定年份和月份的日历矩阵
cal = calendar.monthcalendar(year, month)
# 将不属于该月的日期从0转为空字符
cal = list(map(lambda sublist: list(map(lambda x: '' if x == 0 else x, sublist)), cal))
# 创建表头
headers = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"]
# 使用tabulate打印日历表格
return tabulate(cal, headers=headers, tablefmt="grid", stralign='center', numalign='center')
if __name__ == "__main__":
app.run(host='0.0.0.0', port=9000)
- 执行python3 app.py命令以运行您创建的Flask应用。当输出为Running on http://127.0.0.1:9000,表示您的Flask应用成功启动,接下来可以使用cURL命令来测试应用。
python3 app.py
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:9000
* Running on http://47.100.XX.XX:9000
Press CTRL+C to quit
- 打开一个新的终端窗口,使用cURL发送示例请求。如果执行成功,您将得到一个日历表格。
curl -X POST http://127.0.0.1:9000 -d '{"year": "2000", "month": "1"}'
至此本地项目创建和测试完成。
2. 生成代码包
您将在本地构建一个适用于FuncX的代码包,代码包中需要包含以下内容:
- Web应用所需的项目文件。
- 如果应用所需的依赖库不在Web函数的运行环境中,则代码包也需要包含这些依赖库。关于Web函数运行环境的内置依赖库,请参见内置依赖项。
- 安装依赖:在Web应用的项目根目录,请您运行以下命令,将应用所需的依赖库(示例中为tabulate)安装到该目录。完成后,项目根目录下将包含项目文件以及依赖库。
pip install -t . tabulate
- 打包项目根目录下的所有文件。
Linux或MacOS系统
在项目根目录,执行zip code.zip -r ./*
。通过此步骤,您将打包项目文件及依赖库至一个ZIP文件,完成代码包的构建。
Windows系统
进入项目目录,选中所有文件,单击鼠标右键,选择打包为ZIP包。通过此步骤,您将打包项目文件及依赖库至一个ZIP文件,完成代码包的构建。
3. 创建Web函数并部署代码包
- 选择运行环境:打开FuncX控制台。然后在函数页面单击创建函数。请根据图示选择Python > Python 3.10,该运行时内置了Flask框架所需的依赖库。
- 部署代码包:请根据图示操作,上传您在上一步中得到的ZIP格式的代码包,并配置启动命令为python3 app.py,监听端口为9000。如果您是迁移现有的Flask应用,请根据实际的启动命令和端口修改配置(例如Flask的默认端口配置为5000)。
完成后单击创建,等待函数创建完成。
4. 测试函数
- 获取函数URL:在新创建函数的详情页面,复制地址。
- 测试函数:您可以使用cURL、Postman或任何HTTP客户端调用函数,验证Flask应用的功能。以cURL为例,请在命令行中执行以下示例命令(将地址替换为上一步复制的地址)。
curl https://******.funcx.run -d '{"year": "2025", "month": "1"}'