

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AWS Service Catalog Restricciones de plantilla
<a name="catalogs_constraints_template-constraints"></a>

**nota**  
AWS Service Catalog no admite restricciones de plantilla para los productos Terraform Open Source o Terraform Cloud. 

Para limitar las opciones que los usuarios finales tienen a su disposición cuando lanzan un producto, se aplican restricciones de plantilla. Aplique restricciones de plantilla para asegurarse de que los usuarios finales puedan usar los productos sin infringir los requisitos de conformidad de la organización. Aplicas restricciones de plantilla a un producto de una AWS Service Catalog cartera. Una cartera debe contener uno o varios productos para que sea posible definir restricciones de plantilla.

Una restricción de plantilla consiste en una o más reglas que limitan los valores permitidos para los parámetros que se definen en la plantilla subyacente CloudFormation del producto. Los parámetros de una plantilla de CloudFormation definen el conjunto de valores que los usuarios pueden especificar al crear una pila. Por ejemplo, un parámetro podría definir los distintos tipos de instancias entre los que los usuarios pueden elegir al lanzar una pila que incluye EC2 instancias.

Si el conjunto de valores de parámetros de una plantilla es demasiado amplio para los destinatarios de la cartera, puede definir restricciones de plantilla con el fin de limitar los valores que los usuarios pueden elegir al lanzar un producto. Por ejemplo, si los parámetros de la plantilla incluyen tipos de EC2 instancias que son demasiado grandes para los usuarios que deberían usar solo tipos de instancias pequeños (como `t2.micro` o`t2.small`), puedes añadir una restricción de plantilla para limitar los tipos de instancias que pueden elegir los usuarios finales. Para obtener más información sobre los parámetros CloudFormation de la plantilla, consulta [Parámetros](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) en la *Guía del CloudFormation usuario*.

Las restricciones de plantilla están vinculadas a una cartera. Si se aplican restricciones de plantilla a un producto de una cartera y, a continuación, se incluye el producto en otra cartera, las restricciones no se aplicarán al producto en la segunda cartera.

Si se aplica una restricción de plantilla a un producto que ya se ha compartido con los usuarios, la restricción se activará de inmediato para todos los lanzamientos de productos posteriores y para todas las versiones del producto que contenga esa cartera.

Las reglas de restricción de plantillas se definen mediante un editor de reglas o escribiéndolas como texto JSON en la consola de AWS Service Catalog administración. Para obtener más información sobre las reglas, su sintaxis y ejemplos, consulte [Reglas de restricciones de plantilla](reference-template_constraint_rules.md).

Para probar una restricción antes de distribuírsela a los usuarios, cree una cartera de prueba que contenga los mismos productos y pruebe las restricciones con ella.

**Para aplicar restricciones de plantilla a un producto**

1. Abra la consola de Service Catalog en [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. En la página **Carteras**, elija la cartera que contiene el producto al que desee aplicar una restricción de plantilla. 

1. Expanda **Restricciones** y elija **Añadir restricciones**.

1. En la ventana **Seleccionar el producto y el tipo**, para **Producto** elija el producto para el que desea definir las restricciones de plantilla. A continuación, en **Tipo de restricción**, elija **Plantilla**. Elija **Continuar**.

1. En la página **Template constraint builder** edite las reglas de restricción mediante el editor de JSON o la interfaz del creador de reglas.
   + Para editar el código JSON de la regla, elija la pestaña **Editor de texto de restricción**. En esta pestaña se proporcionan varios ejemplos para ayudarle a comenzar.

     Para crear las reglas mediante una interfaz de creador de reglas, elija la pestaña **Creador de reglas**. En ella, puede elegir cualquier parámetro que se especifica en la plantilla del producto e indicar los valores admisibles para ese parámetro. En función del tipo de parámetro, debe indicar los valores admisibles eligiendo los elementos en una lista de comprobación, especificando un número o especificando un conjunto de valores separados por comas en una lista.

     Cuando haya terminado de crear la regla, elija **Añadir regla**. La regla aparecerá en la tabla en la pestaña **Creador de reglas** Para revisar y editar el resultado JSON, elija la pestaña **Editor de texto de restricción**.

1. Cuando haya terminado de editar las reglas de la restricción, elija **Enviar**. Para ver la restricción, vaya a la página de detalles de la cartera y amplíe **Restricciones**.

# Reglas de restricciones de plantilla
<a name="reference-template_constraint_rules"></a>

Las reglas que definen las restricciones de plantilla en una AWS Service Catalog cartera describen cuándo los usuarios finales pueden utilizar la plantilla y qué valores pueden especificar para los parámetros que se declaran en la CloudFormation plantilla utilizada para crear el producto que están intentando utilizar. Las reglas son útiles para impedir que los usuarios finales especifiquen accidentalmente un valor incorrecto. Por ejemplo, puede añadir una regla para comprobar si los usuarios finales especificaron una subred válida en una VPC determinada o `m1.small` usaron tipos de instancia para entornos de prueba. CloudFormation usa reglas para validar los valores de los parámetros antes de crear los recursos para el producto.

Cada regla consta de dos propiedades: una condición de regla (opcional) y declaraciones (obligatorias). La condición de regla determina cuándo surte efecto una regla. Las declaraciones describen qué valores pueden especificar los usuarios para un parámetro determinado. Si no se define la condición de regla, las declaraciones de la regla surten efecto en todos los casos. Para definir una condición de regla y las declaraciones, se utilizan *funciones intrínsecas específicas de reglas*, que son funciones que solo se pueden utilizar en la sección `Rules` de una plantilla. Puede anidar funciones, pero el resultado final de una condición de regla o una declaración debe ser verdadero o falso.

Por ejemplo, supongamos que ha declarado una VPC y un parámetro de subred en la sección `Parameters`. Puede crear una regla que valide que una subred determinada está en una VPC. Por lo tanto, cuando un usuario especifica una VPC, CloudFormation evalúa la afirmación para comprobar si el valor del parámetro de subred está en esa VPC antes de crear o actualizar la pila. Si el valor del parámetro no es válido, no podrá crear ni actualizar la pila CloudFormation inmediatamente. Si los usuarios no especifican una VPC, CloudFormation no comprueba el valor del parámetro de subred.

## Sintaxis
<a name="template-constraint-rules-syntax"></a>

La sección `Rules` de una plantilla consta del nombre de clave `Rules`, seguido de un único signo de dos puntos. Todas las declaraciones de regla van entre llaves. Si se declaran varias reglas, deben delimitarse mediante comas. Para cada regla, se declara un nombre lógico entre comillas seguido de un signo de dos puntos y de las llaves que contienen la condición de regla y las declaraciones.

Una regla puede incluir una propiedad `RuleCondition` y necesariamente debe incluir una propiedad `Assertions`. Para cada regla, se puede definir una sola condición de regla. En la propiedad `Assertions` se pueden definir una o varias declaraciones. Puede definir una condición de regla y declaraciones mediante funciones intrínsecas específicas de reglas, como se muestra en la siguiente pseudoplantilla:

```
"Rules":{
   "Rule01":{
      "RuleCondition":{
         "Rule-specific intrinsic function"
      },
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         },
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   },
   "Rule02":{
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   }
}
```

La pseudoplantilla muestra una sección de `Rules` que contiene dos reglas con el nombre `Rule01` y `Rule02`. `Rule01` incluye una condición de regla y dos declaraciones. Si la función de la condición de regla se evalúa en true (verdadero), se evalúan y aplican ambas funciones en cada declaración. Si la condición de regla es falsa, la regla no surte efecto. `Rule02` siempre surte efecto porque no tiene una condición de regla, lo que significa que la afirmación siempre se evalúa y aplica.

Para obtener información sobre las funciones intrínsecas específicas de las reglas para definir las condiciones y afirmaciones de las reglas, consulte [Funciones de regla de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html) en la *Guía del usuario de AWS CloudFormation *.

## Ejemplo: comprobación condicional del valor de un parámetro
<a name="template-constraint-rules-example"></a>

Las dos reglas siguientes comprueban el valor del parámetro `InstanceType`. En función del valor del parámetro Environment (`test` o `prod`), el usuario debe especificar `m1.small` o `m1.large` para el parámetro `InstanceType`. Los parámetros `InstanceType` y `Environment` deben declararse en la sección `Parameters` de la misma plantilla.

```
"Rules" : {
  "testInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "test"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.small"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the test environment, the instance type must be m1.small"
      }
    ]
  },
  "prodInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "prod"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.large"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the prod environment, the instance type must be m1.large"
      }
    ]
  }
}
```