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à.
File di modello di sintassi Conditions CloudFormation
La sezione Conditions facoltativa contiene istruzioni che definiscono le circostanze nelle quali le entità vengono create o configurate. Ad esempio, puoi creare una condizione e associarla a una risorsa o a un output di modo che CloudFormation crei la risorsa o l’output solo se la condizione è true. Analogamente, puoi associare una condizione a una proprietà di modo che CloudFormation imposti la proprietà su un valore specifico solo se la condizione è true. Se la condizione è false, CloudFormation imposta la proprietà su un valore alternativo che specifichi.
Puoi utilizzare le condizioni quando vuoi riutilizzare un modello per creare risorse in diversi contesti, ad esempio ambienti di test rispetto ad ambienti di produzione. Ad esempio, nel modello puoi aggiungere un parametro di input EnvironmentType, che accetta prod o test come input. Per l’ambiente di prod, puoi includere istanze EC2 con alcune funzionalità, mentre per l’ambiente di test, puoi utilizzare le funzionalità ridotte per risparmiare denaro. Questa definizione della condizione ti permette di definire quali risorse vengono create e come vengono configurate per ciascun tipo di ambiente.
Sintassi
La sezione Conditions è composta dal nome di chiave Conditions. Ogni dichiarazione della condizione include un ID logico e una o più funzioni intrinseche.
JSON
"Conditions": { "LogicalConditionName1": { "Intrinsic function":...[ }, "LogicalConditionName2": { "Intrinsic function":...} }
YAML
Conditions:LogicalConditionName1:Intrinsic function:...LogicalConditionName2:Intrinsic function:...
Come funzionano le condizioni
Per utilizzare le condizioni, procedi come segue:
-
Aggiungi una definizione di parametro: definisci gli input che le tue condizioni valuteranno nella sezione
Parametersdel modello. Le condizioni restituiscono true o false in base ai valori di questi parametri di input. Tieni presente che gli pseudo parametri sono disponibili automaticamente e non richiedono una definizione esplicita nella sezioneParameters. Per ulteriori informazioni sugli pseudo parametri, consulta Ottieni AWS valori usando pseudo parametri. -
Aggiungi una definizione della condizione: definisci le condizioni nella sezione
Conditionsutilizzando funzioni intrinseche comeFn::IfoFn::Equals. Queste condizioni determinano quando CloudFormation crea le risorse associate. Le condizioni possono essere basate su:-
Valori di input o pseudo parametri
-
Altre condizioni:
-
Valori di mappatura
Tuttavia, non è possibile fare riferimento agli ID logici delle risorse o ai relativi attributi nelle condizioni.
-
-
Associa le condizioni a risorse o output: fai riferimento alle condizioni nelle risorse o negli output utilizzando la chiave
Conditione l’ID logico di una condizione. Facoltativamente, utilizzaFn::Ifin altre parti del modello (come i valori delle proprietà) per impostare i valori in base a una condizione. Per ulteriori informazioni, consulta Utilizzo della chiave Condition.
CloudFormation valuta le condizioni durante la creazione o l’aggiornamento di uno stack. CloudFormation crea le entità associate a una condizione che restituisce true e ignora le entità associate a una condizione che restituisce false. Inoltre, CloudFormation rivaluta tali condizioni durante ogni aggiornamento dello stack prima di modificare le risorse. Le entità che rimangono associate a una condizione true vengono aggiornate, mentre quelle che vengono associate a una condizione false vengono eliminate.
Importante
Durante l’aggiornamento di uno stack non puoi aggiornare solo le condizioni. Le condizioni possono essere aggiornate solo se si includono modifiche che comportano l’aggiunta, la modifica o l’eliminazione di risorse.
Funzioni intrinseche delle condizioni
Puoi utilizzare le seguenti funzioni intrinseche per definire le condizioni:
Nota
Fn::If è supportata solo nell’attributo di metadati, nell’attributo delle policy di aggiornamento e nei valori di proprietà della sezioneResources e nelle sezioni Outputs di un modello.
Utilizzo della chiave Condition
Una volta definita una condizione, è possibile applicarla in diversi punti del modello, ad esempio Resources e Outputs, utilizzando la chiave Condition. La chiave Condition fa riferimento al nome logico di una condizione e restituisce il risultato valutato della condizione specificata.
Argomenti
Associa le condizioni alle risorse
Per creare le risorse in modo condizionale, aggiungi la chiave Condition e l’ID logico della condizione come attributo alla risorsa. CloudFormation crea la risorsa solo quando la condizione corrisponde a true.
JSON
"NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "IsProduction", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} } }
YAML
NewVolume: Type: AWS::EC2::Volume Condition: IsProduction Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
Associa le condizioni agli output
Puoi anche associare le condizioni agli output CloudFormation crea l’output solo quando la condizione associata corrisponde a true.
JSON
"Outputs" : { "VolumeId" : { "Condition" : "IsProduction", "Value" : { "Ref" : "NewVolume" } } }
YAML
Outputs: VolumeId: Condition: IsProduction Value: !Ref NewVolume
Condizioni di riferimento in altre condizioni
Quando si definiscono le condizioni nella sezione Conditions, è possibile fare riferimento ad altre condizioni utilizzando la chiave Condition. Ciò ti consente di creare una logica condizionale più complessa combinando più condizioni.
Nell’esempio seguente, la condizione IsProdAndFeatureEnabled viene valutata come true solo se le condizioni IsProduction e IsFeatureEnabled restituiscono true.
JSON
"Conditions": { "IsProduction" : {"Fn::Equals" : [{"Ref" : "Environment"}, "prod"]}, "IsFeatureEnabled" : { "Fn::Equals" : [{"Ref" : "FeatureFlag"}, "enabled"]}, "IsProdAndFeatureEnabled" : { "Fn::And" : [ {"Condition" : "IsProduction"}, {"Condition" : "IsFeatureEnabled"} ] } }
YAML
Conditions: IsProduction: !Equals [!Ref Environment, "prod"] IsFeatureEnabled: !Equals [!Ref FeatureFlag, "enabled"] IsProdAndFeatureEnabled: !And - !Condition IsProduction - !Condition IsFeatureEnabled
Restituisce in modo condizionale i valori delle proprietà utilizzando Fn::If
Per un controllo più granulare, è possibile utilizzare la funzione intrinseca Fn::If per restituire in modo condizionale uno dei due valori di proprietà all’interno delle risorse o degli output. Questa funzione valuta una condizione e restituisce un valore se la condizione risulta true e un altro valore se la condizione risulta false.
Valori della proprietà condizionale
L’esempio seguente dimostra l’impostazione di un tipo di istanza EC2 in base a una condizione ambientale. Se la condizione IsProduction risulta true, il tipo di istanza viene impostato su c5.xlarge. In caso contrario, viene impostato su t3.small.
JSON
"Properties" : { "InstanceType" : { "Fn::If" : [ "IsProduction", "c5.xlarge", "t3.small" ] } }
YAML
Properties: InstanceType: !If - IsProduction - c5.xlarge - t3.small
Rimozione della proprietà condizionale
Puoi anche utilizzare lo pseudo parametro AWS::NoValue come valore restituito per rimuovere la proprietà corrispondente quando la condizione risulta false.
JSON
"DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] }
YAML
DBSnapshotIdentifier: !If - UseDBSnapshot - !Ref DBSnapshotName - !Ref "AWS::NoValue"
Esempi
Creazione di risorsa basata sull’ambiente
Gli esempi seguenti forniscono un’istanza EC2 e creano e collegano in modo condizionale un nuovo volume EBS solo se il tipo di ambiente è prod. Se l’ambiente è test, creano semplicemente l’istanza EC2 senza il volume aggiuntivo.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-1234567890abcdef0", "InstanceType": "c5.xlarge" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "IsProduction", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "IsProduction", "Properties": { "Size": 100, "AvailabilityZone": { "Fn::GetAtt": [ "EC2Instance", "AvailabilityZone" ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Description: Environment type Default: test Type: String AllowedValues: - prod - test ConstraintDescription: must specify prod or test Conditions: IsProduction: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-1234567890abcdef0 InstanceType: c5.xlarge MountPoint: Type: AWS::EC2::VolumeAttachment Condition: IsProduction Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: AWS::EC2::Volume Condition: IsProduction Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone
Provisioning di risorse a più condizioni
Gli esempi seguenti creano in modo condizionale un bucket S3 se viene fornito un nome del bucket e allegano una policy di bucket solo quando l’ambiente è impostato su prod. Se non viene fornito un nome del bucket o se l’ambiente è test , non viene creata alcuna risorsa.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Type": "String", "AllowedValues": [ "prod", "test" ] }, "BucketName": { "Default": "", "Type": "String" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] }, "CreateBucket": { "Fn::Not": [ { "Fn::Equals": [ { "Ref": "BucketName" }, "" ] } ] }, "CreateBucketPolicy": { "Fn::And": [ { "Condition": "IsProduction" }, { "Condition": "CreateBucket" } ] } }, "Resources": { "Bucket": { "Type": "AWS::S3::Bucket", "Condition": "CreateBucket", "Properties": { "BucketName": { "Ref": "BucketName" } } }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": { ... } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Type: String AllowedValues: - prod - test BucketName: Default: '' Type: String Conditions: IsProduction: !Equals - !Ref EnvType - prod CreateBucket: !Not - !Equals - !Ref BucketName - '' CreateBucketPolicy: !And - !Condition IsProduction - !Condition CreateBucket Resources: Bucket: Type: AWS::S3::Bucket Condition: CreateBucket Properties: BucketName: !Ref BucketName Policy: Type: AWS::S3::BucketPolicy Condition: CreateBucketPolicy Properties: Bucket: !Ref Bucket PolicyDocument: ...
In questo esempio, la condizione CreateBucketPolicy dimostra come fare riferimento ad altre condizioni utilizzando la chiave Condition. La policy viene creata solo quando entrambe le condizioni IsProduction e CreateBucket risultano true.
Nota
Per esempi più complessi sull’utilizzo delle condizioni, consulta l’argomento Condition attribute in CloudFormation Template Reference Guide.