

# 通过 CloudFormation 控制台创建堆栈
<a name="cfn-console-create-stack"></a>

您可以创建堆栈模板，然后通过 CloudFormation 控制台或命令行工具使用该模板来创建堆栈。控制台提供了向导式界面，其中包含多个预定义选项，可以简化堆栈创建过程。

**Topics**
+ [创建堆栈](#create-stack)
+ [配置堆栈选项](#configure-stack-options)
+ [预览堆栈的配置](#cfn-console-create-stacks-changesets)

## 创建堆栈
<a name="create-stack"></a>

按照本节中的步骤部署模板并创建堆栈。

**先决条件**
+ 您必须已创建堆栈模板。有关更多信息，请参阅 [使用 CloudFormation 模板](template-guide.md)。

**更新堆栈（控制台）**

1. 通过以下网址打开 CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 在屏幕顶部的导航栏中，选择 AWS 区域以在其中创建堆栈。

1. 在**堆栈**页面，选择右上角的**堆栈**，然后选择**使用新资源（标准）**。

   您也可以选择**使用现有资源（导入资源）**选项，以便导入您的模板中描述的现有 AWS 资源。有关此选项的更多信息，请参阅[将 AWS 资源导入 CloudFormation 堆栈](import-resources.md)。

1. 在**创建堆栈**页面上执行以下任一操作：
   + 要使用现有模板，请在**先决条件 – 准备模板**中选择**选择现有模板**。然后在**指定模板**下，根据模板的位置选择 **Amazon S3 URL** 或**上传模板文件**。
     + 如果选择 **Amazon S3 URL**，请提供指向 S3 存储桶中模板文件的 URL。

       如果模板包含嵌套堆栈（例如，子目录下其他模板文档中描述的堆栈），请确保您的 S3 存储桶包含所需的文件和目录。

       如果模板来自启用了版本控制的存储桶，则可以通过在 URL 后附加 `?versionId=version-id` 来指定模板的具体版本。有关启用版本控制的存储桶的更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[使用启用版本控制的存储桶中的对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-objects-versioned-bucket.html)**。

       该 URL 必须指向一个最大大小为 1MB 的模板，该模板存储在您具有读取权限的 S3 存储桶中。URL 的最大长度为 1024 个字符。某些资源可能需要存储桶与堆栈位于同一区域。
     + 如果选择**上传模板文件**，请选择**选择文件**来选择本地计算机中的模板文件。模板文件大小必须为 1 MB 或更小。

       如果您选择了您的模板，CloudFormation 会上传此文件并显示 S3 URL。CloudFormation 会将其上传到您的 AWS 账户中的 Amazon S3 存储桶。如果您的 AWS 账户中已有使用 CloudFormation 创建的 S3 存储桶，则 CloudFormation 会将该模板添加到该存储桶。如果还没有由 CloudFormation 创建的现有存储桶，则会为您上传模板文件的每个区域创建一个唯一的存储桶。

       使用由 CloudFormation 创建的 S3 存储桶时应注意以下事项：
       + 具有您的 AWS 账户中的 Amazon S3 权限的任何人均可访问这些存储桶。
       + CloudFormation 创建默认情况下已启用服务器端加密的存储桶，从而对存储桶中存储的所有对象进行加密。

         例如，对于 CloudFormation 创建的存储桶，您可以使用 Amazon S3 控制台（[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)）或 AWS CLI 直接管理加密选项。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[为 Amazon S3 存储桶设置默认服务器端加密行为](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)**。
       + 您可通过手动将模板上传到 Amazon S3 来使用您自己的存储桶并管理其权限。每当您创建或更新堆栈时，请指定模板文件的 Amazon S3 URL。
   + 如果您尚未准备好模板，则可以选择**从基础架构编辑器构建**来使用基础架构编辑器创建模板。有关更多信息，请参阅 [基础架构编辑器](infrastructure-composer-for-cloudformation.md)。

1. 选择**下一步**继续操作并验证模板。

   CloudFormation 会首先验证模板以捕获语法错误和某些语义错误（例如循环依赖项），然后才会继续操作。在验证期间，CloudFormation 首先检查模板是否是有效的 JSON。如果不是，CloudFormation 会检查模板是否是有效的 YAML。如果两种检查都失败，CloudFormation 会返回模板验证错误。

1. 在 **Specify stack details (指定堆栈详细信息)** 页面上，在**堆栈名称**框中键入堆栈名称。

   堆栈名称是帮助您从堆栈列表中查找特定堆栈的标识符。堆栈名称只能包含字母数字字符（区分大小写）和连字符。该名称必须以字母字符开头，且不得超过 128 个字符。

1. 在**参数**部分中，指定模板中所定义参数的值：

1. 选择**下一步**以继续创建堆栈。

1. （可选）在**配置堆栈选项**页面上，更改默认堆栈选项。有关更多信息，请参阅 [配置堆栈选项](#configure-stack-options)。

1. 如果模板包含 IAM 资源，则对于**功能**，请选择**我确认该模板可能会创建 IAM 资源**以指定您要在模板中使用 IAM 资源。有关更多信息，请参阅 [确认 CloudFormation 模板中的 IAM 资源](control-access-with-iam.md#using-iam-capabilities)。

1. 选择**下一步**以继续。

1. 在**检查并创建**页面上，检查堆栈的详细信息。

   要在启动堆栈之前更改任何值，请在包含要更改的设置的部分中选择**编辑**。

1. （可选）在创建堆栈前，您可以创建更改集来预览堆栈的配置。在**检查并创建**页面上，选择**创建更改集**，然后按照说明进行操作。有关更多信息，请参阅 [预览堆栈的配置](#cfn-console-create-stacks-changesets)。

1. 选择**提交**以启动堆栈。

然后，CloudFormation 将会创建模板中定义的所有资源。

您可以在新堆栈的**事件**选项卡上监控堆栈创建的进度和状态。有关更多信息，请参阅 [监控堆栈进度](monitor-stack-progress.md)。

**使用命令行创建堆栈**  
您可以使用以下任一命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) (AWS CLI)
+ [https://docs.aws.amazon.com/powershell/latest/reference/items/New-CFNStack.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-CFNStack.html) (AWS Tools for Windows PowerShell)

有关使用命令行创建堆栈的示例，请参阅 [AWS CLI 和 PowerShell 的 CloudFormation 堆栈操作命令示例](service_code_examples.md)。

## 配置堆栈选项
<a name="configure-stack-options"></a>

在**配置堆栈选项**页面上，您可以配置 CloudFormation 堆栈的选项，例如标签、堆栈事件通知或堆栈策略等。

您可以设置以下堆栈选项：

**标签**  <a name="configure-stack-options-tags"></a>
您最多可以为堆栈以及 CloudFormation 支持标记的任何资源添加 50 个标签键对。标签是由客户定义的键和值，可以分配给 AWS 资源以用于成本跟踪等目的。  
**Key** 包含任意字母数字字符或空格。标签键最长可达 127 个字符。  
**Value (值)** 可由任何字母数字字符或空格组成。标签值最长可达 255 个字符。  
创建堆栈后，添加、更新或移除堆栈级别标签将会启动堆栈更新。将相应更新支持堆栈级别标签传播的所有资源。

**权限**  <a name="configure-stack-options-permissions"></a>
CloudFormation 可以代入的现有 IAM 服务角色。无需使用您的账户凭证，CloudFormation 会使用角色的凭证来创建您的堆栈。有关更多信息，请参阅 [CloudFormation 服务角色](using-iam-servicerole.md)。

**堆栈故障选项**  <a name="configure-stack-options-rollback"></a>
指定所有堆栈部署和更改集操作的预置故障选项。有关更多信息，请参阅 [选择预置资源时如何处理失败](stack-failure-options.md)。  
当堆栈状态为 `CREATE_FAILED` 或 `UPDATE_FAILED` 时，**Roll back all stack resources**（回滚所有堆栈资源）选项将回滚模板中指定的所有资源。  
对于创建操作，**Preserve successfully provisioned resources**（保留成功预置的资源）选项将保留成功资源的状态，而失败的资源将保持失败状态，直到执行下一次更新操作。  
对于更新和更改集操作，**Preserve successfully provisioned resources**（保留成功预置的资源）选项将保留成功资源的状态，同时将失败的资源回滚到上一个已知的稳定状态。失败的资源将处于 `UPDATE_FAILED` 状态。没有上一个已知稳定状态的资源将在下一次堆栈操作时删除。

您也可以设置以下高级选项来创建堆栈：

**Stack policy (堆栈策略)**  <a name="configure-stack-options-stack-policy"></a>
定义在堆栈更新期间要防止意外更新的资源。默认情况下，堆栈更新期间所有资源都可更新。  
您可以直接以 JSON 形式输入堆栈策略，也可以上传包含堆栈策略的 JSON 文件。有关更多信息，请参阅 [防止更新堆栈资源](protect-stack-resources.md)。

**回滚配置**  <a name="configure-stack-options-rollback-configuration"></a>
您可在堆栈创建和更新期间让 CloudFormation 监控堆栈的状态，并可在堆栈超出您指定的任何警报阈值时回滚操作。指定 CloudFormation 应监控的 CloudWatch 警报。在堆栈操作或监控期间，如果有任何警报进入 `ALARM` 状态，CloudFormation 就会回滚整个堆栈操作。有关更多信息，请参阅 [使用回滚触发器在突破警报阈值时回滚 CloudFormation 堆栈](using-cfn-rollback-triggers.md)。

**通知选项**  <a name="configure-stack-options-notification"></a>
您可以指定将发送有关堆栈事件的通知的新或现有 Amazon Simple Notification Service 主题。  
如果您创建 Amazon SNS 主题，则必须指定名称和电子邮件地址（将向该位置发送堆栈事件通知）。

**堆栈创建选项**  <a name="configure-stack-options-creation-options"></a>
包含以下用于创建堆栈的选项，但这些选项不能作为堆栈更新的一部分。    
**超时**  <a name="configure-stack-options-creation-timeout"></a>
指定 CloudFormation 应分配的在堆栈创建操作超时前的时间量（以分钟为单位）。如果 CloudFormation 无法在分配的时间内创建整个堆栈，它将因超时而导致堆栈创建失败并回滚该堆栈。  
默认情况下，堆栈创建从不超时。但是，单个资源可能会根据它们所实施服务的性质而具有自己的超时。例如，如果堆栈中的单个资源发生超时，则堆栈创建也会超时，即使尚未达到您为堆栈创建指定的超时也不例外。  
**终止保护**  
防止意外删除堆栈。如果用户尝试删除已启用终止保护的堆栈，则删除操作会失败，并且堆栈及其状态将保持不变。有关更多信息，请参阅 [CloudFormation 堆栈的删除保护](using-cfn-protect-stacks.md)。  
默认情况下，终止保护处于**已禁用**状态。

## 预览堆栈的配置
<a name="cfn-console-create-stacks-changesets"></a>

要在创建堆栈前预览 CloudFormation 堆栈的配置，请创建更改集。利用此功能，您在执行更改集前可检查各种配置并对堆栈进行更正和更改。有关更改集的更多信息，请参阅 [使用更改集更新 CloudFormation 堆栈](using-cfn-updating-stacks-changesets.md)。

### 为新堆栈创建更改集
<a name="cfn-console-create-stacks-changesets-create-new-stack"></a>

要为新堆栈创建更改集，请选择您的堆栈模板，并像创建新堆栈一样指定堆栈配置，然后选择创建新的更改集，而不是新堆栈。

**为新堆栈创建更改集**

1. 在**检查和创建**页面上，选择**创建更改集**。

1. 在**创建更改集**对话框中，输入更改集的名称，并根据需要输入描述。选择**创建更改集**。

   当您为新堆栈创建更改集时，CloudFormation 执行以下操作：
   + 启动状态为 `REVIEW_IN_PROGRESS` 的新堆栈。
   + 为反映您在之前步骤中指定的堆栈配置的新堆栈创建更改集。

   CloudFormation 会显示建议的堆栈的**更改集**页面。CloudFormation 创建更改集时，该更改集的状态为 `CREATE_IN_PROGRESS`，执行状态为 `UNAVAILABLE`。CloudFormation 成功创建完更改集后，会将更改集状态设置为 `CREATE_COMPLETE`，其执行状态为 `AVAILABLE`。堆栈状态已更新为 `REVIEW_IN_PROGRESS`。此时，您可以执行更改集以完成新堆栈的创建。

   在**更改**窗格中，CloudFormation 会显示您的堆栈的建议配置。

   如果 CloudFormation 无法创建更改集，它会将更改集状态设置为 `CREATE_FAILED`。修复**状态原因**字段中显示的错误，然后创建新的更改集。在此阶段，您在执行下一个更改集之前可对堆栈尝试各种配置和进行更正和更改。

1. 要基于更改集完成创建新堆栈，请选择 **Execute**（执行），指定回滚配置，然后选择 **Execute change set**（执行更改集）。