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à.
Condizioni
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 AWS CloudFormation solo se la condizione è vera. Analogamente, è possibile associare la condizione a una proprietà in modo da impostare la proprietà su un valore specifico AWS CloudFormation solo se la condizione è vera. Se la condizione è falsa, AWS 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, puoi includere istanze Amazon EC2 con alcune funzionalità. Tuttavia, per l'ambiente di test, vuoi utilizzare le 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 pseudo parameters
predefiniti o a valori di parametri 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 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. AWS 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.
Panoramica delle modalità di utilizzo delle 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. AWS CloudFormation
- Sezione
Conditions
-
Definisci le condizioni tramite le relative intrinseche funzioni. Queste condizioni determinano quando vengono create le risorse associate. AWS CloudFormation
- Sezioni
Resources
eOutputs
-
Associa le condizioni alle risorse o agli output che vuoi creare in modo condizionale. AWS CloudFormation crea le entità associate a una condizione true e ignora le entità associate a una condizione false. 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 ulteriori informazioni, consulta Funzioni di 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" : { "
Logical ID
" : {Intrinsic function
} }
YAML
Conditions:
Logical ID
:Intrinsic function
Funzioni intrinseche delle condizioni
Puoi utilizzare le seguenti funzioni intrinseche per definire le condizioni:
Per informazioni sulla sintassi e su ogni funzione, consulta Funzioni di condizione.
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, AWS CloudFormation crea un'istanza Amazon EC2 e collega un volume all'istanza. Per un ambiente di test, AWS CloudFormation crea solo l'istanza Amazon EC2.
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, AWS 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: ...