Condiciones - AWS CloudFormation

Condiciones

La sección opcional Conditions contiene declaraciones que definen las circunstancias por las que se crean o configuran las entidades. Por ejemplo, puede crear una condición y, a continuación, asociarla a un recurso o salida de manera que AWS CloudFormation solo cree el recurso o salida si la condición es true. Del mismo modo, puede asociar la condición a una propiedad de manera que AWS CloudFormation solo establezca la propiedad en un valor específico si la condición es true. Si la condición es false, AWS CloudFormation establece la propiedad en un valor diferente del especificado.

Es posible utilizar condiciones cuando desea reutilizar una plantilla que puede crear recursos en diferentes contextos, como, por ejemplo, un entorno de pruebas frente a un entorno de producción. En su plantilla, puede añadir un parámetro de entrada EnvironmentType, que acepte prod o test como entradas. Para el entorno de producción, podría incluir instancias Amazon EC2 con determinadas capacidades; sin embargo, para el entorno de prueba sugerimos utilizar capacidades reducidas para ahorrar dinero. Con las condiciones, puede definir qué recursos se crean y cómo se configuran para cada tipo de entorno.

Las condiciones se evalúan en función de pseudo parameters predefinidos o los valores de parámetros de entrada que especifique al crear o actualizar una pila. Dentro de cada condición, puede hacer referencia a otra condición, al valor del parámetro o a un mapeo. Después de definir todas las condiciones, puede asociarlas con los recursos y las propiedades de los recursos en las secciones Resources y Outputs de una plantilla.

En la creación o en la actualización de la pila, AWS CloudFormation evalúa todas las condiciones de su plantilla antes de crear cualquier recurso. Se crean recursos asociados a una condición true. Los recursos que están asociadas a una condición false se omiten. AWS CloudFormation vuelve a evaluar estas condiciones en cada actualización de pila antes de actualizar los recursos. Los recursos que siguen estando asociados a una condición true se actualizan. Los recursos que ahora están asociados a una condición false se eliminan.

importante

Durante la actualización de una pila, no se pueden actualizar condiciones por sí mismas. Puede actualizar condiciones solo cuando incluye cambios que añaden, modifican o eliminan recursos.

Utilización de la información general de condiciones

En función de la entidad que desee crear o configurar condicionalmente, debe incluir declaraciones en las siguientes secciones de plantilla:

Sección Parameters

Defina las entradas que desee que sus condiciones evalúen. Las condiciones se evalúan en true o false en función de los valores de estos parámetros de entrada. Si desea que sus condiciones evalúen pseudoparámetros, no es necesario definir los pseudoparámetros de esta sección; AWS CloudFormation predefine los pseudoparámetros.

Sección Conditions

Defina condiciones mediante las funciones de condiciones intrínsecas. Las condiciones determinan cuándo crea AWS CloudFormation los recursos asociados.

Secciones Resources y Outputs

Asocie condiciones con los recursos o salidas que desee crear condicionalmente. AWS CloudFormation crea entidades que se asocian a una condición true y pasa por alto las entidades que están asociadas a una condición false. Utilice la clave Condition y el ID lógico de una condición para asociarlo a un recurso o salida. Para especificar condicionalmente una propiedad, utilice la función Fn::If. Para obtener más información, consulte Funciones de condiciones.

Sintaxis

La sección Conditions consta del nombre de clave Conditions. Cada declaración de condición incluye un ID lógico y funciones intrínsecas que se evalúan cuando crea o actualiza una pila. La siguiente pseudoplantilla muestra la sección Conditions:

JSON

"Conditions" : { "Logical ID" : {Intrinsic function} }

YAML

Conditions: Logical ID: Intrinsic function

Funciones intrínsecas de condiciones

Puede utilizar las siguientes funciones intrínsecas para definir condiciones:

Para la sintaxis e información sobre cada función, consulte Funciones de condiciones.

nota

Fn::If solo se admite en el atributo de metadatos, el atributo de la política de actualización y los valores de la propiedad en la sección Resources y en la sección Outputs de una plantilla.

Ejemplos

Condición simple

La siguiente plantilla de ejemplo incluye un parámetro de entrada EnvType, donde puede especificar prod para crear una pila para la producción o test para crear una pila para las pruebas. En un entorno de producción, AWS CloudFormation crea una instancia de Amazon EC2 y adjunta un volumen a la instancia. Para un entorno de pruebas, AWS CloudFormation solo crea la instancia de Amazon EC2.

La condición CreateProdResources se evalúa como true si el parámetro EnvType es igual a prod. En la plantilla de ejemplo, los recursos NewVolume y MountPoint se asocian con la condición CreateProdResources. Por lo tanto, los recursos se crean únicamente si el parámetro EnvType es igual 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

Condición anidada

La siguiente plantilla de ejemplo hace referencia a una condición dentro de otra condición. Puede crear una pila que cree un bucket de s3. Para una pila implementada en un entorno de producción, AWS CloudFormation crea una política para el bucket de 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: ...