

文档 AWS SDK 示例 GitHub 存储库中还有更多 [S AWS DK 示例](https://github.com/awsdocs/aws-doc-sdk-examples)。

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

# CloudFormation 使用适用于 PowerShell V5 的工具的示例
<a name="powershell_5_cloudformation_code_examples"></a>

以下代码示例向您展示了如何使用带 CloudFormation的 AWS Tools for PowerShell V5 来执行操作和实现常见场景。

*操作*是大型程序的代码摘录，必须在上下文中运行。您可以通过操作了解如何调用单个服务函数，还可以通过函数相关场景的上下文查看操作。

每个示例都包含一个指向完整源代码的链接，您可以从中找到有关如何在上下文中设置和运行代码的说明。

**Topics**
+ [操作](#actions)

## 操作
<a name="actions"></a>

### `Get-CFNStack`
<a name="cloudformation_DescribeStacks_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Get-CFNStack`。

**适用于 PowerShell V5 的工具**  
**示例 1：返回描述用户的所有堆栈的堆栈实例集合。**  

```
Get-CFNStack
```
**示例 2：返回描述指定堆栈的堆栈实例**  

```
Get-CFNStack -StackName "myStack"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [DescribeStacks](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Get-CFNStackEvent`
<a name="cloudformation_DescribeStackEvents_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Get-CFNStackEvent`。

**适用于 PowerShell V5 的工具**  
**示例 1：返回指定堆栈的所有堆栈相关事件。**  

```
Get-CFNStackEvent -StackName "myStack"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [DescribeStackEvents](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Get-CFNStackResource`
<a name="cloudformation_DescribeStackResource_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Get-CFNStackResource`。

**适用于 PowerShell V5 的工具**  
**示例 1：返回模板中按逻辑 ID DBInstance “我的” 标识的与指定堆栈关联的资源的描述。**  

```
Get-CFNStackResource -StackName "myStack" -LogicalResourceId "MyDBInstance"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [DescribeStackResource](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Get-CFNStackResourceList`
<a name="cloudformation_DescribeStackResources_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Get-CFNStackResourceList`。

**适用于 PowerShell V5 的工具**  
**示例 1：返回与指定堆栈关联的多达 100 个资源的 AWS 资源描述。要获取与堆栈关联的所有资源的详细信息，请使用 Get-CFNStackResourceSummary，它还支持手动分页结果。**  

```
Get-CFNStackResourceList -StackName "myStack"
```
**示例 2：返回与指定堆栈关联的模板中用逻辑 ID “Ec2Instance”标识的 Amazon EC2 实例的描述。**  

```
Get-CFNStackResourceList -StackName "myStack" -LogicalResourceId "Ec2Instance"
```
**示例 3：对于包含用实例 ID “i-123456”标识的 Amazon EC2 实例的堆栈，返回与该堆栈关联的最多 100 个资源的描述。要获取与堆栈关联的所有资源的详细信息，请使用 Get-CFNStackResourceSummary，它还支持手动分页结果。**  

```
Get-CFNStackResourceList -PhysicalResourceId "i-123456"
```
**示例 4：返回在堆栈模板中用逻辑 ID “Ec2Instance”标识的 Amazon EC2 实例的描述。该堆栈用其包含的资源的物理资源 ID 进行标识，在此例中即为实例 ID 为“i-123456”的 Amazon EC2 实例。也可以根据模板内容使用其他物理资源来识别堆栈，例如 Amazon S3 存储桶。**  

```
Get-CFNStackResourceList -PhysicalResourceId "i-123456" -LogicalResourceId "Ec2Instance"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [DescribeStackResources](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Get-CFNStackResourceSummary`
<a name="cloudformation_ListStackResources_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Get-CFNStackResourceSummary`。

**适用于 PowerShell V5 的工具**  
**示例 1：返回与指定堆栈关联的所有资源的描述。**  

```
Get-CFNStackResourceSummary -StackName "myStack"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [ListStackResources](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Get-CFNStackSummary`
<a name="cloudformation_ListStacks_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Get-CFNStackSummary`。

**适用于 PowerShell V5 的工具**  
**示例 1：返回所有堆栈的摘要信息。**  

```
Get-CFNStackSummary
```
**示例 2：返回当前正在创建的所有堆栈的摘要信息。**  

```
Get-CFNStackSummary -StackStatusFilter "CREATE_IN_PROGRESS"
```
**示例 3：返回当前正在创建或更新的所有堆栈的摘要信息。**  

```
Get-CFNStackSummary -StackStatusFilter @("CREATE_IN_PROGRESS", "UPDATE_IN_PROGRESS")
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [ListStacks](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Get-CFNTemplate`
<a name="cloudformation_GetTemplate_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Get-CFNTemplate`。

**适用于 PowerShell V5 的工具**  
**示例 1：返回与指定堆栈关联的模板。**  

```
Get-CFNTemplate -StackName "myStack"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [GetTemplate](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Measure-CFNTemplateCost`
<a name="cloudformation_EstimateTemplateCost_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Measure-CFNTemplateCost`。

**适用于 PowerShell V5 的工具**  
**示例 1：返回一个带有查询字符串的 AWS 简单月度计算器网址，该字符串描述了运行模板所需的资源。模板是从指定的 Amazon S3 URL 获取的，并且应用了单个自定义参数。也可以使用 “键” 和 “值” 来指定参数，而不是 “ParameterKey” 和 “ParameterValue”。**  

```
Measure-CFNTemplateCost -TemplateURL https://s3.amazonaws.com/amzn-s3-demo-bucket/templatefile.template `
                        -Region us-west-1 `
                        -Parameter @{ ParameterKey="KeyName"; ParameterValue="myKeyPairName" }
```
**示例 2：返回一个带有查询字符串的 AWS 简单月度结算器网址，该字符串描述了运行模板所需的资源。模板是根据提供的内容和应用的自定义参数进行解析的（此示例假设模板内容会声明两个参数，'和KeyName' InstanceType '）。也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。**  

```
Measure-CFNTemplateCost -TemplateBody "{TEMPLATE CONTENT HERE}" `
                        -Parameter @( @{ ParameterKey="KeyName"; ParameterValue="myKeyPairName" },`
                                      @{ ParameterKey="InstanceType"; ParameterValue="m1.large" })
```
**示例 3：使用 New-Object 生成模板参数集，并返回一个 “ AWS 简单月度计算器” 网址，其中包含描述运行模板所需资源的查询字符串。模板是从提供的内容中解析出来的，并带有自定义参数（此示例假设模板内容会声明两个参数，KeyName'和' InstanceType '）。**  

```
$p1 = New-Object -Type Amazon.CloudFormation.Model.Parameter
$p1.ParameterKey = "KeyName"
$p1.ParameterValue = "myKeyPairName"

$p2 = New-Object -Type Amazon.CloudFormation.Model.Parameter
$p2.ParameterKey = "InstanceType"
$p2.ParameterValue = "m1.large"

Measure-CFNTemplateCost -TemplateBody "{TEMPLATE CONTENT HERE}" -Parameter @( $p1, $p2 )
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [EstimateTemplateCost](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `New-CFNStack`
<a name="cloudformation_CreateStack_powershell_5_topic"></a>

以下代码示例演示了如何使用 `New-CFNStack`。

**适用于 PowerShell V5 的工具**  
**示例 1：使用指定名称创建新堆栈。模板是从提供的内容中解析出来的，带有自定义参数（PK1'PK2' 和 '' 代表模板内容中声明的参数的名称，PV1'和' PV2 '代表这些参数的值。也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。如果堆栈创建失败，则不会将其回滚。**  

```
New-CFNStack -StackName "myStack" `
             -TemplateBody "{TEMPLATE CONTENT HERE}" `
             -Parameter @( @{ ParameterKey="PK1"; ParameterValue="PV1" }, @{ ParameterKey="PK2"; ParameterValue="PV2" }) `
             -DisableRollback $true
```
**示例 2：使用指定名称创建新堆栈。模板是从提供的内容中解析出来的，带有自定义参数（PK1'PK2' 和 '' 代表模板内容中声明的参数的名称，PV1'和' PV2 '代表这些参数的值。也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。如果堆栈创建失败，则会将其回滚。**  

```
$p1 = New-Object -Type Amazon.CloudFormation.Model.Parameter
$p1.ParameterKey = "PK1"
$p1.ParameterValue = "PV1"

$p2 = New-Object -Type Amazon.CloudFormation.Model.Parameter
$p2.ParameterKey = "PK2"
$p2.ParameterValue = "PV2"

New-CFNStack -StackName "myStack" `
             -TemplateBody "{TEMPLATE CONTENT HERE}" `
             -Parameter @( $p1, $p2 ) `
             -OnFailure "ROLLBACK"
```
**示例 3：使用指定名称创建新堆栈。该模板是从带有自定义参数的 Amazon S3 URL 中获取的（PK1“” 表示模板内容中声明的参数的名称，PV1“” 表示参数的值。 也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。 如果堆栈创建失败，则会将其回滚（与指定相同-DisableRollback \$1false）**。  

```
New-CFNStack -StackName "myStack" `
             -TemplateURL https://s3.amazonaws.com/amzn-s3-demo-bucket/templatefile.template `
             -Parameter @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**示例 4：使用指定名称创建新堆栈。该模板是从带有自定义参数的 Amazon S3 URL 中获取的（PK1“” 表示模板内容中声明的参数的名称，PV1“” 表示参数的值。 也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。 如果堆栈创建失败，则会将其回滚（与指定相同-DisableRollback \$1false）。指定的通知 AENs 将收到已发布的堆栈相关事件。**  

```
New-CFNStack -StackName "myStack" `
             -TemplateURL https://s3.amazonaws.com/amzn-s3-demo-bucket/templatefile.template `
             -Parameter @{ ParameterKey="PK1"; ParameterValue="PV1" } `
             -NotificationARN @( "arn1", "arn2" )
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [CreateStack](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Remove-CFNStack`
<a name="cloudformation_DeleteStack_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Remove-CFNStack`。

**适用于 PowerShell V5 的工具**  
**示例 1：删除指定的堆栈。**  

```
Remove-CFNStack -StackName "myStack"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [DeleteStack](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Resume-CFNUpdateRollback`
<a name="cloudformation_ContinueUpdateRollback_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Resume-CFNUpdateRollback`。

**适用于 PowerShell V5 的工具**  
**示例 1：继续指定堆栈的回滚，该堆栈的状态应为“UPDATE\$1ROLLBACK\$1FAILED”。如果继续回滚成功，堆栈将进入“UPDATE\$1ROLLBACK\$1COMPLETE”状态。**  

```
Resume-CFNUpdateRollback -StackName "myStack"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [ContinueUpdateRollback](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Stop-CFNUpdateStack`
<a name="cloudformation_CancelUpdateStack_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Stop-CFNUpdateStack`。

**适用于 PowerShell V5 的工具**  
**示例 1：取消指定堆栈的更新。**  

```
Stop-CFNUpdateStack -StackName "myStack"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [CancelUpdateStack](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Test-CFNStack`
<a name="cloudformation_Test-CFNStack_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Test-CFNStack`。

**适用于 PowerShell V5 的工具**  
**示例 1：测试堆栈是否已达到 UPDATE\$1ROLLBACK\$1COMPLETE、CREATE\$1COMPLETE、ROLLBACK\$1COMPLETE 或 UPDATE\$1COMPLETE 状态之一。**  

```
Test-CFNStack -StackName MyStack
```
**输出**：  

```
False
```
**示例 2：测试堆栈是否已达到 UPDATE\$1COMPLETE 或 UPDATE\$1ROLLBACK\$1COMPLETE 的状态。**  

```
Test-CFNStack -StackName MyStack -Status UPDATE_COMPLETE,UPDATE_ROLLBACK_COMPLETE
```
**输出**：  

```
True
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet CFNStack 中的[测试](https://docs.aws.amazon.com/powershell/v5/reference)参考 (V5)*。

### `Test-CFNTemplate`
<a name="cloudformation_ValidateTemplate_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Test-CFNTemplate`。

**适用于 PowerShell V5 的工具**  
**示例 1：验证指定模板的内容。输出详细说明了模板的功能、描述和参数。**  

```
Test-CFNTemplate -TemplateBody "{TEMPLATE CONTENT HERE}"
```
**示例 2：验证通过 Amazon S3 URL 访问的指定模板。输出详细说明了模板的功能、描述和参数。**  

```
Test-CFNTemplate -TemplateURL https://s3.amazonaws.com/amzn-s3-demo-bucket/templatefile.template
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [ValidateTemplate](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Update-CFNStack`
<a name="cloudformation_UpdateStack_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Update-CFNStack`。

**适用于 PowerShell V5 的工具**  
**示例 1：使用指定的模板和自定义参数更新堆栈 “MyStack”。 'PK1' 表示模板中声明的参数的名称，而 'PV1' 表示其值。也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateBody "{Template Content Here}" `
                -Parameter @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**示例 2：使用指定的模板和自定义参数更新堆栈 “MyStack”。 PK1'和' PK2 '表示模板中声明的参数的名称，' 和 PV1 'PV2' 代表其请求的值。也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateBody "{Template Content Here}" `
                -Parameter @( @{ ParameterKey="PK1"; ParameterValue="PV1" }, @{ ParameterKey="PK2"; ParameterValue="PV2" } )
```
**示例 3：使用指定的模板和自定义参数更新堆栈 “MyStack”。 'PK1' 表示模板中声明的参数的名称，而 'PV2' 表示其值。也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。**  

```
Update-CFNStack -StackName "myStack" -TemplateBody "{Template Content Here}" -Parameters @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**示例 4：使用从 Amazon S3 获得的指定模板和自定义参数更新堆栈 “MyStack”。 PK1'和' PK2 '表示模板中声明的参数的名称，' 和 PV1 'PV2' 代表其请求的值。也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateURL https://s3.amazonaws.com/amzn-s3-demo-bucket/templatefile.template `
                -Parameter @( @{ ParameterKey="PK1"; ParameterValue="PV1" }, @{ ParameterKey="PK2"; ParameterValue="PV2" } )
```
**示例 5：使用从 Amazon S3 获取的指定模板和自定义参数更新堆栈 “MyStack”（在本示例中假设该堆栈包含 IAM 资源）。 PK1'和' PK2 '表示模板中声明的参数的名称，' 和 PV1 'PV2' 代表其请求的值。也可以使用 “密钥” 和 “值” 来指定自定义参数，而不是 “ParameterKey” 和 “ParameterValue”。包含 IAM 资源的堆栈要求您指定-Capabilities “CAPABILITY\$1IAM” 参数，否则更新将失败并出现 “” 错误。InsufficientCapabilities**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateURL https://s3.amazonaws.com/amzn-s3-demo-bucket/templatefile.template `
                -Parameter @( @{ ParameterKey="PK1"; ParameterValue="PV1" }, @{ ParameterKey="PK2"; ParameterValue="PV2" } ) `
                -Capabilities "CAPABILITY_IAM"
```
+  有关 API 的详细信息，请参阅 *AWS Tools for PowerShell Cmdlet 参考 (V* 5) [UpdateStack](https://docs.aws.amazon.com/powershell/v5/reference)中的。

### `Wait-CFNStack`
<a name="cloudformation_Wait-CFNStack_powershell_5_topic"></a>

以下代码示例演示了如何使用 `Wait-CFNStack`。

**适用于 PowerShell V5 的工具**  
**示例 1：测试堆栈是否已达到 UPDATE\$1ROLLBACK\$1COMPLETE、CREATE\$1COMPLETE、ROLLBACK\$1COMPLETE 或 UPDATE\$1COMPLETE 状态之一。如果堆栈未处于其中一种状态，则命令将休眠两秒钟，然后再次测试状态。重复此操作，直到堆栈达到所请求的状态之一或经过了 60 秒的默认超时时间。如果超过了超时时间，则会引发异常。如果堆栈在超时时间内达到请求的状态之一，则会将它返回到管道。**  

```
$stack = Wait-CFNStack -StackName MyStack
```
**示例 2：此示例等待总共 5 分钟（300 秒），以使堆栈达到任一指定的状态。在此示例中，在超时之前达到此状态，因此堆栈对象将返回到管道。**  

```
Wait-CFNStack -StackName MyStack -Timeout 300 -Status CREATE_COMPLETE,ROLLBACK_COMPLETE
```
**输出**：  

```
Capabilities      : {CAPABILITY_IAM}
ChangeSetId       :
CreationTime      : 6/1/2017 9:29:33 AM
Description       : AWS CloudFormation Sample Template ec2_instance_with_instance_profile: Create an EC2 instance with an associated instance profile. **WARNING** This template creates one or more Amazon EC2
                    instances and an Amazon SQS queue. You will be billed for the AWS resources used if you create a stack from this template.
DisableRollback   : False
LastUpdatedTime   : 1/1/0001 12:00:00 AM
NotificationARNs  : {}
Outputs           : {}
Parameters        : {}
RoleARN           :
StackId           : arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/7ea87b50-46e7-11e7-9c9b-503a90a9c4d1
StackName         : MyStack
StackStatus       : CREATE_COMPLETE
StackStatusReason :
Tags              : {}
TimeoutInMinutes  : 0
```
**示例 3：此示例演示堆栈在超时时间（在本例中为默认时段 60 秒）内未达到所请求状态之一时的错误输出。**  

```
Wait-CFNStack -StackName MyStack -Status CREATE_COMPLETE,ROLLBACK_COMPLETE
```
**输出**：  

```
Wait-CFNStack : Timed out after 60 seconds waiting for CloudFormation stack MyStack in region us-west-2 to reach one of state(s): UPDATE_ROLLBACK_COMPLETE,CREATE_COMPLETE,ROLLBACK_COMPLETE,UPDATE_COMPLETE
At line:1 char:1
+ Wait-CFNStack -StackName MyStack -State CREATE_COMPLETE,ROLLBACK_COMPLETE
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...tCFNStackCmdlet:WaitCFNStackCmdlet) [Wait-CFNStack], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Amazon.PowerShell.Cmdlets.CFN.WaitCFNStackCmdlet
```
+  有关 API 的详细信息，请参阅 Wa [it-CFNStack in AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/v5/reference) *Cmdlet 参考 (V5)*。