AWS SAM 简介
AWS SAM是Serverless Application Model 的缩写,指无服务器应用程序模型,它是一种可以用来在 AWS 上构建无服务器应用程序的开源框架。它提供了一种简略语法,以便您使用简单的 YAML 模板来描述应用程序(Lambda 函数、API 终端节点、DynamoDB 表和其他资源)。在部署期间,SAM 将对简略 SAM 语法进行转换并扩展为 AWS CloudFormation 模板。然后,CloudFormation 将会以可靠、可重复的方式预置资源。作为AWS官方的开源框架,能够让客户使用最新的serverless技术来构建自己的无服务器后端服务。
使用AWS SAM有如下好处
- 深度集成了AWS在Serverless领域的各个产品,为开发者提高最新的技术,通过YAML描述项目结构大大减轻了手动管理大量lambda的人力负担或者人工编写AWS CloudFormation的难度。
- 通过SAM,用户可以使用命令轻松完成本地开发和测试,在开发完成后帮助客户快速部署到AWS云上,免去复杂的运维工作
- 支持AWS Lambda所能运行的全部的语言,比如Python3、Nodejs,Java,Go等。详情请见Supported Runtimes
安装AWS SAM
安装AWS SAM前,我们需要满足前提条件,简而言之就是注册一个AWS Account或者有一个AWS IAM账户,安装好AWS Cli2并配置好AWS凭证。
我们可以按照Installing the AWS SAM CLI来根据自己的操作系统的类型来安装。
以我的电脑(Ubuntu 22.04)为例,我们可以直接下载安装包并进行安装
# 解压
unzip aws-sam-cli-linux-x86_64.zip
# 安装
sudo ./install
# 检查安装效果
sam --version
使用SAM编写第一个AWS Lambda项目
我们以Tutorial: Deploying a Hello World application为例子,通过SAM编排AWS Lambda实现一个hello world级别的API demo.
我们可以执行sam init
创建项目,并选择python作为编程语言
我们可以用vs code或者pycharm打开项目,并执行sam build
进行构建
构建完成后,我们可以执行sam local start-api
在本地进行运行,注意本地运行需要安装docker
本地运行后会产生一个本地链接,地址为http://127.0.0.1:3000/hello,当我们访问这个连接即可触发代码的执行并返回结果
当我们本地调试完成后,可以运行sam deploy
进行发布,sam这时会为我们自动部署项目到AWS上
部署完成后,会将互联网可以访问的API输出到命令框,方便大家访问
我们使用浏览器访问这个连接,即可得到lamdba被触发运行后的结果
项目结构
使用sam创建的项目有固定的结构,具体如下
(venv) thinktik@thinkdesk:~/workspace/hello-world$ tree
.
├── events
│ └── event.json
├── hello_world
│ ├── app.py
│ ├── __init__.py
│ └── requirements.txt
├── __init__.py
├── README.md
├── samconfig.toml
├── template.yaml
└── tests
├── __init__.py
├── integration
│ ├── __init__.py
│ └── test_api_gateway.py
├── requirements.txt
└── unit
├── __init__.py
└── test_handler.py
5 directories, 14 files
(venv) thinktik@thinkdesk:~/workspace/hello-world$
需要我们重点了解的是:
- hello_world: 您的代码目录,自己编写的代码都放在这里(可以在template.yaml里进行路径修改)
- hello_world/app.py: 包含您的 Lambda 函数代码。
- hello_world/requirements.txt:包含您的 Lambda 函数所需的任何Python依赖关系。
- samconfig.toml:您的应用程序的配置文件,用于存储 AWS SAM CLI 使用的默认参数。
- template.yaml:包含您的应用程序基础架构代码的AWS SAM模板。
参考
- AWS 无服务器应用程序模型 (SAM) 命令行界面介绍
- 几种高效管理AWS的方式以及AWS开发环境配置