

# ネストされたスタックの変更セット
<a name="change-sets-for-nested-stacks"></a>

*ネストされたスタックの変更セット*を使用すると、ネストされたスタック階層全体でアプリケーションとインフラストラクチャリソースに対する変更をプレビューし、すべての変更が意図したとおりに行われたことを確認してから、更新を続行できます。

 ネストされたスタックの変更セットの詳細については、次のセクションを参照してください: 

**Topics**
+ [変更セットとネストされたスタックの概要](#overview-of-change-sets-and-nested-stacks)
+ [ネストされたスタックの変更セットの操作 (コンソール)](#change-sets-for-nested-stacks-console)
+ [ネストされたスタックの変更セットの操作 (AWS CLI)](#change-sets-for-nested-stacks-cli)

## 変更セットとネストされたスタックの概要
<a name="overview-of-change-sets-and-nested-stacks"></a>

ネストされたスタックの変更セットは、次の機能を組み合わせて、スタック階層全体に対する変更をプレビューする範囲を拡大します。
+ *変更セット*は、スタックへの提案された変更が既存または新しく作成されたリソースにどのように影響するかをプレビューする CloudFormation の機能です。変更セットを作成すると、提出したリソースに対する変更とスタックを比較して、CloudFormation は提案された変更のリストを提供します。変更セットに関する詳細については、「[変更セットを使用して CloudFormation スタックを更新する](using-cfn-updating-stacks-changesets.md)」を参照してください。
+ *ネストされたスタック*は、別のスタックの一部として作成されます。たとえば、あるネストされたスタックにネットワークおよびセキュリティ関連のリソースがあり、別のスタックにアプリケーションリソースがあるとします。この方法でアプリケーションモデルをパーティション化すると、コードの保守性と再利用に役立ちます。ネストされたスタックの詳細については、「[ネストされたスタックを使用してテンプレートを再利用可能な部分に分割する](using-cfn-nested-stacks.md)」を参照してください。

## ネストされたスタックの変更セットの操作 (コンソール)
<a name="change-sets-for-nested-stacks-console"></a>
+ **変更セットを作成する** – スタック階層の任意のレベルから変更を送信して、変更セットを作成します。変更したスタックテンプレートまたは変更した入力パラメータ値を送信すると、CloudFormation はネストされたスタックを変更セットを生成するために送信した変更と比較します。ネストされたスタックの変更セットは、デフォルトで CloudFormation コンソールで有効になります。詳細については、「[CloudFormation スタックの変更セットを作成する](using-cfn-updating-stacks-changesets-create.md)」を参照してください。  
![ネストされたスタックの変更セットの作成は、デフォルトで [Enabled] (有効) になっています。](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/change-sets-for-nested-sets-enabled-default.png)
**注記**  
ルート変更セットは、変更セットの階層全体が作成されるスタックに関連付けられた変更セットです。ネストされたスタックの変更セットを、ルート変更セットから実行または削除する必要があります。詳細については、「[ネストされたスタックでのスタックオペレーションの実行](using-cfn-nested-stacks.md#perform-stack-operations-on-nested-stacks)」を参照してください。
+ **変更セットを表示**– ネストされたスタック内のリソースに対する変更を、 実行する前に可視化します。現在のスタックとそのネストされた変更セットを移動すると、変更セットの**変更**セクションに、提案された変更を表示できます。詳細については、「[CloudFormation スタックの変更セットを表示する](using-cfn-updating-stacks-changesets-view.md)」を参照してください。
+ **変更セットの実行**– 現在のスタックとその子孫に関する変更セットに記載されている変更を実行します。実行オペレーションはルート変更セットから実行する必要があります。詳細については、「[CloudFormation スタックの変更セットを実行するスタックポリシーおよび変更セットの実行](using-cfn-updating-stacks-changesets-execute.md)」を参照してください。
+ **変更セットを削除**– 現在のスタックから変更セットを削除します。変更セットを削除すると、自分または他のユーザーが誤って適用すべきでない変更セットを開始するのを防ぐことができます。削除オペレーションはルート変更セットから実行する必要があります。詳細については、「[CloudFormation スタックの変更セットを削除する](using-cfn-updating-stacks-changesets-delete.md)」を参照してください。

## ネストされたスタックの変更セットの操作 (AWS CLI)
<a name="change-sets-for-nested-stacks-cli"></a>

### create-change-set
<a name="working-with-change-sets-for-nested-stacks-cli"></a>
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-change-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-change-set.html) - ネストされたスタックの変更セットは、デフォルトで AWS CLI で有効になっていません。スタック階層全体の変更セットを作成するには、`--include-nested-stacks` オプションを指定します。詳細については、「[CloudFormation スタックの変更セットを作成する](using-cfn-updating-stacks-changesets-create.md)」を参照してください。

次の AWS CLI の例では、指定されたルートスタックの変更セットを作成します。

```
aws cloudformation create-change-set \
    --stack-name {{my-root-stack}} \
    --change-set-name {{my-root-stack-change-set}} \
    --template-body {{file://template.yaml}} \
    --capabilities CAPABILITY_IAM \
    --include-nested-stacks
```

以下は出力の例です。

```
{
    "Id":"arn:aws:cloudformation:us-west-2:123456789012:changeSet/{{my-root-stack-change-set}}/4eca1a01-e285-xmpl-8026-9a1967bfb4b0",
    "StackId": "arn:aws:cloudformation:us-west-2:123456789012:Stack/{{my-root-stack}}/d0a825a0-e4cd-xmpl-b9fb-061c69e99204"
}
```

### describe-change-set
<a name="working-with-change-set-describe-cli"></a>
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-change-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-change-set.html) – 変更セットを実行した場合に CloudFormation が行う変更のリストを返します。指定された変更セットに、ネストされたスタックに属する子変更セットが含まれている場合、`ChangeSetId` はその変更セットに関する情報を返します。詳細については、「[CloudFormation スタックの変更セットを表示する](using-cfn-updating-stacks-changesets-view.md)」を参照してください。

次の AWS CLI の例は、指定されたルートスタックの変更セットについて説明します。

```
aws cloudformation describe-change-set \
    --change-set-name {{my-root-stack-change-set}} \
    --stack-name {{my-root-stack}}
```

以下は出力の例です。

```
{
    "Changes": [
        {
            "Type": "Resource",
            "ResourceChange": {
                "Action": "Modify",
                "LogicalResourceId": "ChildStack",
                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/{{my-nested-stack}}/d0a825a0-e4cd-xmpl-b9fb-061c69e99205",
                "ResourceType": "AWS::CloudFormation::Stack",
                "Replacement": "False",
                "ChangeSetId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/{{my-nested-stack-change-set}}/4eca1a01-e285-xmpl-8026-9a1967bfb4b0",
                "Scope": [
                    "Properties"
                ],
                "Details": [
                    {
                        "Target": {
                            "Attribute": "Properties",
                            "RequiresRecreation": "Never"
                        },
                        "Evaluation": "Dynamic",
                        "ChangeSource": "Automatic"
                    }
                ]
            }
        }
    ],
    "ChangeSetName": "{{my-root-stack-change-set}}",
    "ChangeSetId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/{{my-root-stack-change-set}}/4eca1a01-e285-xmpl-8026-9a1967bfb4b0",
    "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/{{my-root-stack}}/d0a825a0-e4cd-xmpl-b9fb-061c69e99204",
    "StackName": "{{my-root-stack}}",
    "IncludeNestedStacks": true,
    "ParentChangeSetId": null,
    "RootChangeSetId": null,
    "Description": null,
    "Parameters": null,
    "CreationTime": "2020-11-18T05:20:56.651Z",
    "ExecutionStatus": "AVAILABLE",
    "Status": "CREATE_COMPLETE",
    "StatusReason": null,
    "NotificationARNs": [
        
    ],
    "RollbackConfiguration": {
        
    },
    "Capabilities": [
        "CAPABILITY_IAM"
    ],
    "Tags": null
}
```

次の AWS CLI の例は、指定された、ネストされたスタックの変更セットについて説明します。

```
aws cloudformation describe-change-set \
    --change-set-name {{my-nested-stack-change-set}} \
    --stack-name {{my-nested-stack}}
```

以下は出力の例です。

```
{
    "Changes": [
        {
            "Type": "Resource",
            "ResourceChange": {
                "Action": "Modify",
                "LogicalResourceId": "function",
                "PhysicalResourceId": "my-function",
                "ResourceType": "AWS::Lambda::Function",
                "Replacement": "False",
                "ChangeSetId": null,
                "Scope": [
                    "Properties"
                ],
                "Details": [
                    {
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "Timeout",
                            "RequiresRecreation": "Never"
                        },
                        "Evaluation": "Static",
                        "ChangeSource": "DirectModification"
                    }
                ]
            }
        }
    ],
    "ChangeSetName": "{{my-nested-stack-change-set}}",
    "ChangeSetId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/{{my-nested-stack-change-set}}/4eca1a01-e285-xmpl-8026-9a1967bfb4b0",
    "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/{{my-nested-stack}}/d0a825a0-e4cd-xmpl-b9fb-061c69e99205",
    "ParentChangeSetId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/{{my-root-stack-change-set}}/4eca1a01-e285-xmpl-8026-9a1967bfb4b0",
    "RootChangeSetId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/{{my-root-stack-change-set}}/4eca1a01-e285-xmpl-8026-9a1967bfb4b0",
    "IncludeNestedStacks": true,
    "StackName": "{{my-nested-stack}}",
    "Description": null,
    "Parameters": null,
    "CreationTime": "2020-11-18T05:20:56.651Z",
    "ExecutionStatus": "UNAVAILABLE",
    "Status": "CREATE_COMPLETE",
    "StatusReason": "Executable from root change set",
    "NotificationARNs": [
        
    ],
    "RollbackConfiguration": {
        
    },
    "Capabilities": [
        "CAPABILITY_IAM"
    ],
    "Tags": null
}
```

### execute-change-set
<a name="working-with-change-set-execute-cli"></a>
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/execute-change-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/execute-change-set.html) – 指定された変更セットの作成時に提供された入力情報を使い、スタックを作成または更新します。スタック階層全体に対して変更セットを作成するには、**create-change-set** オペレーション中に `–-include-nested-stacks` オプションを指定する必要があります。詳細については、「[CloudFormation スタックの変更セットを実行するスタックポリシーおよび変更セットの実行](using-cfn-updating-stacks-changesets-execute.md)」を参照してください。
**注記**  
**execute-change-set** はルート変更セットから実行する必要があり、スタックの階層全体に変更セットを適用します。

次の AWS CLI の例では、指定されたルートスタックの変更セットを実行します。

```
aws cloudformation execute-change-set \
    --stack-name {{my-root-stack}} \
    --change-set-name {{my-root-stack-change-set}}
```

### delete-change-set
<a name="working-with-change-set-delete-cli"></a>
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-change-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-change-set.html) – 指定された変更セットを削除します。変更セットを削除することで、誤った変更セットの実行を防止できます。`–-include-nested-stacks` オプションを使用して作成された変更セットでは、変更セットの削除は非同期になります。詳細については、「[CloudFormation スタックの変更セットを削除する](using-cfn-updating-stacks-changesets-delete.md)」を参照してください。
**注記**  
**delete-change-set** はルート変更セットから実行する必要があり、変更セットの階層全体を削除します。`REVIEW_IN_PROGRESS` ステータスのネストされたスタックは、**create-change-set** オペレーション中に作成された場合にも削除されます。

次の AWS CLI の例では、指定されたルートスタックの変更セットを削除します。

```
aws cloudformation delete-change-set \
    --stack-name {{my-root-stack}} \ 
    --change-set-name {{my-root-stack-change-set}}
```