

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 基礎設施即程式碼 (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 雲端開發套件 (AWS CDK)**  
透過 [AWS CDK](https://aws.amazon.com/cdk/)，您可以使用熟悉的程式設計語言定義無伺服器基礎設施，例如 TypeScript、Python、Java、C\$1/。Net 或 Go。您可以使用迴圈和條件等程式設計建構來定義基礎設施，並 AWS CDK 產生用於部署的 CloudFormation 範本。您可以使用 在 AWS SAM CLI本機測試和偵錯使用 建立的應用程式 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 SAM CLI 進行測試 | 當您需要程式設計基礎設施定義或複雜的資源組態邏輯時 | 

**注意**  
雖然本指南著重於原生 IaC AWS工具，但 Terraform 是另一個常用的 IaC 解決方案，可用於定義無伺服器應用程式。支援本機測試 Terraform AWS SAM CLI中定義的 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)
+ 如需搭配不同 IaC 工具使用 Lambda 的資訊，請參閱[搭配基礎設施做為程式碼使用 Lambda (IaC)](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac.html)