

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Contoh set perubahan untuk CloudFormation tumpukan
<a name="using-cfn-updating-stacks-changesets-samples"></a>

Bagian ini memberikan contoh set perubahan yang CloudFormation akan dibuat untuk perubahan tumpukan umum. Contoh tersebut menunjukkan cara mengedit templat secara langsung; memodifikasi parameter input tunggal; merencanakan untuk pembuatan kembali sumber daya (penggantian), yang mencegah Anda kehilangan data yang tidak dicadangkan atau mengganggu aplikasi yang sedang berjalan di tumpukan Anda; dan menambah dan menghapus sumber daya. Untuk menggambarkan bagaimana set perubahan bekerja, kita akan berjalan melalui perubahan yang dikirimkan dan membahas set perubahan yang dihasilkan. Karena setiap contoh dibuat berdasarkan dan mengasumsikan bahwa Anda memahami contoh sebelumnya, kami sarankan Anda membacanya secara berurutan. Untuk deskripsi setiap bidang dalam kumpulan perubahan, lihat [Mengubah](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Change.html) tipe data di *Referensi AWS CloudFormation API*.

Anda dapat menggunakan [konsol](using-cfn-updating-stacks-changesets-view.md), AWS CLI, atau operasi CloudFormation [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeChangeSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeChangeSet.html)API untuk melihat detail set perubahan.

Kita menghasilkan setiap set perubahan berikut dari tumpukan dengan [templat sampel](https://s3.amazonaws.com/cloudformation-examples/user-guide/changesets/ec2-instance.txt) berikut:

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "A sample EC2 instance template for testing change sets.",
  "Parameters" : {
    "Purpose" : {
      "Type" : "String",
      "Default" : "testing",
      "AllowedValues" : ["testing", "production"],
      "Description" : "The purpose of this instance."
    },
    "KeyPairName" : {
      "Type": "AWS::EC2::KeyPair::KeyName",
      "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance"
    },
    "InstanceType" : {
      "Type" : "String",
      "Default" : "t2.micro",
      "AllowedValues" : ["t2.micro", "t2.small", "t2.medium"],
      "Description" : "The EC2 instance type."
    }
  },
  "Resources" : {
    "MyEC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "KeyName" : { "Ref" : "KeyPairName" },
        "InstanceType" : { "Ref" : "InstanceType" },
        "ImageId" : "ami-8fcee4e5",
        "Tags" : [
          {
            "Key" : "Purpose",
            "Value" : { "Ref" : "Purpose" }
          }
        ]
      }
    }
  }
}
```

## Mengedit templat secara langsung
<a name="using-cfn-updating-stacks-changesets-samples-directly-editing-a-template"></a>

Ketika Anda secara langsung memodifikasi sumber daya dalam templat tumpukan untuk menghasilkan set perubahan, CloudFormation mengklasifikasikan perubahan sebagai modifikasi langsung, dibandingkan dengan perubahan yang dimulai oleh nilai parameter yang diperbarui. Set perubahan berikut, yang menambahkan tanda baru ke instans `i-1abc23d4`, adalah contoh dari modifikasi langsung. Semua nilai input lainnya, seperti nilai dan kemampuan parameter, tidak berubah, jadi kita akan fokus pada struktur `Changes`.

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "Status": "CREATE_COMPLETE",
    "ChangeSetName": "SampleChangeSet-direct",
    "Parameters": [
        {
            "ParameterValue": "testing",
            "ParameterKey": "Purpose"
        },
        {
            "ParameterValue": "MyKeyName",
            "ParameterKey": "KeyPairName"
        },
        {
            "ParameterValue": "t2.micro",
            "ParameterKey": "InstanceType"
        }
    ],
    "Changes": [
        {
            "ResourceChange": {
                "ResourceType": "AWS::EC2::Instance",
                "PhysicalResourceId": "i-1abc23d4",
                "Details": [
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    }
                ],
                "Action": "Modify",
                "Scope": [
                    "Tags"
                ],
                "LogicalResourceId": "MyEC2Instance",
                "Replacement": "False"
            },
            "Type": "Resource"
        }
    ],
    "CreationTime": "2020-11-18T23:35:25.813Z",
    "Capabilities": [],
    "StackName": "MyStack",
    "NotificationARNs": [],
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-direct/1a2345b6-0000-00a0-a123-00abc0abc000"
}
```

Di struktur `Changes`, hanya ada satu struktur `ResourceChange`. Struktur ini menjelaskan informasi seperti jenis sumber daya CloudFormation akan berubah, tindakan CloudFormation akan diambil, ID sumber daya, ruang lingkup perubahan, dan apakah perubahan memerlukan penggantian (di mana CloudFormation membuat sumber daya baru dan kemudian menghapus yang lama). Dalam contoh, set perubahan menunjukkan bahwa CloudFormation akan memodifikasi `Tags` atribut `i-1abc23d4` EC2 instance, dan tidak memerlukan instance untuk diganti.

Dalam `Details` struktur, CloudFormation label perubahan ini sebagai modifikasi langsung yang tidak akan pernah memerlukan instance untuk dibuat ulang (diganti). Anda dapat dengan percaya diri menjalankan perubahan ini, mengetahui bahwa itu CloudFormation tidak akan menggantikan instance.

CloudFormation menunjukkan perubahan ini sebagai `Static` evaluasi. Evaluasi statis berarti CloudFormation dapat menentukan nilai tag sebelum mengeksekusi set perubahan. Dalam beberapa kasus, CloudFormation dapat menentukan nilai hanya setelah Anda menjalankan set perubahan. CloudFormationmelabeli perubahan tersebut sebagai `Dynamic` evaluasi. Misalnya, jika Anda mereferensikan sumber daya yang diperbarui yang diganti secara kondisional, tidak CloudFormation dapat menentukan apakah referensi ke sumber daya yang diperbarui akan berubah.

## Memodifikasi nilai parameter input
<a name="using-cfn-updating-stacks-changesets-samples-modifying-a-single-input-parameter-value"></a>

Saat Anda memodifikasi nilai parameter input, CloudFormation menghasilkan dua perubahan untuk setiap sumber daya yang menggunakan nilai parameter yang diperbarui. Dalam contoh ini, kita ingin menyoroti seperti apa perubahan tersebut dan informasi mana yang harus Anda fokuskan. Contoh berikut dihasilkan dengan hanya mengubah nilai parameter input `Purpose`.

`Purpose`Parameter menentukan nilai kunci tag untuk EC2 contoh. Dalam contoh, nilai parameter diubah dari `testing` ke `production`. Nilai baru ditunjukkan dalam struktur `Parameters`.

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "Status": "CREATE_COMPLETE",
    "ChangeSetName": "SampleChangeSet",
    "Parameters": [
        {
            "ParameterValue": "production",
            "ParameterKey": "Purpose"
        },
        {
            "ParameterValue": "MyKeyName",
            "ParameterKey": "KeyPairName"
        },
        {
            "ParameterValue": "t2.micro",
            "ParameterKey": "InstanceType"
        }
    ],
    "Changes": [
        {
            "ResourceChange": {
                "ResourceType": "AWS::EC2::Instance",
                "PhysicalResourceId": "i-1abc23d4",
                "Details": [
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Dynamic",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    },
                    {
                        "CausingEntity": "Purpose",
                        "ChangeSource": "ParameterReference",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    }
                ],
                "Action": "Modify",
                "Scope": [
                    "Tags"
                ],
                "LogicalResourceId": "MyEC2Instance",
                "Replacement": "False"
            },
            "Type": "Resource"
        }
    ],
    "CreationTime": "2020-11-18T23:59:18.447Z",
    "Capabilities": [],
    "StackName": "MyStack",
    "NotificationARNs": [],
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000"
}
```

`Changes`Struktur berfungsi mirip dengan cara yang dilakukannya dalam [Mengedit templat secara langsung](#using-cfn-updating-stacks-changesets-samples-directly-editing-a-template) contoh. Hanya ada satu `ResourceChange` struktur; itu menggambarkan perubahan pada `Tags` atribut `i-1abc23d4` EC2 instance.

Namun, dalam struktur `Details`, set perubahan menunjukkan dua perubahan untuk atribut `Tags`, meskipun hanya satu nilai parameter yang diubah. Sumber daya yang mereferensikan nilai parameter yang diubah (menggunakan fungsi intrinsik `Ref`) selalu menghasilkan dua perubahan: satu dengan evaluasi `Dynamic` dan lainnya dengan evaluasi `Static`. Anda dapat melihat tipe perubahan ini dengan melihat bidang berikut:
+ Untuk perubahan evaluasi `Static`, lihat bidang `ChangeSource`. Dalam contoh ini, bidang `ChangeSource` sama dengan `ParameterReference`, yang berarti bahwa perubahan ini adalah hasil dari nilai referensi parameter yang diperbarui. Set perubahan harus berisi perubahan evaluasi `Dynamic` yang serupa.
+ Anda dapat menemukan perubahan evaluasi `Dynamic` yang cocok dengan membandingkan struktur `Target` untuk kedua perubahan, yang akan berisi informasi yang sama. Dalam contoh ini, struktur `Target` untuk kedua perubahan berisi nilai yang sama untuk bidang `Attribute` dan `RequireRecreation`.

Untuk tipe perubahan ini, fokuskan pada evaluasi statis, yang memberi Anda informasi paling rinci tentang perubahan. Dalam contoh ini, evaluasi statis menunjukkan bahwa perubahan adalah hasil perubahan pada nilai referensi parameter (`ParameterReference`). Parameter yang tepat yang diubah ditunjukkan oleh bidang `CauseEntity` (parameter `Purpose`).

## Menentukan nilai bidang penggantian
<a name="using-cfn-updating-stacks-changesets-samples-determining-the-value-of-the-replacement-field"></a>

`Replacement`Bidang dalam `ResourceChange` struktur menunjukkan apakah CloudFormation akan membuat ulang sumber daya. Merencanakan pembuatan ulang sumber daya (penggantian) mencegah Anda kehilangan data yang tidak dicadangkan atau mengganggu aplikasi yang berjalan di tumpukan Anda.

Nilai dalam bidang `Replacement` tergantung pada apakah perubahan memerlukan penggantian, ditunjukkan dengan bidang `RequiresRecreation` dalam struktur `Target` perubahan. Sebagai contoh, jika bidang `RequiresRecreation` adalah `Never`, bidang `Replacement` adalah `False`. Namun, jika ada beberapa perubahan pada satu sumber daya dan setiap perubahan memiliki nilai yang berbeda untuk `RequiresRecreation` bidang tersebut, CloudFormation perbarui sumber daya menggunakan perilaku yang paling mengganggu. Dengan kata lain, jika hanya satu dari banyak perubahan memerlukan penggantian, CloudFormation harus mengganti sumber daya dan, oleh karena itu, mengatur bidang `Replacement` ke `True`.

Set perubahan berikut dihasilkan dengan mengubah nilai untuk setiap parameter (`Purpose`,`InstanceType`, dan`KeyPairName`), yang semuanya digunakan oleh EC2 instance. Dengan perubahan ini, CloudFormation akan diperlukan untuk mengganti instance karena `Replacement` bidang sama dengan`True`.

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "Status": "CREATE_COMPLETE",
    "ChangeSetName": "SampleChangeSet-multiple",
    "Parameters": [
        {
            "ParameterValue": "production",
            "ParameterKey": "Purpose"
        },
        {
            "ParameterValue": "MyNewKeyName",
            "ParameterKey": "KeyPairName"
        },
        {
            "ParameterValue": "t2.small",
            "ParameterKey": "InstanceType"
        }
    ],
    "Changes": [
        {
            "ResourceChange": {
                "ResourceType": "AWS::EC2::Instance",
                "PhysicalResourceId": "i-7bef86f8",
                "Details": [
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Dynamic",
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "KeyName",
                            "RequiresRecreation": "Always"
                        }
                    },
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Dynamic",
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "InstanceType",
                            "RequiresRecreation": "Conditionally"
                        }
                    },
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Dynamic",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    },
                    {
                        "CausingEntity": "KeyPairName",
                        "ChangeSource": "ParameterReference",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "KeyName",
                            "RequiresRecreation": "Always"
                        }
                    },
                    {
                        "CausingEntity": "InstanceType",
                        "ChangeSource": "ParameterReference",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "InstanceType",
                            "RequiresRecreation": "Conditionally"
                        }
                    },
                    {
                        "CausingEntity": "Purpose",
                        "ChangeSource": "ParameterReference",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    }
                ],
                "Action": "Modify",
                "Scope": [
                    "Tags",
                    "Properties"
                ],
                "LogicalResourceId": "MyEC2Instance",
                "Replacement": "True"
            },
            "Type": "Resource"
        }
    ],
    "CreationTime": "2020-11-18T00:39:35.974Z",
    "Capabilities": [],
    "StackName": "MyStack",
    "NotificationARNs": [],
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-multiple/1a2345b6-0000-00a0-a123-00abc0abc000"
}
```

Identifikasi perubahan yang memerlukan sumber daya untuk diganti dengan melihat setiap perubahan (evaluasi statis di struktur `Details`). Dalam contoh ini, setiap perubahan memiliki nilai yang berbeda untuk `RequireRecreation` bidang tersebut, tetapi perubahan pada `KeyName` properti memiliki perilaku pembaruan yang paling mengganggu, selalu membutuhkan rekreasi. CloudFormation akan menggantikan instance karena nama kunci diubah.

Jika nama kunci tidak berubah, perubahan ke properti `InstanceType` akan memiliki perilaku pembaruan yang paling mengganggu (`Conditionally`), sehingga bidang `Replacement` akan `Conditionally`. Untuk menemukan kondisi yang CloudFormation menggantikan instance, lihat perilaku pembaruan untuk `InstanceType` properti jenis [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html)sumber daya.

## Menambahkan dan menghapus sumber daya
<a name="using-cfn-updating-stacks-changesets-samples-adding-and-removing-resources"></a>

Contoh berikut dihasilkan dengan mengirimkan template yang dimodifikasi yang menghapus EC2 instance dan menambahkan grup Auto Scaling dan konfigurasi peluncuran.

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "Status": "CREATE_COMPLETE",
    "ChangeSetName": "SampleChangeSet-addremove",
    "Parameters": [
        {
            "ParameterValue": "testing",
            "ParameterKey": "Purpose"
        },
        {
            "ParameterValue": "MyKeyName",
            "ParameterKey": "KeyPairName"
        },
        {
            "ParameterValue": "t2.micro",
            "ParameterKey": "InstanceType"
        }
    ],
    "Changes": [
        {
            "ResourceChange": {
                "Action": "Add",
                "ResourceType": "AWS::AutoScaling::AutoScalingGroup",
                "Scope": [],
                "Details": [],
                "LogicalResourceId": "AutoScalingGroup"
            },
            "Type": "Resource"
        },
        {
            "ResourceChange": {
                "Action": "Add",
                "ResourceType": "AWS::AutoScaling::LaunchConfiguration",
                "Scope": [],
                "Details": [],
                "LogicalResourceId": "LaunchConfig"
            },
            "Type": "Resource"
        },
        {
            "ResourceChange": {
                "ResourceType": "AWS::EC2::Instance",
                "PhysicalResourceId": "i-1abc23d4",
                "Details": [],
                "Action": "Remove",
                "Scope": [],
                "LogicalResourceId": "MyEC2Instance"
            },
            "Type": "Resource"
        }
    ],
    "CreationTime": "2020-11-18T01:44:08.444Z",
    "Capabilities": [],
    "StackName": "MyStack",
    "NotificationARNs": [],
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-addremove/1a2345b6-0000-00a0-a123-00abc0abc000"
}
```

Di struktur `Changes`, ada tiga struktur `ResourceChange`, satu untuk setiap sumber daya. Untuk setiap sumber daya, `Action` bidang menunjukkan apakah CloudFormation menambah atau menghapus sumber daya. Bidang `Scope` dan `Details` kosong karena hanya berlaku untuk sumber daya yang dimodifikasi.

Untuk sumber daya baru, tidak CloudFormation dapat menentukan nilai beberapa bidang hingga Anda menjalankan set perubahan. Misalnya, CloudFormation tidak menyediakan fisik IDs grup Auto Scaling dan konfigurasi peluncuran karena belum ada. CloudFormation membuat sumber daya baru saat Anda menjalankan set perubahan.

## Melihat perubahan tingkat properti
<a name="using-cfn-updating-stacks-changesets-samples-property-level-change-set"></a>

Contoh berikut menunjukkan perubahan tingkat `Tag` properti pada properti instance Amazon EC2 . Tag `Value` dan `Key` akan berubah menjadi`Test`.

```
"ChangeSetName": "SampleChangeSet",
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet/38d91d27-798d-4736-9bf1-fb7c46207807",
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleEc2Template/68edcdc0-f6b6-11ee-966c-126d572cdd11",
    "StackName": "SampleEc2Template",
    "Description": "A sample EC2 instance template for testing change sets.",
    "Parameters": [
        {
            "ParameterKey": "KeyPairName",
            "ParameterValue": "BatchTest"
        },
        {
            "ParameterKey": "Purpose",
            "ParameterValue": "testing"
        },
        {
            "ParameterKey": "InstanceType",
            "ParameterValue": "t2.micro"
        }
    ],
    "CreationTime": "2024-04-09T21:29:10.759000+00:00",
    "ExecutionStatus": "AVAILABLE",
    "Status": "CREATE_COMPLETE",
    "StatusReason": null,
    "NotificationARNs": [],
    "RollbackConfiguration": {
:...skipping...
{
    "Changes": [
        {
            "Type": "Resource",
            "ResourceChange": {
                "Action": "Modify",
                "LogicalResourceId": "MyEC2Instance",
                "PhysicalResourceId": "i-0cc7856a36315e62b",
                "ResourceType": "AWS::EC2::Instance",
                "Replacement": "False",
                "Scope": [
                    "Tags"
                ],
                "Details": [
                    {
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never",
                            "Path": "/Properties/Tags/0/Value",
                            "BeforeValue": "testing",
                            "AfterValue": "Test",
                            "AttributeChangeType": "Modify"
                        },
                        "Evaluation": "Static",
                        "ChangeSource": "DirectModification"
                    },
                    {
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never",
                            "Path": "/Properties/Tags/0/Key",
                            "BeforeValue": "Purpose",
                            "AfterValue": "Test",
                            "AttributeChangeType": "Modify"
                        },
                        "Evaluation": "Static",
                        "ChangeSource": "DirectModification"
                    }
                ],
                "BeforeContext": "{\"Properties\":{\"KeyName\":\"BatchTest\",\"ImageId\":\"ami-8fcee4e5\",\"InstanceType\":\"t2.micro\",\"Tags\":[{\"Value\":\"testing\",\"Key\":\"Purpose\"}]}}",
                "AfterContext": "{\"Properties\":{\"KeyName\":\"BatchTest\",\"ImageId\":\"ami-8fcee4e5\",\"InstanceType\":\"t2.micro\",\"Tags\":[{\"Value\":\"Test\",\"Key\":\"Test\"}]}}"
            }
        }
    ]
```

`Details`Struktur menunjukkan nilai untuk `Key` dan `Value` sebelum set perubahan dijalankan, dan apa yang akan terjadi setelah set perubahan dijalankan.