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à.
CloudFormation Conditionssintassi del modello
La sezione Conditions
facoltativa contiene istruzioni che definiscono le circostanze nelle quali le entità vengono create o configurate. Ad esempio, è possibile creare una condizione e associarla a una risorsa o a un output in modo da CloudFormation creare la risorsa o l'output solo se la condizione è vera. Analogamente, è possibile associare una condizione a una proprietà in modo da CloudFormation impostare la proprietà su un valore specifico solo se la condizione è vera. Se la condizione è falsa, CloudFormation imposta la proprietà su un valore alternativo specificato dall'utente.
È possibile utilizzare le condizioni quando si desidera riutilizzare un modello per creare risorse in contesti diversi, ad esempio ambienti di test o di produzione. Ad esempio, nel modello, puoi aggiungere un parametro di EnvironmentType
input che accetta entrambi prod
o test
come input. Per quanto riguarda l'prod
ambiente, è possibile includere EC2 istanze con determinate funzionalità, mentre per l'test
ambiente è possibile utilizzare funzionalità ridotte per risparmiare denaro. Questa definizione delle condizioni consente di definire quali risorse vengono create e come sono configurate per ogni tipo di ambiente.
Sintassi
La sezione Conditions
è composta dal nome di chiave Conditions
. Ogni dichiarazione di 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 nel seguente modo:
-
Aggiungi una definizione di parametro: definisci gli input che le tue condizioni valuteranno nella
Parameters
sezione del modello. Le condizioni vengono valutate come vere o false in base ai valori dei parametri di input. Nota che gli pseudo parametri sono disponibili automaticamente e non richiedono una definizione esplicita nella sezione.Parameters
Per ulteriori informazioni sugli pseudoparametri, consulta Ottieni AWS valori usando pseudo parametri. -
Aggiungi una definizione di condizione: definisci le condizioni nella
Conditions
sezione utilizzando funzioni intrinseche come o.Fn::If
Fn::Equals
Queste condizioni determinano quando vengono CloudFormation create 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 alla logica delle risorse IDs o ai relativi attributi nelle condizioni.
-
-
Associa condizioni a risorse o output: fai riferimento alle condizioni nelle risorse o negli output utilizzando la
Condition
chiave e l'ID logico di una condizione. Facoltativamente, utilizzaloFn::If
in altre parti del modello (come i valori delle proprietà) per impostare i valori in base a una condizione. Per ulteriori informazioni, consulta Utilizzo della Condition chiave.
CloudFormation valuta le condizioni durante la creazione o l'aggiornamento di uno stack. CloudFormation crea entità associate a una condizione vera e ignora le entità associate a una condizione falsa. CloudFormation rivaluta inoltre queste condizioni durante ogni aggiornamento dello stack prima di modificare qualsiasi risorsa. Le entità che rimangono associate a una condizione vera vengono aggiornate, mentre quelle che vengono associate a una condizione falsa 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 Condition
chiave
Una volta definita una condizione, è possibile applicarla in diversi punti del modello, ad esempio Resources
e Outputs
utilizzando la Condition
chiave. La Condition
chiave fa riferimento al nome logico di una condizione e restituisce il risultato valutato della condizione specificata.
Argomenti
Associa le condizioni alle risorse
Per creare risorse in modo condizionale, aggiungi la Condition
chiave e l'ID logico della condizione come attributo alla risorsa. CloudFormation crea la risorsa solo quando la condizione risulta vera.
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
È inoltre possibile associare condizioni agli output. CloudFormation crea l'output solo quando la condizione associata risulta vera.
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 Conditions
sezione, è possibile fare riferimento ad altre condizioni utilizzando la Condition
chiave. Ciò consente di creare una logica condizionale più complessa combinando più condizioni.
Nell'esempio seguente, la IsProdAndFeatureEnabled
condizione viene valutata vera solo se le IsFeatureEnabled
condizioni IsProduction
and restituiscono vero.
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 Fn::If
intrinseca 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 è vera e un altro valore se la condizione è falsa.
Valori delle proprietà condizionali
L'esempio seguente dimostra l'impostazione di un tipo di EC2 istanza in base a una condizione ambientale. Se la IsProduction
condizione risulta vera, il tipo di istanza viene impostato su. c5.xlarge
Altrimenti, è impostato su. t3.small
JSON
"Properties" : { "InstanceType" : { "Fn::If" : [ "IsProduction", "c5.xlarge", "t3.small" ] } }
YAML
Properties: InstanceType: !If - IsProduction - c5.xlarge - t3.small
Rimozione condizionale della proprietà
È inoltre possibile utilizzare lo AWS::NoValue
pseudo parametro come valore restituito per rimuovere la proprietà corrispondente quando una condizione è falsa.
JSON
"DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] }
YAML
DBSnapshotIdentifier: !If - UseDBSnapshot - !Ref DBSnapshotName - !Ref "AWS::NoValue"
Esempi
Creazione di risorse basata sull'ambiente
Gli esempi seguenti forniscono un' EC2 istanza e creano e collegano in modo condizionale un nuovo volume EBS solo se il tipo di ambiente è. prod
Se l'ambiente lo ètest
, creano semplicemente l' EC2 istanza 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
Fornitura di risorse a più condizioni
Gli esempi seguenti creano in modo condizionale un bucket S3 se viene fornito un nome di bucket e allegano una policy del bucket solo quando l'ambiente è impostato su. prod
Se non viene fornito alcun nome di bucket o l'ambiente lo è, non viene test
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 CreateBucketPolicy
condizione dimostra come fare riferimento ad altre condizioni utilizzando la Condition
chiave. La policy viene creata solo quando entrambe le CreateBucket
condizioni IsProduction
e risultano vere.
Nota
Per esempi più complessi di utilizzo delle condizioni, consultate l'argomento relativo agli Conditionattributi nella AWS CloudFormation Template Reference Guide.