

# AWS CLI および PowerShell の CloudFormation スタックオペレーションコマンドの例
<a name="service_code_examples"></a>

次のコマンドライン例は、AWS CLI と PowerShell を使用して個々の CloudFormation アクションを実行する方法を示しています。これらの例には、最も一般的に使用されるアクションのみ含まれています。完全なリストについては、「*AWS CLI コマンドリファレンス*」の「[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/)」を参照してください。

このガイドの例では、バックスラッシュ (\$1) の規則を使用して、長いコマンドラインが次の行に続くことを示します。

**Topics**
+ [スタックの更新をキャンセルする](#cancel-update-stack-sdk)
+ [更新のロールバックを続ける](#continue-update-rollback-sdk)
+ [Stack を作成する](#create-stack-sdk)
+ [変換が含まれるスタックを作成する](#deploy-sdk)
+ [スタックを削除する](#delete-stack-sdk)
+ [スタックイベントを記述する](#describe-stack-events-sdk)
+ [スタックリソースを記述する](#describe-stack-resource-sdk)
+ [スタックリソースを記述する](#describe-stack-resources-sdk)
+ [スタックを記述する](#describe-stacks-sdk)
+ [テンプレートを取得する](#get-template-sdk)
+ [スタックリソースを一覧表示する](#list-stack-resources-sdk)
+ [スタックを一覧表示する](#list-stacks-sdk)
+ [スタックを更新する](#update-stack-sdk)
+ [テンプレートを検証する](#validate-template-sdk)
+ [AWS CLI を使用してローカルアーティファクトを S3 バケットにアップロードする](using-cfn-cli-package.md)

## スタックの更新をキャンセルする
<a name="cancel-update-stack-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/cancel-update-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/cancel-update-stack.html) コマンドを使用して、スタックの更新をキャンセルします。詳細については、「[スタック更新をキャンセルする](using-cfn-stack-update-cancel.md)」を参照してください。

------
#### [ CLI ]

**AWS CLI**  
**進行中のスタック更新をキャンセルする方法**  
以下の `cancel-update-stack` コマンドは、`myteststack` スタックで行われているスタック更新をキャンセルします。  

```
aws cloudformation cancel-update-stack --stack-name myteststack
```
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[CancelUpdateStack](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/cancel-update-stack.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 指定されたスタックで行われている更新をキャンセルします。**  

```
Stop-CFNUpdateStack -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V4)*」の「[CancelUpdateStack](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 指定されたスタックで行われている更新をキャンセルします。**  

```
Stop-CFNUpdateStack -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V5)*」の「[CancelUpdateStack](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

## 更新のロールバックを続ける
<a name="continue-update-rollback-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/continue-update-rollback.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/continue-update-rollback.html) コマンドを使用して更新のロールバックを続行します。詳細については、「[更新のロールバックを続ける](using-cfn-updating-stacks-continueupdaterollback.md)」を参照してください。

------
#### [ CLI ]

**AWS CLI**  
**更新のロールバックを再試行する**  
以下の `continue-update-rollback` の例は、前回失敗したスタック更新からのロールバック操作を再開します。  

```
aws cloudformation continue-update-rollback \
    --stack-name my-stack
```
このコマンドでは何も出力されません。  
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[ContinueUpdateRollback](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/continue-update-rollback.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 指定されたスタックのロールバックを続行します。このスタックの状態は「UPDATE\$1ROLLBACK\$1FAILED」になっている必要があります。続行されたロールバックが成功すると、スタックの状態が「UPDATE\$1ROLLBACK\$1COMPLETE」になります。**  

```
Resume-CFNUpdateRollback -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V4)*」の「[ContinueUpdateRollback](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 指定されたスタックのロールバックを続行します。このスタックの状態は「UPDATE\$1ROLLBACK\$1FAILED」になっている必要があります。続行されたロールバックが成功すると、スタックの状態が「UPDATE\$1ROLLBACK\$1COMPLETE」になります。**  

```
Resume-CFNUpdateRollback -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V5)*」の「[ContinueUpdateRollback](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

## Stack を作成する
<a name="create-stack-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) コマンドを使用してスタックを作成します。スタック名、有効なテンプレートの場所、入力パラメーターが必要です。パラメータキーの名前では大文字と小文字が区別されます。パラメータキーの名前を誤って入力した場合、CloudFormation はスタックを作成せず、テンプレートにそのパラメータが含まれていないことを報告します。

以下の例は、指定された名前、テンプレート、および入力パラメータを使用して新しいスタックを作成する方法を示しています。

------
#### [ CLI ]

**AWS CLI**  
**AWS CloudFormation スタックを作成する方法**  
次の `create-stacks` コマンドは、`sampletemplate.json` テンプレートを使用して「`myteststack`」という名称のスタックを作成します。  

```
aws cloudformation create-stack --stack-name myteststack --template-body file://sampletemplate.json --parameters ParameterKey=KeyPairName,ParameterValue=TestKey ParameterKey=SubnetIDs,ParameterValue=SubnetID1\\,SubnetID2
```
出力:  

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
```
詳細については、「AWS CloudFormation ユーザーガイド」の「スタック」を参照してください。**  
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[CreateStack](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/create-stack.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 指定された名前を使用して新しいスタックを作成します。テンプレートは、カスタマイゼーションパラメータを使用して、提供されたコンテンツから解析されます (「PK1」と「PK2」はテンプレートコンテンツで宣言されたパラメータの名前を表し、「PV1」と「PV2」はこれらのパラメータの値を表します)。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。スタックの作成に失敗しても、スタックはロールバックされません。**  

```
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」の代わりに、「Key」と「Value」を使用して指定することもできます。スタックの作成に失敗すると、スタックがロールバックされます。**  

```
$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」の代わりに、「Key」と「Value」を使用して指定することもできます。スタックの作成に失敗すると、スタックがロールバックされます (-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」の代わりに、「Key」と「Value」を使用して指定することもできます。スタックの作成に失敗すると、スタックがロールバックされます (-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 Reference (V4)*」の「[CreateStack](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 指定された名前を使用して新しいスタックを作成します。テンプレートは、カスタマイゼーションパラメータを使用して、提供されたコンテンツから解析されます (「PK1」と「PK2」はテンプレートコンテンツで宣言されたパラメータの名前を表し、「PV1」と「PV2」はこれらのパラメータの値を表します)。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。スタックの作成に失敗しても、スタックはロールバックされません。**  

```
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」の代わりに、「Key」と「Value」を使用して指定することもできます。スタックの作成に失敗すると、スタックがロールバックされます。**  

```
$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」の代わりに、「Key」と「Value」を使用して指定することもできます。スタックの作成に失敗すると、スタックがロールバックされます (-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」の代わりに、「Key」と「Value」を使用して指定することもできます。スタックの作成に失敗すると、スタックがロールバックされます (-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 Reference (V5)*」の「[CreateStack](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

**注記**  
AWS CLI `--template-url` オプションを使用して、Amazon S3 または AWS Systems Manager のテンプレートファイルの場所を指定できます。  
Amazon S3 の場合、URL は `https://` で始まる必要があります。S3 静的ウェブサイトの URL はサポートされていません。  

```
--template-url https://s3.region-code.amazonaws.com/bucket-name/template-name
```
AWS Systems Manager には次の形式を使用します。  

```
--template-url "ssm-doc://arn:aws:ssm:region-code:account-id:document/document-name"
```

## 変換が含まれるスタックを作成する
<a name="deploy-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/) コマンドを使用して、変換が含まれるスタックを作成します。変換が含まれるテンプレートからスタックを作成するときには、変更セットを使用する必要があります。`deploy` コマンドは、2 つのステップ (変更セットを作成して実行する) を 1 つのコマンドにまとめます。

------
#### [ AWS CLI ]

以下の `deploy` コマンドは、指定された名前、テンプレート、および入力パラメータを使用してスタックを作成します。

```
aws cloudformation deploy --stack-name myteststack \
  --template /path_to_template/my-template.json \
  --parameter-overrides Key1=Value1 Key2=Value2
```

------

## スタックを削除する
<a name="delete-stack-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-stack.html) コマンドを使用してスタックを削除します。詳細については、「[スタックを削除する](cfn-console-delete-stack.md)」を参照してください。

------
#### [ CLI ]

**AWS CLI**  
**スタックを削除する方法**  
以下の `delete-stack` 例は、指定されたスタックを削除します。  

```
aws cloudformation delete-stack \
    --stack-name my-stack
```
このコマンドでは何も出力されません。  
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[DeleteStack](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/delete-stack.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 指定されたスタックを削除します。**  

```
Remove-CFNStack -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V4)*」の「[DeleteStack](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 指定されたスタックを削除します。**  

```
Remove-CFNStack -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V5)*」の「[DeleteStack](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

削除が失敗して `DELETE_FAILED` 状態が返された場合は、`--deletion-mode` オプションを強制的に使用することでスタックの削除を選択できます。`deletion-mode` で使用できる値は次のとおりです:
+ `STANDARD`: スタックを通常どおり削除します。これはデフォルトの削除モードです。
+ `FORCE_DELETE_STACK`: スタックを削除し、削除に失敗したすべてのリソースをスキップします。

------
#### [ AWS CLI ]

次の `delete-stack` コマンドは、`deletion-mode` パラメータの `FORCE_DELETE_STACK` 値を使用して `myteststack` スタックを強制的に削除します。

```
aws cloudformation delete-stack --stack-name myteststack \
    --deletion-mode FORCE_DELETE_STACK
```

このコマンドでは何も出力されません。

------

`FORCE_DELETE_STACK` を使用した後は、`list-stack-resources` コマンドを使用して、スタックの削除プロセス中にスキップされたリソースを一覧表示することができます。保持されたリソースには DELETE\$1SKIPPED ステータスが表示されます。詳細については、「[スタックリソースを一覧表示する](#list-stack-resources-sdk)」を参照してください。

## スタックイベントを記述する
<a name="describe-stack-events-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-events.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-events.html) コマンドを使用して、スタックイベントを記述します。詳細については、「[スタックの進行状況を監視する](monitor-stack-progress.md)」を参照してください。

------
#### [ CLI ]

**AWS CLI**  
**スタックイベントを記述する方法**  
次の `describe-stack-events` の例は、指定されたスタックの最新イベントを 2 件表示します。  

```
aws cloudformation describe-stack-events \
    --stack-name my-stack \
    --max-items 2

{
    "StackEvents": [
        {
            "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
            "EventId": "4e1516d0-e4d6-xmpl-b94f-0a51958a168c",
            "StackName": "my-stack",
            "LogicalResourceId": "my-stack",
            "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
            "ResourceType": "AWS::CloudFormation::Stack",
            "Timestamp": "2019-10-02T05:34:29.556Z",
            "ResourceStatus": "UPDATE_COMPLETE"
        },
        {
            "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
            "EventId": "4dd3c810-e4d6-xmpl-bade-0aaf8b31ab7a",
            "StackName": "my-stack",
            "LogicalResourceId": "my-stack",
            "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
            "ResourceType": "AWS::CloudFormation::Stack",
            "Timestamp": "2019-10-02T05:34:29.127Z",
            "ResourceStatus": "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS"
        }
    ],
    "NextToken": "eyJOZXh0VG9XMPLiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAyfQ=="
}
```
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[DescribeStackEvents](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/describe-stack-events.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 指定されたスタックに関するすべてのスタック関連イベントを返します。**  

```
Get-CFNStackEvent -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V4)*」の「[DescribeStackEvents](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 指定されたスタックに関するすべてのスタック関連イベントを返します。**  

```
Get-CFNStackEvent -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V5)*」の「[DescribeStackEvents](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

## スタックリソースを記述する
<a name="describe-stack-resource-sdk"></a>

------
#### [ CLI ]

**AWS CLI**  
**リソースに関する情報を取得する方法**  
次の `describe-stack-resource` の例は、指定されたスタック内にある「`MyFunction`」という名称のリソースに関する詳細情報を表示します。  

```
aws cloudformation describe-stack-resource \
    --stack-name MyStack \
    --logical-resource-id MyFunction
```
出力:  

```
{
    "StackResourceDetail": {
        "StackName": "MyStack",
        "StackId": "arn:aws:cloudformation:us-east-2:123456789012:stack/MyStack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
        "LogicalResourceId": "MyFunction",
        "PhysicalResourceId": "my-function-SEZV4XMPL4S5",
        "ResourceType": "AWS::Lambda::Function",
        "LastUpdatedTimestamp": "2019-10-02T05:34:27.989Z",
        "ResourceStatus": "UPDATE_COMPLETE",
        "Metadata": "{}",
        "DriftInformation": {
            "StackResourceDriftStatus": "IN_SYNC"
        }
    }
}
```
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[DescribeStackResource](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/describe-stack-resource.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 論理 ID「MyDBInstance」を使用して、指定されたスタックに関連付けられているテンプレートで識別されたリソースの説明を返します。**  

```
Get-CFNStackResource -StackName "myStack" -LogicalResourceId "MyDBInstance"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V4)*」の「[DescribeStackResource](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 論理 ID「MyDBInstance」を使用して、指定されたスタックに関連付けられているテンプレートで識別されたリソースの説明を返します。**  

```
Get-CFNStackResource -StackName "myStack" -LogicalResourceId "MyDBInstance"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V5)*」の「[DescribeStackResource](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

## スタックリソースを記述する
<a name="describe-stack-resources-sdk"></a>

------
#### [ CLI ]

**AWS CLI**  
**リソースに関する情報を取得する方法**  
次の `describe-stack-resources` 例は、指定されたスタック内にあるリソースの詳細情報を表示します。  

```
aws cloudformation describe-stack-resources \
    --stack-name my-stack
```
出力:  

```
{
    "StackResources": [
        {
            "StackName": "my-stack",
            "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
            "LogicalResourceId": "bucket",
            "PhysicalResourceId": "my-stack-bucket-1vc62xmplgguf",
            "ResourceType": "AWS::S3::Bucket",
            "Timestamp": "2019-10-02T04:34:11.345Z",
            "ResourceStatus": "CREATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "IN_SYNC"
            }
        },
        {
            "StackName": "my-stack",
            "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
            "LogicalResourceId": "function",
            "PhysicalResourceId": "my-function-SEZV4XMPL4S5",
            "ResourceType": "AWS::Lambda::Function",
            "Timestamp": "2019-10-02T05:34:27.989Z",
            "ResourceStatus": "UPDATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "IN_SYNC"
            }
        },
        {
            "StackName": "my-stack",
            "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/my-stack/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
            "LogicalResourceId": "functionRole",
            "PhysicalResourceId": "my-functionRole-HIZXMPLEOM9E",
            "ResourceType": "AWS::IAM::Role",
            "Timestamp": "2019-10-02T04:34:06.350Z",
            "ResourceStatus": "CREATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "IN_SYNC"
            }
        }
    ]
}
```
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[DescribeStackResources](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/describe-stack-resources.html)」を参照してください。

------
#### [ PowerShell ]

**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: インスタンス 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 Reference (V4)*」の「[DescribeStackResources](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for 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 Reference (V5)*」の「[DescribeStackResources](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

## スタックを記述する
<a name="describe-stacks-sdk"></a>

------
#### [ CLI ]

**AWS CLI**  
**AWS CloudFormation スタックを記述する方法**  
以下の `describe-stacks` 例は、`myteststack` スタックの概要情報を表示します。  

```
aws cloudformation describe-stacks --stack-name myteststack
```
出力:  

```
{
    "Stacks":  [
        {
            "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
            "Description": "AWS CloudFormation Sample Template S3_Bucket: Sample template showing how to create a publicly accessible S3 bucket. **WARNING** This template creates an S3 bucket. You will be billed for the AWS resources used if you create a stack from this template.",
            "Tags": [],
            "Outputs": [
                {
                    "Description": "Name of S3 bucket to hold website content",
                    "OutputKey": "BucketName",
                    "OutputValue": "myteststack-s3bucket-jssofi1zie2w"
                }
            ],
            "StackStatusReason": null,
            "CreationTime": "2013-08-23T01:02:15.422Z",
            "Capabilities": [],
            "StackName": "myteststack",
            "StackStatus": "CREATE_COMPLETE",
            "DisableRollback": false
        }
    ]
}
```
詳細については、「*AWS CloudFormation ユーザーガイド*」の「スタック」を参照してください。  
+  API の詳細については、「AWS CLI コマンドリファレンス」の「[DescribeStacks](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/describe-stacks.html)」を参照してください。

------
#### [ Go ]

**SDK for Go V2**  
 GitHub には、その他のリソースもあります。[AWS コード例リポジトリ](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/workflows/user_pools_and_lambda_triggers#code-examples)で完全な例を見つけて、設定と実行の方法を確認してください。

```
import (
	"context"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/cloudformation"
)

// StackOutputs defines a map of outputs from a specific stack.
type StackOutputs map[string]string

type CloudFormationActions struct {
	CfnClient *cloudformation.Client
}

// GetOutputs gets the outputs from a CloudFormation stack and puts them into a structured format.
func (actor CloudFormationActions) GetOutputs(ctx context.Context, stackName string) StackOutputs {
	output, err := actor.CfnClient.DescribeStacks(ctx, &cloudformation.DescribeStacksInput{
		StackName: aws.String(stackName),
	})
	if err != nil || len(output.Stacks) == 0 {
		log.Panicf("Couldn't find a CloudFormation stack named %v. Here's why: %v\n", stackName, err)
	}
	stackOutputs := StackOutputs{}
	for _, out := range output.Stacks[0].Outputs {
		stackOutputs[*out.OutputKey] = *out.OutputValue
	}
	return stackOutputs
}
```
+  API の詳細については、「*AWS SDK for Go API リファレンス*」の「[DescribeStacks](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/cloudformation#Client.DescribeStacks)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: ユーザーのスタックのすべてを記述するスタックインスタンスのコレクションを返します。**  

```
Get-CFNStack
```
**例 2: 指定されたスタックを記述するスタックインスタンスを返します。**  

```
Get-CFNStack -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V4)*」の「[DescribeStacks](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: ユーザーのスタックのすべてを記述するスタックインスタンスのコレクションを返します。**  

```
Get-CFNStack
```
**例 2: 指定されたスタックを記述するスタックインスタンスを返します。**  

```
Get-CFNStack -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V5)*」の「[DescribeStacks](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

デフォルトでは、`describe-stacks` コマンドはパラメータの値が返します。パスワードなど、機密を要するパラメータ値が返されないようにするには、CloudFormation テンプレートで、`NoEcho` プロパティを `TRUE` に設定します。

**重要**  
`NoEcho` 属性を使用しても、以下に保存されている情報はマスクされません。  
`Metadata` テンプレートセクション。CloudFormation は、`Metadata` セクションに含める情報の変換、変更、または編集を行いません。詳細については、「[メタデータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html)」を参照してください。
`Outputs` テンプレートセクション。詳細については、「[出力](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html)」を参照してください。
リソース定義の `Metadata` 属性。詳細については、「[`Metadata` 属性](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-metadata.html)」を参照してください。
パスワードやシークレットなどの機密情報を含めるには、これらのメカニズムを使用しないことを強くお勧めします。

**重要**  
機密情報は、CloudFormation テンプレートに直接埋め込むのではなく、スタックテンプレートの動的パラメータを使用して CloudFormation の外部 (AWS Systems Manager パラメータストアや AWS Secrets Manager など) に保存して管理した上で 参照することをお勧めします。  
詳細については、「[テンプレートに認証情報を埋め込まない](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/security-best-practices.html#creds)」のベストプラクティスを参照してください。

## テンプレートを取得する
<a name="get-template-sdk"></a>

------
#### [ CLI ]

**AWS CLI**  
**AWS CloudFormation スタックのテンプレート本文を表示する方法**  
以下の `get-template` の例は、`myteststack` スタックのテンプレートを示しています。  

```
aws cloudformation get-template --stack-name myteststack
```
出力:  

```
{
    "TemplateBody": {
        "AWSTemplateFormatVersion": "2010-09-09",
        "Outputs": {
            "BucketName": {
                "Description": "Name of S3 bucket to hold website content",
                "Value": {
                    "Ref": "S3Bucket"
                }
            }
        },
        "Description": "AWS CloudFormation Sample Template S3_Bucket: Sample template showing how to create a publicly accessible S3 bucket. **WARNING** This template creates an S3 bucket. You will be billed for the AWS resources used if you create a stack from this template.",
        "Resources": {
            "S3Bucket": {
                "Type": "AWS::S3::Bucket",
                "Properties": {
                    "AccessControl": "PublicRead"
                }
            }
        }
    }
}
```
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[GetTemplate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/get-template.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 指定されたスタックに関連付けられているテンプレートを返します。**  

```
Get-CFNTemplate -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V4)*」の「[GetTemplate](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 指定されたスタックに関連付けられているテンプレートを返します。**  

```
Get-CFNTemplate -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V5)*」の「[GetTemplate](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

## スタックリソースを一覧表示する
<a name="list-stack-resources-sdk"></a>

------
#### [ CLI ]

**AWS CLI**  
**スタック内のリソースを一覧表示する方法**  
以下のコマンドは、指定されたスタック内にあるリソースを一覧表示します。  

```
aws cloudformation list-stack-resources \
    --stack-name my-stack
```
出力:  

```
{
    "StackResourceSummaries": [
        {
            "LogicalResourceId": "bucket",
            "PhysicalResourceId": "my-stack-bucket-1vc62xmplgguf",
            "ResourceType": "AWS::S3::Bucket",
            "LastUpdatedTimestamp": "2019-10-02T04:34:11.345Z",
            "ResourceStatus": "CREATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "IN_SYNC"
            }
        },
        {
            "LogicalResourceId": "function",
            "PhysicalResourceId": "my-function-SEZV4XMPL4S5",
            "ResourceType": "AWS::Lambda::Function",
            "LastUpdatedTimestamp": "2019-10-02T05:34:27.989Z",
            "ResourceStatus": "UPDATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "IN_SYNC"
            }
        },
        {
            "LogicalResourceId": "functionRole",
            "PhysicalResourceId": "my-functionRole-HIZXMPLEOM9E",
            "ResourceType": "AWS::IAM::Role",
            "LastUpdatedTimestamp": "2019-10-02T04:34:06.350Z",
            "ResourceStatus": "CREATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "IN_SYNC"
            }
        }
    ]
}
```
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[ListStackResources](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/list-stack-resources.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 指定されたスタックに関連付けられているすべてのリソースの説明を返します。**  

```
Get-CFNStackResourceSummary -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V4)*」の「[ListStackResources](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 指定されたスタックに関連付けられているすべてのリソースの説明を返します。**  

```
Get-CFNStackResourceSummary -StackName "myStack"
```
+  API の詳細については、「*AWS Tools for PowerShell Cmdlet Reference (V5)*」の「[ListStackResources](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

## スタックを一覧表示する
<a name="list-stacks-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stacks.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stacks.html) コマンドを使用して、スタックを一覧表示します。指定されたステータスコードを持つスタックだけを一覧表示するには、`--stack-status-filter` オプションを含めてください。`--stack-status-filter` オプションには、1 つ、または複数のスタックステータスコードを指定できます。詳細については、「[スタックステータスコード](view-stack-events.md#cfn-console-view-stack-data-resources-status-codes)」を参照してください。

------
#### [ CLI ]

**AWS CLI**  
**AWS CloudFormation スタックを一覧表示する方法**  
以下の `list-stacks` コマンドは、ステータスが `CREATE_COMPLETE` になっているすべてのスタックの概要を表示します。  

```
aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE
```
出力:  

```
[
    {
        "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
        "TemplateDescription": "AWS CloudFormation Sample Template S3_Bucket: Sample template showing how to create a publicly accessible S3 bucket. **WARNING** This template creates an S3 bucket. You will be billed for the AWS resources used if you create a stack from this template.",
        "StackStatusReason": null,
        "CreationTime": "2013-08-26T03:27:10.190Z",
        "StackName": "myteststack",
        "StackStatus": "CREATE_COMPLETE"
    }
]
```
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[ListStacks](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/list-stacks.html)」を参照してください。

------
#### [ PowerShell ]

**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 Reference (V4)*」の「[ListStacks](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for 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 Reference (V5)*」の「[ListStacks](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

## スタックを更新する
<a name="update-stack-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html) コマンドを使用して、スタックを直接更新します。更新するスタック、パラメータ値、機能を指定し、更新されたテンプレートを使用する場合はテンプレートの名前も指定します。詳細については、「[スタックを直接更新する](using-cfn-updating-stacks-direct.md)」を参照してください。

------
#### [ CLI ]

**AWS CLI**  
**AWS CloudFormation スタックを更新する方法**  
以下の `update-stack` コマンドは、`mystack` スタックのテンプレートと入力パラメータを更新します。  

```
aws cloudformation update-stack --stack-name mystack --template-url https://s3.amazonaws.com/sample/updated.template --parameters ParameterKey=KeyPairName,ParameterValue=SampleKeyPair ParameterKey=SubnetIDs,ParameterValue=SampleSubnetID1\\,SampleSubnetID2
```
以下の `update-stack` コマンドは、`mystack` スタックの `SubnetIDs` パラメータ値のみを更新します。パラメータ値を指定しない場合は、テンプレートで指定されているデフォルト値が使用されます。  

```
aws cloudformation update-stack --stack-name mystack --template-url https://s3.amazonaws.com/sample/updated.template --parameters ParameterKey=KeyPairName,UsePreviousValue=true ParameterKey=SubnetIDs,ParameterValue=SampleSubnetID1\\,UpdatedSampleSubnetID2
```
以下の `update-stack` コマンドは、`mystack` スタックに 2 つのスタック通知トピックを追加します。  

```
aws cloudformation update-stack --stack-name mystack --use-previous-template --notification-arns "arn:aws:sns:use-east-1:123456789012:mytopic1" "arn:aws:sns:us-east-1:123456789012:mytopic2"
```
詳細については、「*AWSCloudFormation ユーザーガイド*」の「[AWSCloudFormation スタックの更新](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html)」を参照してください。  
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[UpdateStack](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/update-stack.html)」を参照してください。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**例 1: 指定されたテンプレートとカスタマイゼーションパラメータでスタック「MyStack」を更新します。「PK1」はテンプレートで宣言されているパラメータの名前を表し、「PV1」はその値を表します。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateBody "{Template Content Here}" `
                -Parameter @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**例 2: 指定されたテンプレートとカスタマイゼーションパラメータでスタック「MyStack」を更新します。「PK1」と「PK2」はテンプレートで宣言されているパラメータの名前を表し、「PV1」と「PV2」はそれらの要求された値を表します。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateBody "{Template Content Here}" `
                -Parameter @( @{ ParameterKey="PK1"; ParameterValue="PV1" }, @{ ParameterKey="PK2"; ParameterValue="PV2" } )
```
**例 3: 指定されたテンプレートとカスタマイゼーションパラメータでスタック「MyStack」を更新します。「PK1」はテンプレートで宣言されているパラメータの名前を表し、「PV2」はその値を表します。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。**  

```
Update-CFNStack -StackName "myStack" -TemplateBody "{Template Content Here}" -Parameters @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**例 4: 指定されたテンプレート (Amazon S3 から取得されたもの) とカスタマイゼーションパラメータでスタック「MyStack」を更新します。「PK1」と「PK2」はテンプレートで宣言されているパラメータの名前を表し、「PV1」と「PV2」はそれらの要求された値を表します。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。**  

```
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」の代わりに、「Key」と「Value」を使用して指定することもできます。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 Reference (V4)*」の「[UpdateStack](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for PowerShell V5**  
**例 1: 指定されたテンプレートとカスタマイゼーションパラメータでスタック「MyStack」を更新します。「PK1」はテンプレートで宣言されているパラメータの名前を表し、「PV1」はその値を表します。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateBody "{Template Content Here}" `
                -Parameter @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**例 2: 指定されたテンプレートとカスタマイゼーションパラメータでスタック「MyStack」を更新します。「PK1」と「PK2」はテンプレートで宣言されているパラメータの名前を表し、「PV1」と「PV2」はそれらの要求された値を表します。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。**  

```
Update-CFNStack -StackName "myStack" `
                -TemplateBody "{Template Content Here}" `
                -Parameter @( @{ ParameterKey="PK1"; ParameterValue="PV1" }, @{ ParameterKey="PK2"; ParameterValue="PV2" } )
```
**例 3: 指定されたテンプレートとカスタマイゼーションパラメータでスタック「MyStack」を更新します。「PK1」はテンプレートで宣言されているパラメータの名前を表し、「PV2」はその値を表します。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。**  

```
Update-CFNStack -StackName "myStack" -TemplateBody "{Template Content Here}" -Parameters @{ ParameterKey="PK1"; ParameterValue="PV1" }
```
**例 4: 指定されたテンプレート (Amazon S3 から取得されたもの) とカスタマイゼーションパラメータでスタック「MyStack」を更新します。「PK1」と「PK2」はテンプレートで宣言されているパラメータの名前を表し、「PV1」と「PV2」はそれらの要求された値を表します。カスタマイゼーションパラメータは、「ParameterKey」と「ParameterValue」の代わりに、「Key」と「Value」を使用して指定することもできます。**  

```
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」の代わりに、「Key」と「Value」を使用して指定することもできます。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 Reference (V5)*」の「[UpdateStack](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

**注記**  
すべての通知を削除するには、`--notification-arns` オプションに `[]` を指定します。

## テンプレートを検証する
<a name="validate-template-sdk"></a>

[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/validate-template.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/validate-template.html) コマンドを使用して、テンプレートファイルの構文エラーをチェックします。

検証中に、CloudFormation はテンプレートが有効な JSON であるかどうかをまず確認します。そうでない場合は、CloudFormation はテンプレートが有効な YAML であるかどうかを確認します。両方のチェックが失敗すると、CloudFormation はテンプレートの検証エラーを返します。

------
#### [ CLI ]

**AWS CLI**  
**AWS CloudFormation テンプレートを検証する方法**  
以下の `validate-template` コマンドは、`sampletemplate.json` テンプレートを検証します。  

```
aws cloudformation validate-template --template-body file://sampletemplate.json
```
出力:  

```
{
    "Description": "AWS CloudFormation Sample Template S3_Bucket: Sample template showing how to create a publicly accessible S3 bucket. **WARNING** This template creates an S3 bucket. You will be billed for the AWS resources used if you create a stack from this template.",
    "Parameters": [],
    "Capabilities": []
}
```
詳細については、「*AWSCloudFormation ユーザーガイド*」の「AWS CloudFormation テンプレートの使用」を参照してください。  
+  API の詳細については、「*AWS CLI コマンドリファレンス*」の「[ValidateTemplate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/validate-template.html)」を参照してください。

------
#### [ PowerShell ]

**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 Reference (V4)*」の「[ValidateTemplate](https://docs.aws.amazon.com/powershell/v4/reference)」を参照してください。

**Tools for 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 Reference (V5)*」の「[ValidateTemplate](https://docs.aws.amazon.com/powershell/v5/reference)」を参照してください。

------

以下は、検証エラーを生成する応答の例です。

```
{
    "ResponseMetadata": {
        "RequestId": "4ae33ec0-1988-11e3-818b-e15a6df955cd"
    },
    "Errors": [
        {
            "Message": "Template format error: JSON not well-formed. (line 11, column 8)",
            "Code": "ValidationError",
            "Type": "Sender"
        }
    ],
    "Capabilities": [],
    "Parameters": []
}
A client error (ValidationError) occurred: Template format error: JSON not well-formed. (line 11, column 8)
```

**注記**  
`validate-template` コマンドは、テンプレートの構文のみをチェックするように設計されています。リソースに対して指定したプロパティ値が、そのリソースに対して有効であるかどうかは保証されません。また、スタックの作成時に存在するリソースの数も決定しません。  
動作の妥当性を確認するには、スタックの作成を試みる必要があります。CloudFormation スタックにはサンドボックスやテスト領域がないため、テスト中に作成したリソースに対して課金されます。

**可用性の例**  
必要なものが見つからなかった場合。このページの下部にある **[フィードバックを送信]** リンクを使用して、新しい例をリクエストしてください。

# AWS CLI を使用してローカルアーティファクトを S3 バケットにアップロードする
<a name="using-cfn-cli-package"></a>

AWS CLI を使用して、CloudFormation テンプレートで参照されるローカルアーティファクトを Amazon S3 バケットにアップロードできます。ローカルアーティファクトは、テンプレートで参照するファイルです。ファイルを手動で S3 バケットにアップロードしてからテンプレートにその場所を追加する代わりに、ローカルアーティファクトをテンプレート内で指定し、[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) コマンドを使用してすばやくアップロードできます。

ローカルアーティファクトは、**package** コマンドが Amazon S3 にアップロードしたファイルまたはフォルダへのパスです。例えば、アーティファクトは AWS Lambda 関数のソースコードへのローカルパスであったり、Amazon API Gateway REST API の OpenAPI ファイルであったりします。

**package** コマンドを使用する場合:
+ ファイルを指定する場合、コマンドはそれを S3 バケットに直接アップロードします。
+ フォルダを指定すると、コマンドはフォルダの `.zip` ファイルを作成し、その `.zip` ファイルをアップロードします。
+ パスを指定しない場合、コマンドは作業ディレクトリの `.zip` ファイルを作成し、アップロードします。

絶対パスまたは相対パスを指定できます。相対パスはテンプレートの場所からの相対です。

アーティファクトをアップロードしたら、コマンドはテンプレートのコピーを返します。その中で、ローカルアーティファクトへの参照は、コマンドがアーティファクトをアップロードした S3 の場所に置き換えられます。返されたテンプレートを使用してスタックを作成または更新できます。

**注記**  
ローカルアーティファクトは、**package** コマンドがサポートするリソースプロパティにのみ使用できます。このコマンドとサポートされているリソースプロパティのリストの詳細については、「[AWS CLI コマンド リファレンス](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/index.html)」の「[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) ドキュメント」を参照してください。



## 前提条件
<a name="using-cfn-cli-package-prerequisites"></a>

開始する前に、既存の Amazon S3 バケットが必要です。

## ローカルアーティファクトを使用してテンプレートをパッケージ化してデプロイする
<a name="package-and-deploy-a-template-with-local-artifacts"></a>

以下のテンプレートは Lambda 関数のソースコードのローカルアーティファクトを指定します。ソースコードは `/home/user/code/lambdafunction` フォルダに保存されています。

**元のテンプレート**

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Resources": {
    "MyFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
        "Handler": "index.handler",
        "Runtime": "nodejs18.x",
        "CodeUri": "/home/user/code/lambdafunction"
      }
    }
  }
}
```

次の [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) コマンドは、関数のソースコードフォルダの `.zip` ファイルを作成し、指定されたバケットのルートにアップロードします。

```
aws cloudformation package \
  --s3-bucket amzn-s3-demo-bucket \
  --template /path_to_template/template.json \
  --output-template-file packaged-template.json \
  --output json
```

このコマンドは、`--output-template-file` で指定されたパスで新しいテンプレートを生成します。次に示すように、アーティファクトの参照を Amazon S3 の場所に置き換えます。`.zip` ファイルは、フォルダ名自体を使用するのではなく、フォルダの内容の MD5 チェックサムを使用して名前が付けられます。

**作成されるテンプレート**

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Resources": {
    "MyFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
        "Handler": "index.handler",
        "Runtime": "nodejs18.x",
        "CodeUri": "s3://amzn-s3-demo-bucket/md5 checksum"
      }
    }
  }
}
```

テンプレートのアーティファクトをパッケージ化したら、[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/) コマンドを使用して処理されたテンプレートをデプロイします。

```
aws cloudformation deploy \
  --template-file packaged-template.json \
  --stack-name stack-name
```

51,200 バイトを超えるテンプレートをデプロイする場合は、次の例のように、`--s3-bucket` オプションを指定した状態で **deploy** コマンドを使用し、テンプレートを S3 にアップロードします。

```
aws cloudformation deploy \
  --template-file packaged-template.json \
  --stack-name stack-name \
  --s3-bucket amzn-s3-demo-bucket
```

**注記**  
**package** コマンドを使用してローカルアーティファクトをアップロードする別の例については、「[ネストされたスタックを使用してテンプレートを再利用可能な部分に分割する](using-cfn-nested-stacks.md)」を参照してください。