CloudFormation Conditionssintassi del modello - AWS CloudFormation

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'prodambiente, è possibile includere EC2 istanze con determinate funzionalità, mentre per l'testambiente è 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:

  1. 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.

  2. 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.

  3. 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, utilizzalo Fn::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.

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.