什么是 AWS Chalice?

在当今的云计算领域,无服务器架构正迅速成为构建现代应用程序的流行方式。它允许开发者专注于编写业务逻辑,而无需管理底层服务器。AWS Chalice 正是为简化在 AWS 上构建无服务器应用而生的一个 Python 微框架。它由亚马逊云科技官方开发,旨在让开发者能够以最少的配置和样板代码,快速创建和部署由 AWS Lambda 和 Amazon API Gateway 驱动的应用程序。如果你熟悉 Flask 或 Bottle 这样的 Python Web 框架,那么你会对 Chalice 的语法感到亲切,因为它采用了类似的装饰器模式来定义路由和视图函数。

Chalice 的核心价值在于其“约定优于配置”的理念。它通过一个简单的命令行工具,自动化了从本地开发到云端部署的整个流程。你只需要编写 Python 代码,Chalice 便会为你处理诸如 IAM 角色、权限策略、API 网关配置等复杂的 AWS 资源管理任务。这使得开发者,尤其是那些刚接触无服务器架构的开发者,能够以极低的门槛将想法转化为可运行的、可扩展的 API 服务。

环境准备与 Chalice 安装

在开始我们的 AWS Chalice 教程之前,你需要确保本地开发环境已经就绪。首先,你需要一个 AWS 账户。如果你还没有,可以访问 AWS 官网进行注册。AWS 为新用户提供了一定额度的免费套餐,这对于学习和实验来说是完全足够的。

其次,确保你的系统上安装了 Python 3.7 或更高版本。你可以通过命令行输入 python3 --version 来检查。接下来,我们将使用 Python 的包管理工具 pip 来安装 Chalice。建议在虚拟环境中进行安装,以避免依赖冲突。你可以使用 venvconda 来创建虚拟环境。

安装步骤

打开你的终端或命令行工具,执行以下命令来安装 AWS Chalice:

pip install chalice

安装完成后,通过运行 chalice --version 来验证安装是否成功。这条命令会输出当前安装的 Chalice 版本号。同时,你还需要配置 AWS 命令行工具(AWS CLI),并设置好访问密钥和区域。你可以运行 aws configure 并按提示输入你的 AWS Access Key ID、Secret Access Key、默认区域(例如 us-west-2)和输出格式(通常为 json)。这些凭证将允许 Chalice 在部署时安全地与你的 AWS 账户进行交互。

创建你的第一个 Chalice 项目

一切准备就绪后,我们就可以动手创建第一个项目了。Chalice 通过一个简单的命令来初始化项目结构,这极大地简化了起步过程。

项目初始化

在选定的目录下,运行以下命令:

chalice new-project my-first-api

AWS Chalice 教程:从零部署你的第一个 Serverless API

这个命令会创建一个名为 my-first-api 的新目录,并在其中生成项目的基本文件。进入该目录:

cd my-first-api

你会看到类似如下的文件结构:

  • app.py:这是你的主要应用程序文件,你将在这里编写 API 路由和逻辑。
  • requirements.txt:Python 依赖文件,目前是空的,你可以在这里添加项目所需的第三方库。
  • .chalice/config.json:Chalice 的配置文件,用于设置部署阶段、环境变量、IAM 策略等。
  • .gitignore:预配置的 git 忽略文件。

现在,让我们打开核心的 app.py 文件。你会看到 Chalice 已经为你生成了一段示例代码:

from chalice import Chalice
app = Chalice(app_name='my-first-api')
@app.route('/')
def index():
    return {'hello': 'world'}

这段代码定义了一个最简单的 API:当访问根路径 / 时,它会返回一个 JSON 对象 {“hello”: “world”}。Chalice 应用的核心就是这个 app 实例,而 @app.route() 装饰器用于将 URL 路径映射到对应的 Python 函数。

本地开发与测试

在将应用部署到云端之前,在本地进行开发和测试是至关重要的。Chalice 提供了一个内置的本地开发服务器,让你可以像运行传统 Web 应用一样快速测试你的 API。

启动本地服务器

在项目根目录下,运行:

chalice local

命令执行后,终端会显示服务器正在本地主机的某个端口(默认是 8000)上运行。现在,你可以打开浏览器,访问 http://localhost:8000/,或者使用更强大的工具如 curl 进行测试:

curl http://localhost:8000/

AWS Chalice 教程:从零部署你的第一个 Serverless API

你应该会立即看到返回的 JSON 响应:{“hello”: “world”}。这个本地服务器支持热重载,这意味着当你修改 app.py 文件并保存后,服务器会自动重新加载,无需手动重启。你可以尝试修改返回的信息,刷新浏览器来观察变化。

添加更多路由

让我们扩展这个 API,添加一个处理 GET 和 POST 请求的端点。修改你的 app.py 文件:

@app.route(‘/users/{name}’, methods=[‘GET’])
def get_user(name):
    return {‘user’: name}

@app.route(‘/users’, methods=[‘POST’])
def create_user():
    request = app.current_request
    user_data = request.json_body
    return {‘created’: user_data}

第一个路由 /users/{name} 展示了一个路径参数 {name} 的用法,它会被作为参数传递给视图函数。第二个路由 /users 只接受 POST 方法,并通过 app.current_request 对象来访问请求的 JSON 正文。保存文件后,使用 curl 进行测试:

curl http://localhost:8000/users/Alice
curl -X POST http://localhost:8000/users -H “Content-Type: application/json” -d ‘{“username”:”Bob”}’

通过这种交互,你可以快速迭代你的 API 设计,确保逻辑正确后再进行部署。

部署到 AWS Lambda

当你在本地对 API 感到满意后,下一步就是将其部署到 AWS 云上,使其成为一个真正的、可通过互联网访问的无服务器 API。Chalice 让这个过程变得异常简单。

执行部署命令

在项目目录下,只需运行一个命令:

chalice deploy

这个命令会触发一系列自动化操作。首先,Chalice 会分析你的 app.py 和配置文件。然后,它会:

  • 为你创建一个 IAM 执行角色,并附加必要的权限策略(初始时是一个宽松的策略,生产环境需收紧)。
  • 将你的应用代码和依赖打包成一个 ZIP 文件。
  • 在 AWS Lambda 上创建一个函数,并上传该 ZIP 包。
  • 在 Amazon API Gateway 中配置相应的 REST API 资源、方法和阶段。
  • 将所有资源关联起来,形成一个完整的、可调用的端点。

部署完成后,终端会输出你的 API 的公共 URL,格式通常为:https://{api-id}.execute-api.{region}.amazonaws.com/api/。这个 URL 就是你的无服务器 API 的入口点。你可以立即使用 curl 或浏览器访问它,就像在本地测试一样,只不过现在它运行在 AWS 全球基础设施上。

理解部署产物

首次运行 chalice deploy 后,你会注意到项目目录下多了一个 .chalice/deployed 文件夹。里面保存了