

文件 AWS 開發套件範例 GitHub 儲存庫中有更多可用的 [AWS SDK 範例](https://github.com/awsdocs/aws-doc-sdk-examples)。

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

# CloudFormation 使用 Tools for PowerShell V4 的範例
<a name="powershell_4_cloudformation_code_examples"></a>

下列程式碼範例示範如何使用 AWS Tools for PowerShell V4 搭配 來執行動作和實作常見案例 CloudFormation。

*Actions* 是大型程式的程式碼摘錄，必須在內容中執行。雖然動作會告訴您如何呼叫個別服務函數，但您可以在其相關情境中查看內容中的動作。

每個範例均包含完整原始碼的連結，您可在連結中找到如何設定和執行內容中程式碼的相關指示。

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

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

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

以下程式碼範例顯示如何使用 `Get-CFNStack`。

**Tools for PowerShell V4**  
**範例 1：傳回描述所有使用者堆疊的堆疊執行個體集合。**  

```
Get-CFNStack
```
**範例 2：傳回描述指定堆疊的堆疊執行個體**  

```
Get-CFNStack -StackName "myStack"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [DescribeStacks](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Get-CFNStackEvent`。

**Tools for PowerShell V4**  
**範例 1：傳回特定堆疊的所有堆疊相關事件。**  

```
Get-CFNStackEvent -StackName "myStack"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [DescribeStackEvents](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Get-CFNStackResource`。

**Tools for PowerShell V4**  
**範例 1：傳回透過邏輯 ID "MyDBInstance" 在與指定堆疊相關聯的範本中識別的資源描述。**  

```
Get-CFNStackResource -StackName "myStack" -LogicalResourceId "MyDBInstance"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [DescribeStackResource](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Get-CFNStackResourceList`。

**Tools for PowerShell V4**  
**範例 1：傳回最多 100 個與指定堆疊相關聯的資源 AWS 描述。若要取得與堆疊相關聯的所有資源詳細資訊，請使用 Get-CFNStackResourceSummary，這也支援手動分頁結果。**  

```
Get-CFNStackResourceList -StackName "myStack"
```
**範例 2：傳回邏輯 ID "Ec2Instance" 在與指定堆疊相關聯的範本中識別的 Amazon EC2 執行個體描述。**  

```
Get-CFNStackResourceList -StackName "myStack" -LogicalResourceId "Ec2Instance"
```
**範例 3：傳回最多 100 個與堆疊相關聯的資源描述，其中包含由執行個體 ID "i-123456" 識別的 Amazon EC2 執行個體。若要取得與堆疊相關聯的所有資源詳細資訊，請使用 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 參考 (V4)》**中的 [DescribeStackResources](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Get-CFNStackResourceSummary`。

**Tools for PowerShell V4**  
**範例 1：傳回與指定堆疊相關聯的所有資源的描述。**  

```
Get-CFNStackResourceSummary -StackName "myStack"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [ListStackResources](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Get-CFNStackSummary`。

**Tools for PowerShell V4**  
**範例 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 參考 (V4)》**中的 [ListStacks](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Get-CFNTemplate`。

**Tools for PowerShell V4**  
**範例 1：傳回與指定堆疊相關聯的範本。**  

```
Get-CFNTemplate -StackName "myStack"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [GetTemplate](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Measure-CFNTemplateCost`。

**Tools for PowerShell V4**  
**範例 1：傳回 AWS 簡易每月計算器 URL，其中包含查詢字串，描述執行範本所需的資源。範本是從指定的 Amazon S3 URL 和套用的單一自訂參數取得。參數也可以使用 'Key' 和 'Value' (而不是 '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 簡易每月計算器 URL，其中包含查詢字串，說明執行範本所需的資源。範本會從提供的內容剖析，並套用自訂參數 (此範例假設範本內容已宣告兩個參數：'KeyName' 和 'InstanceType')。自訂參數也可以使用 'Key' 和 'Value' (而不是 'ParameterKey' 和 'ParameterValue') 來指定。**  

```
Measure-CFNTemplateCost -TemplateBody "{TEMPLATE CONTENT HERE}" `
                        -Parameter @( @{ ParameterKey="KeyName"; ParameterValue="myKeyPairName" },`
                                      @{ ParameterKey="InstanceType"; ParameterValue="m1.large" })
```
**範例 3：使用 New-Object 建置一組範本參數，並傳回具有查詢字串的 AWS 簡易每月計算器 URL，該字串說明執行範本所需的資源。範本是從提供的內容中剖析，具有自訂參數 (此範例假設範本內容已宣告兩個參數：'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 參考 (V4)*》中的 [EstimateTemplateCost](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `New-CFNStack`。

**Tools for PowerShell V4**  
**範例 1：使用指定的名稱建立新堆疊。範本是根據提供的內容和自訂參數 ('PK1' 和 'PK2' 代表範本內容中宣告的參數名稱，'PV1' 和 'PV2' 代表這些參數的值) 進行剖析。自訂參數也可以使用 'Key' 和 'Value' (而不是 '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' 代表這些參數的值) 進行剖析。自訂參數也可以使用 'Key' 和 'Value' (而不是 '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：使用指定的名稱建立新堆疊。範本是從具有自訂參數 ('PK1' 代表範本內容中宣告的參數名稱，'PV1' 代表參數的值) 的 Amazon S3 URL 取得。自訂參數也可以使用 'Key' 和 'Value' (而不是 '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：使用指定的名稱建立新堆疊。範本是從具有自訂參數 ('PK1' 代表範本內容中宣告的參數名稱，'PV1' 代表參數的值) 的 Amazon S3 URL 取得。自訂參數也可以使用 'Key' 和 'Value' (而不是 'ParameterKey' 和 'ParameterValue') 來指定。如果建立堆疊失敗，則會還原 (與指定 -DisableRollback \$1false 相同)。指定的通知 AEN 會收到已發佈的堆疊相關事件。**  

```
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 參考 (V4)》**中的 [CreateStack](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Remove-CFNStack`。

**Tools for PowerShell V4**  
**範例 1：刪除指定的堆疊。**  

```
Remove-CFNStack -StackName "myStack"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [DeleteStack](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Resume-CFNUpdateRollback`。

**Tools for PowerShell V4**  
**範例 1：繼續還原具名堆疊，其應處於 'UPDATE\$1ROLLBACK\$1FAILED' 狀態。如果繼續還原成功，堆疊將進入狀態 'UPDATE\$1ROLLBACK\$1COMPLETE'。**  

```
Resume-CFNUpdateRollback -StackName "myStack"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [ContinueUpdateRollback](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Stop-CFNUpdateStack`。

**Tools for PowerShell V4**  
**範例 1：取消指定堆疊的更新。**  

```
Stop-CFNUpdateStack -StackName "myStack"
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [CancelUpdateStack](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Test-CFNStack`。

**Tools for PowerShell V4**  
**範例 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 參考 (V4)》**中的 [Test-CFNStack](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Test-CFNTemplate`。

**Tools for PowerShell V4**  
**範例 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 參考 (V4)》**中的 [ValidateTemplate](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Update-CFNStack`。

**Tools for PowerShell V4**  
**範例 1：使用指定的範本和自訂參數更新堆疊 'myStack'。'PK1' 代表範本中宣告的參數名稱，而 'PV1' 代表其值。自訂參數也可以使用 'Key' 和 'Value' (而不是 'ParameterKey' 和 'ParameterValue') 來指定。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateBody "{Template Content Here}" `
                -Parameter @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**範例 2：使用指定的範本和自訂參數更新堆疊 'myStack'。'PK1' 和 'PK2' 代表範本中宣告的參數名稱，'PV1' 和 'PV2' 代表其請求的值。自訂參數也可以使用 'Key' 和 'Value' (而不是 'ParameterKey' 和 'ParameterValue') 來指定。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateBody "{Template Content Here}" `
                -Parameter @( @{ ParameterKey="PK1"; ParameterValue="PV1" }, @{ ParameterKey="PK2"; ParameterValue="PV2" } )
```
**範例 3：使用指定的範本和自訂參數更新堆疊 'myStack'。'PK1' 代表範本中宣告的參數名稱，而 'PV2' 代表其值。自訂參數也可以使用 'Key' 和 'Value' (而不是 'ParameterKey' 和 'ParameterValue') 來指定。**  

```
Update-CFNStack -StackName "myStack" -TemplateBody "{Template Content Here}" -Parameters @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**範例 4：使用從 Amazon S3 取得的指定範本和自訂參數來更新堆疊 'myStack'。'PK1' 和 'PK2' 代表範本中宣告的參數名稱，'PV1' 和 'PV2' 代表其請求的值。自訂參數也可以使用 'Key' 和 'Value' (而不是 '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：更新堆疊 'myStack'，在本範例中假設包含 IAM 資源，具有從 Amazon S3 取得的指定範本和自訂參數。'PK1' 和 'PK2' 代表範本中宣告的參數名稱，'PV1' 和 'PV2' 代表其請求的值。自訂參數也可以使用 'Key' 和 'Value' (而不是 '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 參考 (V4)》**中的 [UpdateStack](https://docs.aws.amazon.com/powershell/v4/reference)。

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

以下程式碼範例顯示如何使用 `Wait-CFNStack`。

**Tools for PowerShell V4**  
**範例 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 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [Wait-CFNStack](https://docs.aws.amazon.com/powershell/v4/reference)。