Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Funções de condição

Modo de foco
Funções de condição - AWS CloudFormation
Filtrar visualização

Você pode usar funções intrínsecas, como Fn::If, Fn::Equals e Fn::Not, para criar condicionalmente recursos da pilha. Essas condições são avaliadas com base nos parâmetros de entrada que você declara ao criar ou atualizar uma pilha. Depois de definir todas as condições, você pode associá-las a recursos ou propriedades de recursos nas seções Recursos e Saídas de um modelo.

Você define todas as condições na seção Condições de um modelo, exceto para as condições Fn::If. Você pode usar a condição Fn::If no atributo de metadados, atualizar o atributo de política e valores de propriedade nas seções Recursos e Saídas de um modelo.

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 menos recursos para economizar custos. Com as condições, você pode definir quais recursos são criados e como eles são configurados para cada tipo de ambiente.

Para obter mais informações sobre a seção Condições, consulte Sintaxe de Conditions de modelo do CloudFormation.

nota

Você só pode fazer referência a outras condições e valores das seções Parâmetros e Mapeamentos de um modelo. Por exemplo, você pode fazer referência a um valor de um parâmetro de entrada, mas não ao ID lógico de um recurso em uma condição.

Associar uma condição

Para criar condicionalmente recursos, propriedades de recursos ou saídas, você deve associar uma condição a eles. Adicione a chave Condition: e o ID lógico da condição como um atributo para associar uma condição, como mostrado no seguinte trecho. O AWS CloudFormation cria o recurso NewVolume somente quando a condição CreateProdResources avalia como verdadeira.

JSON

"NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "CreateProdResources", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} }

YAML

NewVolume: Type: "AWS::EC2::Volume" Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone

Fn::If

Para a função Fn::If, você só precisa especificar o nome da condição. O seguinte trecho mostra como usar Fn::If para especificar condicionalmente uma propriedade de recurso. Se a condição CreateLargeSize for verdadeira, o CloudFormation definirá o tamanho do volume como 100. Se a condição for falsa, o CloudFormation definirá o tamanho do volume como 10.

JSON

{ "NewVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": { "Fn::If": [ "CreateLargeSize", "100", "10" ] }, "AvailabilityZone": { "Fn::GetAtt": [ "Ec2Instance", "AvailabilityZone" ] } }, "DeletionPolicy": "Snapshot" } }

YAML

NewVolume: Type: 'AWS::EC2::Volume' Properties: Size: 'Fn::If': - CreateLargeSize - '100' - '10' AvailabilityZone: 'Fn::GetAtt': - Ec2Instance - AvailabilityZone DeletionPolicy: Snapshot

Condições aninhadas

Você também pode usar condições em outras condições. O seguinte trecho é da seção Conditions de um modelo. A condição MyAndCondition inclui a condição SomeOtherCondition:

JSON
"MyAndCondition": { "Fn::And": [ {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]}, {"Condition": "SomeOtherCondition"} ] }
YAML
MyAndCondition: !And - !Equals ["sg-mysggroup", !Ref "ASecurityGroup"] - !Condition SomeOtherCondition

Fn::And

Retorna true se todas as condições especificadas forem verdadeiras, ou retornarem false se alguma das condições for falsa. O Fn::And atua como operador AND. O número mínimo de condições que você pode incluir é 2 e o máximo é 10.

Declaração

JSON

"Fn::And": [{condition}, {...}]

YAML

Sintaxe para o nome da função completo:

Fn::And: [condition]

Sintaxe para a forma resumida:

!And [condition]

Parâmetros

condition

Uma condição que avalia como true ou false.

Exemplo

O seguinte MyAndCondition avalia como verdadeiro se o nome do security group referenciado é igual a sg-mysggroup e se SomeOtherCondition avalia como verdadeiro:

JSON

"MyAndCondition": { "Fn::And": [ {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]}, {"Condition": "SomeOtherCondition"} ] }

YAML

MyAndCondition: !And - !Equals ["sg-mysggroup", !Ref ASecurityGroup] - !Condition SomeOtherCondition

Fn::Equals

Compara se dois valores são iguais. Retorna true se os dois valores são iguais ou false se eles não são.

Declaração

JSON

"Fn::Equals" : ["value_1", "value_2"]

YAML

Sintaxe para o nome da função completo:

Fn::Equals: [value_1, value_2]

Sintaxe para a forma resumida:

!Equals [value_1, value_2]

Parâmetros

value

Um valor de qualquer tipo que você deseja comparar.

Exemplo

A seguinte condição UseProdCondition avaliará como verdadeira se o valor para o parâmetro EnvironmentType for igual a prod:

JSON

"UseProdCondition" : { "Fn::Equals": [ {"Ref": "EnvironmentType"}, "prod" ] }

YAML

UseProdCondition: !Equals [!Ref EnvironmentType, prod]

Fn::If

Retorna um valor se a condição especificada avalia como true e outro valor se a condição especificada avalia como false. Atualmente, o CloudFormation é compatível com a função intrínseca Fn::If no atributo de metadados, a atualização do atributo de política e os valores de propriedade nas seções Recursos e Saídas de um modelo. Você pode usar o pseudoparâmetro AWS::NoValue como um valor de retorno para remover a propriedade correspondente.

Declaração

YAML

Sintaxe para o nome da função completo:

Fn::If: [condition_name, value_if_true, value_if_false]

Sintaxe para a forma resumida:

!If [condition_name, value_if_true, value_if_false]

Parâmetros

condition_name

Uma referência a uma condição na seção Condições. Use o nome da condição para fazer referência a ele.

value_if_true

Um valor a ser retornado se a condição especificada avalia como true.

value_if_false

Um valor a ser retornado se a condição especificada avalia como false.

Exemplos

Para visualizar mais exemplos, consulte Exemplos de modelo.

Exemplo 1

O seguinte trecho usa uma função Fn::If na propriedade SecurityGroups para um recurso do Amazon EC2. Se a condição CreateNewSecurityGroup for verdadeira, o CloudFormation usará o valor referenciado de NewSecurityGroup para especificar a propriedade SecurityGroups; caso contrário, o CloudFormation usará o valor referenciado de ExistingSecurityGroup.

JSON
"SecurityGroups" : [{ "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] }]
YAML
SecurityGroups: - !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]

Exemplo 2

Na seção Saída de um modelo, você pode usar a função Fn::If para emitir condicionalmente informações. No seguinte trecho, se a condição CreateNewSecurityGroup for verdadeira, o CloudFormation emitirá o ID do grupo de segurança do recurso NewSecurityGroup. Se a condição for falsa, o CloudFormation emitirá o ID do grupo de segurança do recurso ExistingSecurityGroup.

JSON
"Outputs" : { "SecurityGroupId" : { "Description" : "Group ID of the security group used.", "Value" : { "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] } } }
YAML
Outputs: SecurityGroupId: Description: Group ID of the security group used. Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]

Exemplo 3

O seguinte trecho usa o pseudoparâmetro AWS::NoValue em uma função Fn::If. A condição usa um snapshot para uma instância de banco de dados do Amazon RDS somente se o ID do snapshot é fornecido. Se a condição UseDBSnapshot for avaliada como verdadeira, o CloudFormation usará o valor do parâmetro DBSnapshotName para a propriedade DBSnapshotIdentifier. Se a condição for avaliada como falsa, o CloudFormation removerá a propriedade DBSnapshotIdentifier.

JSON
"MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }
YAML
MyDB: Type: "AWS::RDS::DBInstance" Properties: AllocatedStorage: 5 DBInstanceClass: db.t2.small Engine: MySQL EngineVersion: 5.5 MasterUsername: !Ref DBUser MasterUserPassword: !Ref DBPassword DBParameterGroupName: !Ref MyRDSParamGroup DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"]

Exemplo 4

O seguinte trecho oferece uma política de atualização do Auto Scaling somente se a condição RollingUpdates for verdadeira. Se a condição for avaliada como falsa, o CloudFormation removerá a política de atualização AutoScalingRollingUpdate.

JSON
"UpdatePolicy": { "AutoScalingRollingUpdate": { "Fn::If": [ "RollingUpdates", { "MaxBatchSize": "2", "MinInstancesInService": "2", "PauseTime": "PT0M30S" }, { "Ref" : "AWS::NoValue" } ] } }
YAML
UpdatePolicy: AutoScalingRollingUpdate: !If - RollingUpdates - MaxBatchSize: 2 MinInstancesInService: 2 PauseTime: PT0M30S - !Ref "AWS::NoValue"

Fn::Not

Retorna true para uma condição que avalia como false ou retorna false para uma condição que avalia como true. Fn::Not funciona como o operador NOT.

Declaração

JSON

"Fn::Not": [{condition}]

YAML

Sintaxe para o nome da função completo:

Fn::Not: [condition]

Sintaxe para a forma resumida:

!Not [condition]

Parâmetros

condition

Uma condição como Fn::Equals que avalia como true ou false.

Exemplo

A seguinte condição EnvCondition será avaliada como verdadeira se o valor para o parâmetro EnvironmentType não for igual a prod:

JSON

"MyNotCondition" : { "Fn::Not" : [{ "Fn::Equals" : [ {"Ref" : "EnvironmentType"}, "prod" ] }] }

YAML

MyNotCondition: !Not [!Equals [!Ref EnvironmentType, prod]]

Fn::Or

Retorna true se alguma das condições especificadas forem verdadeiras, ou retornarem false se todas as condições forem falsas. O Fn::Or atua como operador OR. O número mínimo de condições que você pode incluir é 2 e o máximo é 10.

Declaração

JSON

"Fn::Or": [{condition}, {...}]

YAML

Sintaxe para o nome da função completo:

Fn::Or: [condition, ...]

Sintaxe para a forma resumida:

!Or [condition, ...]

Parâmetros

condition

Uma condição que avalia como true ou false.

Exemplo

O seguinte MyOrCondition avalia como verdadeiro se o nome do security group referenciado é igual a sg-mysggroup ou se SomeOtherCondition avalia como verdadeiro:

JSON

"MyOrCondition" : { "Fn::Or" : [ {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]}, {"Condition" : "SomeOtherCondition"} ] }

YAML

MyOrCondition: !Or [!Equals [sg-mysggroup, !Ref ASecurityGroup], Condition: SomeOtherCondition]

Funções compatíveis

Você pode usar as seguintes funções na condição Fn::If:

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Sub

  • Ref

Você pode usar as seguintes funções em todas as outras funções de condição, como Fn::Equals e Fn::Or:

  • Fn::FindInMap

  • Ref

  • Outras funções de condição

PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.