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 modello Conditions sintassi
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 quindi associarla a una risorsa o a un output in modo da creare la risorsa o l'output CloudFormation solo se la condizione è vera. Analogamente, è possibile associare la condizione a una proprietà in modo da impostare la proprietà su un valore specifico CloudFormation solo se la condizione è vera. Se la condizione è falsa, CloudFormation imposta la proprietà su un valore diverso da quello specificato.
Puoi utilizzare le condizioni quando vuoi riutilizzare un modello che può creare risorse in diversi contesti, ad esempio un ambiente di test rispetto a un ambiente di produzione. Nel modello puoi aggiungere un parametro di input EnvironmentType
, che accetta prod
o test
come input. Per l'ambiente di produzione, potresti includere EC2 istanze Amazon con determinate funzionalità; tuttavia, per l'ambiente di test, desideri utilizzare funzionalità ridotte per risparmiare denaro. Grazie alle condizioni, puoi definire quali risorse vengono creati e come vengono configurate per ciascun tipo di ambiente.
Le condizioni vengono valutate in base a pseudoparametri predefiniti o a valori di parametro di input che specifichi quando crei o aggiorni uno stack. All'interno di ogni condizione, puoi fare riferimento a un'altra condizione, a un valore di parametro o a una mappatura. Dopo aver definito tutte le condizioni, puoi associarle alle risorse e alle relative proprietà nelle sezioni Resources
e Outputs
di un modello.
Al momento della creazione dello stack o dell'aggiornamento dello stack, AWS CloudFormation valuta tutte le condizioni del modello prima di creare qualsiasi risorsa. Vengono create risorse associate a una condizione True. Le risorse associate a una condizione falsa vengono ignorate. CloudFormation rivaluta inoltre queste condizioni a ogni aggiornamento dello stack prima di aggiornare qualsiasi risorsa. Le risorse ancora associate a una condizione True vengono aggiornate. Le risorse che ora risultano 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.
Come usare le condizioni
A seconda dell'entità che desideri creare o configurare in modo condizionale, devi includere istruzioni nelle sezioni di modello seguenti:
- Sezione
Parameters
-
Definisci gli input che le condizioni devono valutare. Le condizioni restituiscono true o false in base ai valori di questi parametri di input. Se desiderate che le vostre condizioni valutino gli pseudoparametri, non è necessario definire gli pseudo parametri in questa sezione; gli pseudo parametri sono predefiniti da. CloudFormation Per ulteriori informazioni sugli pseudoparametri, consulta Riferimento pseudoparametri.
- Sezione
Conditions
-
Definisci le condizioni tramite le relative intrinseche funzioni. Queste condizioni determinano quando vengono create le risorse associate. CloudFormation Per alcuni esempi, consulta Modelli di esempio.
- Sezioni
Resources
eOutputs
-
Associa le condizioni alle risorse o agli output che desideri creare in modo condizionale. CloudFormation crea entità associate a una condizione vera e ignora le entità associate a una condizione falsa. Utilizza la chiave
Condition
e l'ID logico di una condizione per associarla a una risorsa o un output. Per specificare una proprietà in modo condizionale, utilizza la funzioneFn::If
. Per un esempio, vedete Associare una condizione.
Sintassi
La sezione Conditions
è composta dal nome di chiave Conditions
. Ogni dichiarazione della condizione include un ID logico e funzioni intrinseche che vengono valutati quando crei o aggiorni uno stack. Il seguente pseudomodello definisce la sezione Conditions
:
JSON
"Conditions" : { "
ConditionLogicalID
" : {Intrinsic function
} }
YAML
Conditions:
ConditionLogicalID
:Intrinsic function
Funzioni intrinseche delle condizioni
Puoi utilizzare le seguenti funzioni intrinseche per definire le condizioni:
-
Fn::And
-
Fn::Equals
-
Fn::ForEach
-
Fn::If
-
Fn::Not
-
Fn::Or
Per la sintassi e le informazioni su ogni funzione di condizione, vedi Funzioni di condizione. Per la sintassi e informazioni suFn::ForEach
, vedere Fn::ForEach.
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.
Esempi
Condizione semplice
Il seguente modello di esempio include un parametro di input EnvType
, dove puoi specificare prod
per creare uno stack per l'ambiente di produzione o test
per creare uno stack per il testing. Per un ambiente di produzione, CloudFormation crea un' EC2 istanza Amazon e allega un volume all'istanza. Per un ambiente di test, CloudFormation crea solo l' EC2 istanza Amazon.
La condizione CreateProdResources
restituisce true
se il parametro EnvType
è uguale a prod
. Nel modello di esempio, le risorse NewVolume
e MountPoint
sono associate alla condizione CreateProdResources
. Pertanto, le risorse vengono create solo se il parametro EnvType
è uguale a prod
.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type.", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test." } }, "Conditions": { "CreateProdResources": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "CreateProdResources", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "CreateProdResources", "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: CreateProdResources: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 MountPoint: Type: 'AWS::EC2::VolumeAttachment' Condition: CreateProdResources Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: 'AWS::EC2::Volume' Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone
Condizione nidificata
Il modello di esempio seguente fa riferimento a una condizione all'interno di un'altra condizione. È possibile creare uno stack che crea un bucket s3. Per uno stack distribuito in un ambiente di produzione, CloudFormation crea una policy per il bucket S3.
JSON
{ "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" }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": "..." } } } }
YAML
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 Policy: Type: 'AWS::S3::BucketPolicy' Condition: CreateBucketPolicy Properties: Bucket: !Ref BucketName PolicyDocument: ...