Condizioni - 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à.

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 e Outputs

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 funzione Fn::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: ...