

Esta es la nueva *Guía de referencia de plantillas de CloudFormation*. Actualice sus marcadores y enlaces. Para obtener ayuda sobre cómo empezar a usar CloudFormation, consulte la [Guía del usuario de AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

# Funciones de reglas
<a name="intrinsic-function-reference-rules"></a>

Las funciones de regla son funciones especiales que solo funcionan en la sección `Rules` de una plantilla de CloudFormation. Estas funciones ayudan a validar los valores de los parámetros con una lógica personalizada. Todas las validaciones se realizan antes de que CloudFormation cree o actualice cualquier recurso.

Las reglas son útiles cuando las restricciones de los parámetros estándar no son suficientes. Por ejemplo, cuando SSL está habilitado, se debe proporcionar tanto un certificado como un nombre de dominio. Una regla puede garantizar que se cumplan estas dependencias.

Puede utilizar funciones intrínsecas en la condición o en las declaraciones de una regla; por ejemplo, `Fn::Equals`, `Fn::Not` y `Fn::RefAll`. La propiedad de condición determina si CloudFormation aplicará las declaraciones. Si la condición se evalúa como `true`, CloudFormation evalúa las declaraciones para comprobar si el valor de un parámetro es válido en el momento de crear o actualizar una pila. Si un valor de parámetro no es válido, CloudFormation no crea ni actualiza la pila. Si la condición se evalúa como `false`, CloudFormation no comprueba el valor del parámetro y procede a llevar a cabo la operación de la pila.

Si es la primera vez que utiliza reglas en sus plantillas, recomendamos consulta primero el tema de [sintaxis de Rules de las plantillas de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/rules-section-structure.html) en la *Guía del usuario de 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)
+ [Funciones compatibles](#supported-rule-functions)
+ [Atributos admitidos](#rules-parameter-attributes)

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

Devuelve `true` si todas las condiciones especificadas se evalúan como `true`; devuelve `false` si alguna de las condiciones se evalúa como `false`. `Fn::And` actúa como operador AND. El número mínimo de condiciones que puede incluir es de dos y el máximo es de diez.

### Declaración
<a name="fn-and-declaration"></a>

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

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

*condition*  
Una función intrínseca específica de una regla que se evalúa en `true` o en `false`.

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

En el siguiente ejemplo, la condición se evalúa en `true` si el nombre del grupo de seguridad al que se hace referencia es igual a `sg-mysggroup` y si el valor del parámetro `InstanceType` es `t3.large` o `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>

Devuelve `true` si una cadena especificada coincide con al menos uno de los valores de una lista de cadenas.

### Declaración
<a name="fn-contains-declaration"></a>

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

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

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

*cadena*  
Una cadena, como `"A"`, que se desea comparar con una lista de cadenas.

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

La siguiente función se evalúa en `true` si el valor del parámetro `InstanceType` figura en la lista (`t3.large` o `t3.small`):

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

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

Devuelve `true` si una cadena especificada coincide con todos los valores de una lista.

### Declaración
<a name="fn-eachmemberequals-declaration"></a>

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

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

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

*cadena*  
Una cadena, como `"A"`, que se desea comparar con una lista de cadenas.

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

La siguiente función devuelve `true` si la etiqueta `Department` para todos los parámetros de tipo `AWS::EC2::VPC::Id` tiene un valor de `IT`:

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

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

Devuelve `true` si cada miembro de una lista de cadenas coincide con al menos un valor de una segunda lista de cadenas.

### Declaración
<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*  
Una lista de cadenas, como `"A", "B", "C"`. CloudFormation comprueba si cada miembro del parámetro `strings_to_check` está presente en el parámetro `strings_to_match`.

*strings\$1to\$1match*  
Una lista de cadenas, como `"A", "B", "C"`. Cada miembro del parámetro `strings_to_match` se compara con los miembros del parámetro `strings_to_check`.

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

La siguiente función comprueba si los usuarios especifican una subred que pertenece a una nube virtual privada (VPC). La VPC debe encontrarse en la cuenta y la región en las que los usuarios trabajan con la pila. La función se aplica a todos los parámetros de 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 dos valores para determinar si son iguales. Devuelve `true` si los dos valores son iguales y `false` si no lo son.

### Declaración
<a name="fn-equals-declaration"></a>

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

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

*`value`*  
Un valor de cualquier tipo que se desea comparar con otro valor.

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

El ejemplo siguiente se evalúa en `true` si el valor del parámetro `EnvironmentType` es igual a `prod`:

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

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

Devuelve `true` para una condición que se evalúa en `false` y devuelve `false` para una condición que se evalúa en `true`. `Fn::Not` actúa como operador NOT.

### Declaración
<a name="fn-not-declaration"></a>

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

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

*`condition`*  
Una función intrínseca específica de una regla que se evalúa en `true` o en `false`.

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

El ejemplo siguiente se evalúa como `true` si el valor del parámetro `EnvironmentType` no es igual a `prod`:

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

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

Devuelve `true` si cualquiera de las condiciones especificadas se evalúa como `true`; devuelve `false` si todas las condiciones se evalúan como `false`. `Fn::Or` actúa como operador OR. El número mínimo de condiciones que puede incluir es de dos y el máximo es de diez.

### Declaración
<a name="fn-or-declaration"></a>

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

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

*`condition`*  
Una función intrínseca específica de una regla que se evalúa en `true` o en `false`.

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

En el siguiente ejemplo, la condición se evalúa en `true` si el nombre del grupo de seguridad al que se hace referencia es igual a `sg-mysggroup` o si el valor del parámetro `InstanceType` es `t3.large` o `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>

Devuelve todos los valores de un tipo de parámetro determinado.

### Declaración
<a name="fn-refall-declaration"></a>

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

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

*parameter\$1type*  
Tipo de parámetro específico de AWS, como `AWS::EC2::SecurityGroup::Id` o `AWS::EC2::VPC::Id`. Para obtener más información, consulte [Tipos de parámetros específicos de AWS compatibles](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) en la *Guía del usuario de AWS CloudFormation*.

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

La siguiente función devuelve una lista de todos los ID de VPC de la región, y la Cuenta de AWS en los que se crea o actualiza la pila:

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

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

Devuelve un valor de atributo o una lista de valores para un parámetro y un atributo específicos.

### Declaración
<a name="fn-valueof-declaration"></a>

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

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

*atributo*  
El nombre de un atributo del cual recuperar un valor. Para obtener más información acerca de los atributos, consulte [Atributos admitidos](#rules-parameter-attributes).

*parameter\$1logical\$1id*  
Nombre de un parámetro del cual recuperar valores de atributo. El parámetro debe declararse en la sección `Parameters` de la plantilla.

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

El siguiente ejemplo devuelve el valor de la etiqueta `Department` de la VPC que se especifica en el parámetro `ElbVpc`:

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

Si especifica varios valores para un parámetro, la función Fn::ValueOf puede devolver una lista. Por ejemplo, puede especificar varias subredes y obtener una lista de zonas de disponibilidad en la que cada miembro sea la zona de disponibilidad de una subred determinada:

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

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

Devuelve una lista de todos los valores de atributo de un tipo de parámetro y un atributo determinados.

### Declaración
<a name="fn-valueofall-declaration"></a>

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

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

*atributo*  
El nombre de un atributo del que desea recuperar un valor. Para obtener más información acerca de los atributos, consulte [Atributos admitidos](#rules-parameter-attributes).

*parameter\$1type*  
Tipo de parámetro específico de AWS, como `AWS::EC2::SecurityGroup::Id` o `AWS::EC2::VPC::Id`. Para obtener más información, consulte [Tipos de parámetros específicos de AWS compatibles](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) en la *Guía del usuario de AWS CloudFormation*.

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

En el siguiente ejemplo, la función `Fn::ValueOfAll` devuelve una lista de valores en la que cada miembro es el valor de la etiqueta `Department` de las VPC que tienen esa etiqueta:

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

## Funciones compatibles
<a name="supported-rule-functions"></a>

No puede utilizar otra función en las funciones `Fn::ValueOf` y `Fn::ValueOfAll`. No obstante, puede utilizar las siguientes funciones dentro de todas las demás funciones intrínsecas específicas de reglas:
+ `Ref`
+ Otras funciones intrínsecas específicas de reglas

## Atributos admitidos
<a name="rules-parameter-attributes"></a>

En la siguiente lista se describen los valores de los atributos que puede recuperar para recursos y tipos de parámetros concretos:

El tipo de parámetro `AWS::EC2::VPC::Id` o los identificadores de la VPC.  
+ DefaultNetworkAcl
+ DefaultSecurityGroup
+ Tags.*tag\$1key*

El tipo de parámetro `AWS::EC2::Subnet::Id` o los ID de subred  
+ AvailabilityZone
+ Tags.*tag\$1key*
+ VpcId

El tipo de parámetro `AWS::EC2::SecurityGroup::Id` o los identificadores de grupo de seguridad.  
+ Tags.*tag\$1key*