Condições - AWS CloudFormation

Condições

A seção Conditions opcional contém instruções que definem as circunstâncias nas quais entidades são criadas ou configuradas. Por exemplo, você pode criar uma condição e, em seguida, associá-la a um recurso ou saída para que o AWS CloudFormation apenas cria o recurso ou a saída se essa condição for verdadeira. Da mesma forma, você pode associar a condição a uma propriedade, para que o AWS CloudFormation apenas defina a propriedade como um valor específico se essa condição for verdadeira. Se a condição for falsa, o AWS CloudFormation definirá a propriedade para um valor diferente que você especificar.

Você pode usar as condições quando você deseja reutilizar um modelo que pode criar recursos em contextos diferentes, como um ambiente de teste em comparação com um ambiente de produção. No modelo, você pode adicionar um parâmetro de entrada EnvironmentType que aceita prod ou test como entrada. Para o ambiente de produção, você pode incluir instâncias Amazon EC2 com determinados recursos. No entanto, para o ambiente de teste, você deve usar recursos reduzidos para economizar. Com as condições, você pode definir quais recursos são criados e como eles são configurados para cada tipo de ambiente.

As condições são avaliadas com base em pseudoparâmetros definidos previamente ou valores de parâmetros de entrada que você especifica ao criar ou atualizar uma pilha. Em cada condição, você pode fazer referência a outra condição, a um valor de parâmetro ou a um mapeamento. Depois de definir todas as condições, você pode associá-las a recursos e propriedades de recursos nas seções Resources e Outputs de um modelo.

Na criação ou na atualização da pilha, o AWS CloudFormation avalia todas as condições em seu modelo antes de criar qualquer recurso. Recursos associados a uma condição verdadeira são criados. Os recursos associados a uma condição falsa são ignorados. O AWS CloudFormation também avalia novamente essas condições em cada atualização da pilha antes de atualizar qualquer recurso. Recursos ainda associados a uma condição verdadeira são atualizados. Recursos agora associados a uma condição falsa são excluídos.

Importante

Durante uma atualização de pilha, você não pode atualizar as condições por si só. Você pode atualizar condições apenas ao incluir alterações que adicionam, modificam ou excluem recursos.

Como usar a visão geral de condições

Dependendo da entidade que você deseja criar ou configurar condicionalmente, é necessário incluir declarações nas seguintes seções de modelo:

Seção Parameters

Defina as entradas que você deseja avaliar em suas condições. As condições são avaliadas como "True" ou "False" com base nos valores desses parâmetros de entrada. Se quiser que as condições avaliem pseudoparâmetros, você não precisa definir esses pseudoparâmetros nesta seção; pseudoparâmetros são predefinidas pelo AWS CloudFormation.

Seção Conditions

Defina as condições usando as funções intrínsecas de condições. Essas condições determinam quando o AWS CloudFormation cria os recursos associados.

Seções Resources e Outputs

Associe condições aos recursos ou saídas que você deseja criar condicionalmente. O AWS CloudFormation cria entidades associadas a uma condição verdadeira e ignora entidades associadas a uma condição falsa. Use a chave Condition e um ID lógico da condição para associá-la a um recurso ou saída. Para especificar uma propriedade condicionalmente, use a função Fn::If. Para ter mais informações, consulte Funções de condição.

Sintaxe

A seção Conditions consiste no nome da chave Conditions. Cada declaração de condição inclui um ID lógico e funções intrínsecas que são avaliadas ao criar ou atualizar uma pilha. O pseudomodelo a seguir descreve a seção Conditions:

JSON

"Conditions" : { "MyLogicalID" : {Intrinsic function} }

YAML

Conditions: MyLogicalID: Intrinsic function

Funções intrínsecas da condição

Você pode usar as seguintes funções intrínsecas para definir condições:

Para obter a sintaxe e informações sobre cada função, consulte Funções de condição.

nota

Fn::If só tem suporte no atributo de metadados, no atributo de atualização de política e em valores de propriedade nas seções Resources e Outputs de um modelo.

Exemplos

Condição simples

O exemplo de modelo a seguir inclui um parâmetro de entrada EnvType, onde você pode especificar prod para criar uma pilha para produção ou test para criar uma pilha para teste. Para um ambiente de produção, o AWS CloudFormation cria uma instância do Amazon EC2 e anexa um volume à instância. Em um ambiente de teste, o AWS CloudFormation cria apenas a instância do Amazon EC2.

A condição CreateProdResources será avaliada true se o parâmetro EnvType for igual a prod. No modelo de exemplo, os recursos NewVolume e MountPoint estão associados à condição CreateProdResources. Portanto, os recursos serão criados apenas se o parâmetro EnvType for 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

Condição aninhada

O seguinte modelo de exemplo faz referência a uma condição dentro de outra condição. Você pode criar uma pilha que crie um bucket do s3. Para uma pilha implantada em um ambiente de produção, o AWS CloudFormation cria uma política para o bucket do 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: ...