

Este é o novo *Guia de referência de modelos do CloudFormation*. Atualize seus favoritos e links. Para obter ajuda para começar a usar o CloudFormation, consulte o [Guia do usuário do AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

# Funções de regras
<a name="intrinsic-function-reference-rules"></a>

As funções de regra são funções especiais que funcionam somente na seção `Rules` de um modelo do CloudFormation. Essas funções ajudam você a validar valores de parâmetros usando lógica personalizada. Todas as validações ocorrem antes que o CloudFormation crie ou atualize quaisquer recursos.

As regras são úteis quando as restrições de parâmetros padrão são insuficientes. Por exemplo, quando o SSL estiver habilitado, um certificado e um nome de domínio deverão ser fornecidos. Uma regra pode garantir que essas dependências sejam atendidas.

Na condição ou asserções de uma regra, você pode usar as funções intrínsecas, como `Fn::Equals`, `Fn::Not` e `Fn::RefAll`. A propriedade da condição determina se o CloudFormation se aplica a asserções. Se a condição for avaliada como `true`, o CloudFormation avaliará as asserções para verificar se um valor de parâmetro é válido quando uma pilha for criada ou atualizada. Se um valor de parâmetro não for válido, o CloudFormation não criará ou atualizará a pilha. Se a condição for avaliada como `false`, o CloudFormation não verificará o valor do parâmetro e prosseguirá com a operação de pilha.

Se você é novo no uso de regras em seus modelos, recomendamos analisar primeiro o tópico de [Sintaxe de Rules do modelo do CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/rules-section-structure.html) no *Guia do usuário do AWS CloudFormation*.

**Topics**
+ [`Fn::And`](#fn-and)
+ [`Fn::Contains`](#fn-contains)
+ [`Fn::EachMemberEquals`](#fn-eachmemberequals)
+ [`Fn::EachMemberIn`](#fn-eachmemberin)
+ [`Fn::Equals`](#fn-equals)
+ [`Fn::Not`](#fn-not)
+ [`Fn::Or`](#fn-or)
+ [`Fn::RefAll`](#fn-refall)
+ [`Fn::ValueOf`](#fn-valueof)
+ [`Fn::ValueOfAll`](#fn-valueofall)
+ [Funções compatíveis](#supported-rule-functions)
+ [Atributos compatíveis](#rules-parameter-attributes)

## `Fn::And`
<a name="fn-and"></a>

Retorna `true` se todas as condições especificadas forem avaliadas como `true`; retorna `false` se alguma das condições for avaliada como `false`. `Fn::And` funciona como um operador AND. O número mínimo de condições que você pode incluir é duas, e o máximo é dez.

### Declaração
<a name="fn-and-declaration"></a>

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

### Parâmetros
<a name="fn-and-parameters"></a>

*condição*  
Uma função intrínseca específica da regra que pode ser avaliada como `true` ou `false`.

### Exemplo
<a name="fn-and-example"></a>

O exemplo a seguir será avaliado como `true` se o nome do grupo de segurança referenciado for igual a `sg-mysggroup` e se o valor do parâmetro `InstanceType` for `t3.large` ou `t3.small`:

```
"Fn::And": [
  {
    "Fn::Equals": [
      "sg-mysggroup",
      {"Ref": "ASecurityGroup"}
    ]
  },
  {
    "Fn::Contains": [
      [
        "t3.large",
        "t3.small"
      ],
      {"Ref": "InstanceType"}
    ]
  }
]
```

## `Fn::Contains`
<a name="fn-contains"></a>

Retorna `true` se uma string especificada corresponder a pelo menos um valor em uma lista de strings.

### Declaração
<a name="fn-contains-declaration"></a>

```
"Fn::Contains" : [[list_of_strings], string]
```

### Parâmetros
<a name="fn-contains-parameters"></a>

*list\$1of\$1strings*  
Uma lista de strings, como `"A", "B", "C"`.

*string*  
Uma string, como `"A"`, que você compara com uma lista de strings.

### Exemplo
<a name="fn-contains-example"></a>

A função a seguir será avaliada como `true` se o valor do parâmetro `InstanceType` estiver contido na lista (`t3.large` ou `t3.small`):

```
"Fn::Contains" : [
  ["t3.large", "t3.small"], {"Ref" : "InstanceType"}
]
```

## `Fn::EachMemberEquals`
<a name="fn-eachmemberequals"></a>

Retorna `true` se uma string especificada corresponder a todos os valores em uma lista.

### Declaração
<a name="fn-eachmemberequals-declaration"></a>

```
"Fn::EachMemberEquals" : [[list_of_strings], string]
```

### Parâmetros
<a name="fn-eachmemberequals-parameters"></a>

*list\$1of\$1strings*  
Uma lista de strings, como `"A", "B", "C"`.

*string*  
Uma string, como `"A"`, que você compara com uma lista de strings.

### Exemplo
<a name="fn-eachmemberequals-example"></a>

A função a seguir retornará `true` se a etiqueta `Department` de todos os parâmetros do tipo `AWS::EC2::VPC::Id` tiver o valor de `IT`.

```
"Fn::EachMemberEquals" : [
  {"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]}, "IT"
]
```

## `Fn::EachMemberIn`
<a name="fn-eachmemberin"></a>

Retorna `true` se cada membro em uma lista de strings corresponder a pelo menos um valor em uma segunda lista de strings.

### Declaração
<a name="fn-eachmemberin-declaration"></a>

```
"Fn::EachMemberIn" : [[strings_to_check], [strings_to_match]]
```

### Parâmetros
<a name="fn-eachmemberin-parameters"></a>

*strings\$1to\$1check*  
Uma lista de strings, como `"A", "B", "C"`. O CloudFormation verifica se cada membro no parâmetro `strings_to_check` está no parâmetro `strings_to_match`.

*strings\$1to\$1match*  
Uma lista de strings, como `"A", "B", "C"`. Cada membro no parâmetro `strings_to_match` é comparado com os membros do parâmetro `strings_to_check`.

### Exemplo
<a name="fn-eachmemberin-example"></a>

A função a seguir verifica se os usuários especificam uma sub-rede que esteja em uma Virtual Private Cloud (VPC). A VPC deve estar na conta e na região em que os usuários estão trabalhando com a pilha. A função aplica-se a todos os parâmetros do tipo `AWS::EC2::Subnet::Id`.

```
"Fn::EachMemberIn" : [ 
  {"Fn::ValueOfAll" : ["AWS::EC2::Subnet::Id", "VpcId"]}, {"Fn::RefAll" : "AWS::EC2::VPC::Id"}
]
```

## `Fn::Equals`
<a name="fn-equals"></a>

Compara dois valores para determinar se eles são iguais. Retorna `true` se os dois valores forem iguais e `false` se eles não forem.

### Declaração
<a name="fn-equals-declaration"></a>

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

### Parâmetros
<a name="fn-equals-parameters"></a>

*`value`*  
Um valor de qualquer tipo para você comparar com outro valor.

### Exemplo
<a name="fn-equals-example"></a>

O exemplo a seguir será avaliado como `true` se o valor do parâmetro `EnvironmentType` for igual a `prod`:

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

## `Fn::Not`
<a name="fn-not"></a>

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

### Declaração
<a name="fn-not-declaration"></a>

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

### Parâmetros
<a name="fn-not-parameters"></a>

*`condition`*  
Uma função intrínseca específica da regra que pode ser avaliada como `true` ou `false`.

### Exemplo
<a name="fn-not-example"></a>

O exemplo a seguir será avaliado como `true` se o valor do parâmetro `EnvironmentType` não for igual a `prod`:

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

## `Fn::Or`
<a name="fn-or"></a>

Retorna `true` se uma das condições especificadas for avaliada como `true`; retorna `false` se todas as condições forem avaliadas como `false`. `Fn::Or` funciona como um operador OR. O número mínimo de condições que você pode incluir é duas, e o máximo é dez.

### Declaração
<a name="fn-or-declaration"></a>

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

### Parâmetros
<a name="fn-or-parameters"></a>

*`condition`*  
Uma função intrínseca específica da regra que pode ser avaliada como `true` ou `false`.

### Exemplo
<a name="fn-or-example"></a>

O exemplo a seguir será avaliado como `true` se o nome do grupo de segurança referenciado for igual a `sg-mysggroup` ou se o valor do parâmetro `InstanceType` for `t3.large` ou `t3.small`:

```
"Fn::Or" : [
  {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]},
  {"Fn::Contains" : [["t3.large", "t3.small"], {"Ref" : "InstanceType"}]}
]
```

## `Fn::RefAll`
<a name="fn-refall"></a>

Retorna todos os valores de determinado tipo de parâmetro.

### Declaração
<a name="fn-refall-declaration"></a>

```
"Fn::RefAll" : "parameter_type"
```

### Parâmetros
<a name="fn-refall-parameters"></a>

*parameter\$1type*  
Um tipo de parâmetro específico da AWS, como `AWS::EC2::SecurityGroup::Id` ou `AWS::EC2::VPC::Id`. Para obter mais informações, consulte [Tipos de parâmetros específicos da AWS compatíveis](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) no *Guia do usuário do AWS CloudFormation*.

### Exemplo
<a name="fn-refall-example"></a>

A seguinte função retorna uma lista de todos os IDs da VPC para a região e para a Conta da AWS em que a pilha está sendo criada ou atualizada:

```
"Fn::RefAll" : "AWS::EC2::VPC::Id"
```

## `Fn::ValueOf`
<a name="fn-valueof"></a>

Retorna um valor de atributo ou lista de valores de um parâmetro e atributo específicos.

### Declaração
<a name="fn-valueof-declaration"></a>

```
"Fn::ValueOf" : [ "parameter_logical_id", "attribute" ]
```

### Parâmetros
<a name="fn-valueof-parameters"></a>

*atributo*  
O nome de um atributo do qual você deseja recuperar um valor. Para obter mais informações sobre atributos, consulte [Atributos compatíveis](#rules-parameter-attributes).

*parameter\$1logical\$1id*  
O nome de um parâmetro do qual você deseja recuperar valores de atributos. O parâmetro já deve estar declarado na seção `Parameters` do modelo.

### Exemplos
<a name="fn-valueof-examples"></a>

O exemplo a seguir retorna o valor da tag `Department` para a VPC que é especificada pelo parâmetro `ElbVpc`:

```
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
```

Se você especificar vários valores para um parâmetro, a função Fn::ValueOf poderá retornar uma lista. Por exemplo, você pode especificar várias sub-redes e obter uma lista de zonas de disponibilidade, em que cada membro é a Zona de disponibilidade de determinada sub-rede:

```
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
```

## `Fn::ValueOfAll`
<a name="fn-valueofall"></a>

Retorna uma lista de valores de atributos de um tipo de parâmetro e atributo.

### Declaração
<a name="fn-valueofall-declaration"></a>

```
"Fn::ValueOfAll" : ["parameter_type", "attribute"]
```

### Parâmetros
<a name="fn-valueofall-parameters"></a>

*atributo*  
O nome de um atributo do qual você quer recuperar um valor. Para obter mais informações sobre atributos, consulte [Atributos compatíveis](#rules-parameter-attributes).

*parameter\$1type*  
Um tipo de parâmetro específico da AWS, como `AWS::EC2::SecurityGroup::Id` ou `AWS::EC2::VPC::Id`. Para obter mais informações, consulte [Tipos de parâmetros específicos da AWS compatíveis](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) no *Guia do usuário do AWS CloudFormation*.

### Exemplo
<a name="fn-valueofall-example"></a>

No exemplo a seguir, a função `Fn::ValueOfAll` retorna uma lista de valores, em que cada membro é o valor da tag `Department` das VPCs com essa tag:

```
"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]
```

## Funções compatíveis
<a name="supported-rule-functions"></a>

Você não pode usar outra função nas funções `Fn::ValueOf` e `Fn::ValueOfAll`. No entanto, você pode usar as seguintes funções dentro de todas as outras funções intrínsecas específicas de regras:
+ `Ref`
+ Outras funções intrínsecas específicas de regras

## Atributos compatíveis
<a name="rules-parameter-attributes"></a>

A lista a seguir descreve os valores de atributos que você pode recuperar para tipos específicos de recursos e parâmetros:

O tipo de parâmetro `AWS::EC2::VPC::Id` ou IDs da VPC.  
+ DefaultNetworkAcl
+ DefaultSecurityGroup
+ Tags.*tag\$1key*

O tipo de parâmetro `AWS::EC2::Subnet::Id` ou IDs da sub-rede.  
+ AvailabilityZone
+ Tags.*tag\$1key*
+ VpcId

O tipo de parâmetro `AWS::EC2::SecurityGroup::Id` ou IDs do grupo de segurança.  
+ Tags.*tag\$1key*