Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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 tipe data di AWS CloudFormation APIReferensi.
Anda dapat menggunakan konsol, AWS CLI, atau CloudFormation DescribeChangeSetAPIoperasi untuk melihat detail set perubahan.
Kita menghasilkan setiap set perubahan berikut dari tumpukan dengan templat sampel
{
"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
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
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 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 bidangChangeSource
. Dalam contoh ini, bidangChangeSource
sama denganParameterReference
, yang berarti bahwa perubahan ini adalah hasil dari nilai referensi parameter yang diperbarui. Set perubahan harus berisi perubahan evaluasiDynamic
yang serupa. -
Anda dapat menemukan perubahan evaluasi
Dynamic
yang cocok dengan membandingkan strukturTarget
untuk kedua perubahan, yang akan berisi informasi yang sama. Dalam contoh ini, strukturTarget
untuk kedua perubahan berisi nilai yang sama untuk bidangAttribute
danRequireRecreation
.
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
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
, danKeyPairName
), yang semuanya digunakan oleh EC2 instance. Dengan perubahan ini, CloudFormation akan diperlukan untuk mengganti instance karena Replacement
bidang sama denganTrue
.
{
"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 AWS::EC2::Instancejenis sumber daya.
Menambahkan dan menghapus sumber daya
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 sampai 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
Contoh berikut menunjukkan perubahan tingkat Tag
properti pada properti instance AmazonEC2. Tag Value
dan Key
akan berubah menjadiTest
.
"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.