测试与部署您的 API

在 AWS 上开发应用

Ricardo Sueiras

Principal Technologist

开发者的基础设施即代码(IaC)

 

iac

  • 云原生应用用 IaC 部署。
  • 在配置文件中定义云资源。
  • 避免在 AWS 控制台手动操作(clickops)。
在 AWS 上开发应用

AWS CloudFormation

 

cloudformation

  • AWS 中基础的 IaC 服务。
  • 用 YAML 或 JSON 模板定义 AWS 资源。
在 AWS 上开发应用

AWS Cloud Development Kit(CDK)

 

cdk

  • CDK 用代码定义 IaC。
  • 用 Python、TypeScript 或 Java,而非 YAML 或 JSON。
  • 部署时合成为 CloudFormation 模板。
在 AWS 上开发应用

AWS Serverless Application Model(SAM)

  • 基于 CloudFormation 扩展。
  • 为无服务器资源与 API 提供简化语法。
  • 充当转换层。
  • 将 SAM 语法转换为完整的 CloudFormation 模板。

 

sam

在 AWS 上开发应用

SAM 功能

  • 自动生成最小权限的 IAM 角色,并可细化调整。
  • 将部署流水线定义为配置。
  • sam buildsam deploy 打包并部署。
  • sam validate 及早发现模板错误。
  • sam local start-lambda 本地模拟 Lambda。
    • 提供持久的本地端点。

 

sam features

在 AWS 上开发应用

使用 SAM 测试

  • 部署前在本地构建、调用并测试无服务器应用。
  • 测试 Lambda 函数与 API Gateway 集成。
  • sam local invoke 本地调用函数。
    • 单次调用。
  • sam local start-api 模拟 API Gateway。

 

testing with sam

在 AWS 上开发应用

单元测试

 

unit tests

  • 结合单元测试验证 Lambda 行为。
  • 本地测试可加快迭代。
  • 搭配 pytestJUnitJest 等框架。
在 AWS 上开发应用

测试流程

 

test workflow

  • sam local generate-event 生成测试事件。
  • 输出 JSON 事件文件。
  • sam local invoke FunctionName -e event.json 本地调用。
  • 在部署前加入断言以验证响应。
在 AWS 上开发应用

模拟 AWS 服务

 

mocking tests

  • 将本地测试与 moto 等模拟库结合。
  • 与模拟的 AWS 服务交互,无需真实调用。
  • 提升测试速度。
  • 降低测试成本。
  • 验证限流或失败等错误场景。
在 AWS 上开发应用

持续集成与持续部署(CI/CD)

  • SAM 应用常通过 CI/CD 流水线部署。
  • 自动构建、测试、打包与部署。
  • AWS CodeCommit 存储代码与 SAM 模板。
  • AWS CodeBuild 运行测试与 sam build
  • AWS CodePipeline 编排流程。

 

cicd

在 AWS 上开发应用

CI/CD 流程

  • 将源码与 SAM 模板提交到仓库。
  • 运行自动化测试与校验。
  • sam build 打包应用。
  • sam deploy 部署资源。
  • 部署后用 CloudWatch 监控。

 

workflow

在 AWS 上开发应用

部署排错

  troubleshooting

  • 排错是关键运维技能。
  • 常见部署失败:
  • IAM 权限问题。
  • 无效的 SAM 或 CloudFormation 模板。
  • Lambda 打包失败或缺少依赖。
  • API Gateway 配置错误。
在 AWS 上开发应用

部署排错

  troubleshooting

  • SAM 部署底层运行在 CloudFormation 上。
  • 提供堆栈事件与自动回滚。
  • 有助于定位部署失败。
  • 回滚可恢复到先前环境状态。
在 AWS 上开发应用

部署排错

  troubleshooting

  • 使用以下方式排错:
  • CloudWatch Logs。
  • API Gateway 执行日志。
  • Lambda 日志。
  • CloudWatch 指标。
在 AWS 上开发应用

让我们一起练习吧!

在 AWS 上开发应用

Preparing Video For Download...