

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 基础设施即代码（IaC）
<a name="what-is-iac"></a>

借助基础设施即代码 (IaC)，您可以自动部署和管理 AWS 资源，包括无服务器应用程序。IaC 让您可以使用代码来定义基础设施，从而更轻松地对您的部署进行版本控制、共享和复制。这种方法可以帮助您：
+ 加快您的开发周期
+ 简化的配置管理
+ 提升您部署的可靠性和一致性

## 适用于 AWS 无服务器应用程序的 IaC 工具
<a name="iac-tools-aws"></a>

AWS 提供了多种 IaC 工具，可帮助您构建、部署和管理云资源。本节说明了如何 AWS SAM 融入该生态系统以及如何与其他 AWS IaC 工具配合使用。

**AWS CloudFormation**  
使用 [CloudFormation](https://aws.amazon.com/cloudformation/)，您可以使用 YAML 或 JSON 模板对整个 AWS 基础设施进行建模和配置。 CloudFormation 自动处理资源的创建、更新和删除。部署 AWS SAM 应用程序时， CloudFormation 处理转换后的模板以创建和管理您的资源。

**AWS Serverless Application Model (AWS SAM)**  
AWS SAM 使用用于定义无服务器资源的简化语法，帮助您构建无服务器应用程序。您可以使用 AWS SAM 模板使用简洁的 YAML 语法来配置 Lambda 函数 APIs、数据库和事件源。 AWS SAM 在部署期间将这些 CloudFormation 模板转换为模板。  
虽然 AWS SAM 专门研究无服务器应用程序，但您可以在 AWS SAM 模板中使用任何 CloudFormation 资源类型。这使您能够根据需要灵活地加入非无服务器资源。

**AWS Cloud 开发套件 (AWS CDK)**  
使用 [AWS CDK](https://aws.amazon.com/cdk/)，您可以使用熟悉的编程语言（例如 Python TypeScript、Java、C\$1/Net 或 Go）来定义您的无服务器基础架构。您可以使用诸如循环和条件之类的编程结构来定义基础架构，并 AWS CDK 生成用于部署的 CloudFormation 模板。您可以使用在 AWS SAMCLI本地测试和调试使用创建的应用程序 AWS CDK。要了解更多信息，请参阅[在本地测试 CDK 应用程序](https://docs.aws.amazon.com/cdk/v2/guide/testing-locally.html)。

## 比较适用于无服务器应用程序的 IaC 工具
<a name="comparing-iac-tools"></a>

在为无服务器应用程序选择 IaC 工具时，需综合考量团队偏好、项目需求及现有工作流。下表比较了用于无服务器开发的 AWS IaC 工具的主要特征：


| **工具** | **主要用途** | **适用于** | **适用于 AWS SAM** | **何时选择** | 
| --- | --- | --- | --- | --- | 
| **CloudFormation** | 管理复杂 AWS 的基础架构 | 需要对 AWS 资源进行详细控制的应用程序 | AWS SAM 模板在部署期间转换为 CloudFormation 模板 | 用于对非无服务器资源进行精细控制 | 
| **AWS SAM** | 无服务器应用程序开发 | 使用 Lambda 构建无服务器应用程序的团队 | 原生功能 | 主要关注具有 Lambda 函数、API Gateway 和其他无服务器 APIs资源的无服务器架构时 | 
| **AWS CDK** | 使用编程语言定义基础设施 | 偏好类型化语言和代码优先方法的团队 | 生成 AWS SAM 模板并 AWS SAMCLI用于测试 | 当您需要程序化基础设施定义或复杂资源配置逻辑时 | 

**注意**  
虽然本指南侧重于 AWS原生 IaC 工具，但 Terraform 是另一种可用于定义无服务器应用程序的流行的 IaC 解决方案。 AWS SAM CLI 支持对 Terraform 中定义的 Lambda 函数进行本地测试。有关更多信息，请参阅 [AWS SAM CLI Terraform 支持](terraform-support.md)。

## 了解详情
<a name="iac-learn-more"></a>
+ 要了解有关 DevOps 操作的更多信息 AWS，请参阅[ DevOps 上的简介 AWS](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)
+ 有关将 Lambda 与不同的 IaC 工具结合使用的更多信息，请参阅[将 Lambda 与基础设施即代码（IaC）结合使用](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac.html)