Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Esempi di set di modifiche per le CloudFormation pile
Questa sezione fornisce esempi dei set di modifiche che si CloudFormation potrebbero creare per le modifiche più comuni allo stack. Mostrano come modificare un modello direttamente, modificare un parametro di input singolo. pianificare per la ricreazione di risorse (sostituzioni), che impedisce di perdere i dati per i quali non è stato eseguito il backup o interrompere le applicazioni che sono in esecuzione nello stack;, nonché aggiungere e rimuovere le risorse. Per illustrare il modo in cui funzionano i set di modifiche, ti mostreremo le modifiche inviate e parleremo dei set di modifiche risultanti. Poiché ogni esempio si basa su e presuppone che l'esempio precedente sia stato compreso, ti consigliamo di leggerli in ordine. Per una descrizione di ogni campo in un set di modifiche, consulta la sezione Modifica del tipo di dati nel AWS CloudFormation APIriferimento.
È possibile utilizzare la AWS CLI console oppure CloudFormation DescribeChangeSetAPIoperazione per visualizzare i dettagli del set di modifiche.
Abbiamo generato ciascuno dei seguenti set di modifiche da uno stack con il seguente modello di esempio
{
"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" }
}
]
}
}
}
}
Modifica diretta di un modello
Quando si modificano direttamente le risorse nel modello dello stack per generare un set di modifiche, CloudFormation classifica la modifica come diretta, anziché come modifica iniziata da un valore di parametro aggiornato. I seguenti set di modifiche, che hanno aggiunto un nuovo tag all'istanza i-1abc23d4
, è un esempio di modifica diretta. Tutti gli altri valori di input, ad esempio i valori dei parametri e le capacità, sono invariati, perciò ci concentreremo sulla struttura Changes
.
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/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": "SampleStack",
"NotificationARNs": [],
"ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-direct/1a2345b6-0000-00a0-a123-00abc0abc000"
}
Nella struttura Changes
, c'è solo una struttura ResourceChange
. Questa struttura descrive informazioni come il tipo di risorsa che CloudFormation verrà modificato, l'azione che CloudFormation verrà intrapresa, l'ID della risorsa, l'ambito della modifica e se la modifica richiede una sostituzione (dove CloudFormation crea una nuova risorsa e quindi elimina quella precedente). Nell'esempio, il set di modifiche indica che CloudFormation modificherà l'Tags
attributo dell'i-1abc23d4
EC2istanza e non richiede la sostituzione dell'istanza.
Nella Details
struttura, CloudFormation etichetta questa modifica come una modifica diretta che non richiederà mai la ricreazione (sostituzione) dell'istanza. Puoi eseguire questa modifica con sicurezza, sapendo che CloudFormation non sostituirà l'istanza.
CloudFormation mostra questa modifica come Static
valutazione. Una valutazione statica significa che CloudFormation può determinare il valore del tag prima di eseguire il set di modifiche. In alcuni casi, CloudFormation può determinare un valore solo dopo aver eseguito un set di modifiche. CloudFormationetichetta tali modifiche come Dynamic
valutazioni. Ad esempio, se si fa riferimento a una risorsa aggiornata sostituita in modo condizionale, non è CloudFormation possibile determinare se il riferimento alla risorsa aggiornata cambierà.
Modifica del valore di un parametro di input.
Quando modificate il valore di un parametro di input, CloudFormation genera due modifiche per ogni risorsa che utilizza il valore del parametro aggiornato. In questo esempio, desideriamo evidenziare come appariranno tali modifiche e su quali informazioni dovresti concentrarti. L'esempio seguente è stato generato modificando solo il valore del parametro di input Purpose
.
Il Purpose
parametro specifica un valore chiave del tag per l'EC2istanza. In questo esempio, il valore di parametro è stato modificato da testing
a production
. Il nuovo valore viene illustrato nella struttura Parameters
.
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/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": "SampleStack",
"NotificationARNs": [],
"ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000"
}
La Changes
struttura funziona in modo simile a quello illustrato nell'Modifica diretta di un modelloesempio. Esiste solo una ResourceChange
struttura, che descrive una modifica all'Tags
attributo dell'i-1abc23d4
EC2istanza.
Tuttavia, nella struttura Details
, il set di modifiche mostra due modifiche per l'attributo Tags
, anche se solo un singolo valore di parametro è stato modificato. Le risorse che referenziano un valore di parametro modificato (tramite la funzione intrinseca Ref
) risultano sempre in due modifiche: una con una valutazione Dynamic
e un'altra con una valutazione Static
. Puoi visualizzare questi tipi di modifiche visualizzando i campi riportati di seguito:
-
Per la modifica della valutazione
Static
, visualizza il campoChangeSource
. In questo esempio, il campoChangeSource
equivale aParameterReference
, il che significa che questa modifica è il risultato del valore di riferimento di un parametro aggiornato. Il set di modifiche deve contenere una modifica di valutazioneDynamic
simile. -
Puoi trovare la valutazione
Dynamic
corrispondente confrontando la strutturaTarget
per entrambe le modifiche, che conterranno le stesse informazioni. In questo esempio, le struttureTarget
per entrambe le modifiche contengono gli stessi valori per i campiAttribute
eRequireRecreation
.
Per questi tipi di modifiche, concentrarsi sulla valutazione statica, che offre le informazioni più dettagliate sulla modifica. In questo esempio, la valutazione statica mostra che la modifica è il risultato di una modifica del valore di riferimento di un parametro (ParameterReference
). L'esatto parametro che è stato modificato è indicato dal campo CauseEntity
(il parametro Purpose
).
Determinazione del valore del campo sostitutivo
Il Replacement
campo in una ResourceChange
struttura indica se CloudFormation ricreerà la risorsa. La pianificazione per la ricreazione di risorse (sostituzioni) impedisce di perdere i dati per i quali non è stato eseguito il backup o interrompere le applicazioni che sono in esecuzione nello stack.
Il valore nel campo Replacement
varia a seconda che una modifica richieda una sostituzione o meno, come indicato dal campo RequiresRecreation
nella struttura Target
di una modifica. Ad esempio, se il campo RequiresRecreation
è Never
, il campo Replacement
è False
. Tuttavia, se sono presenti più modifiche su una singola risorsa e ogni modifica ha un valore diverso per il RequiresRecreation
campo, CloudFormation aggiorna la risorsa utilizzando il comportamento più intrusivo. In altre parole, se solo una delle molte modifiche richiede una sostituzione, CloudFormation deve sostituire la risorsa e, di conseguenza, impostare il campo Replacement
su True
.
Il seguente set di modifiche è stato generato modificando i valori di ogni parametro (Purpose
InstanceType
, eKeyPairName
), tutti utilizzati dall'EC2istanza. Con queste modifiche, CloudFormation sarà necessario sostituire l'istanza perché il Replacement
campo è uguale aTrue
.
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/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": "SampleStack",
"NotificationARNs": [],
"ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-multiple/1a2345b6-0000-00a0-a123-00abc0abc000"
}
Identificare la modifica che richiede che la risorsa venga sostituita visualizzando ogni modifica (le valutazioni statiche nella struttura Details
). In questo esempio, ogni modifica ha un valore diverso per il RequireRecreation
campo, ma la modifica alla KeyName
proprietà ha il comportamento di aggiornamento più intrusivo, che richiede sempre una ricreazione. CloudFormation sostituirà l'istanza perché il nome della chiave è stato modificato.
Se il nome della chiave è invariato, la modifica alla proprietà InstanceType
comporterebbe l'aggiornamento più intrusivo (Conditionally
), in modo che il campo Replacement
sia Conditionally
. Per trovare le condizioni in cui CloudFormation sostituisce l'istanza, visualizza il comportamento di aggiornamento per la InstanceType
proprietà di AWS::EC2::InstanceTipo di risorsa .
Aggiunta e rimozione di risorse
L'esempio seguente è stato generato inviando un modello modificato che rimuove l'EC2istanza e aggiunge un gruppo Auto Scaling e una configurazione di avvio.
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/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": "SampleStack",
"NotificationARNs": [],
"ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-addremove/1a2345b6-0000-00a0-a123-00abc0abc000"
}
Nella struttura Changes
, ci sono tre strutture ResourceChange
, una per ciascuna risorsa. Per ogni risorsa, il Action
campo indica se CloudFormation aggiunge o rimuove la risorsa. I campi Scope
e Details
sono vuoti perché si applicano solo alle risorse modificate.
Per le nuove risorse, non è CloudFormation possibile determinare il valore di alcuni campi finché non si esegue il set di modifiche. Ad esempio, CloudFormation non fornisce la configurazione fisica IDs del gruppo Auto Scaling e avvia perché non esistono ancora. CloudFormation crea le nuove risorse quando si esegue il set di modifiche.
Visualizzazione delle modifiche a livello di proprietà
L'esempio seguente mostra le modifiche a livello di Tag
proprietà alla proprietà di un'istanza AmazonEC2. Il tag Value
e Key
verrà modificato in. 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\"}]}}"
}
}
]
La Details
struttura mostra i valori per Key
e Value
prima dell'esecuzione del set di modifiche e quali saranno dopo l'esecuzione del set di modifiche.