

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.

# Uso de variables en su documento de componentes personalizados
<a name="toe-user-defined-variables"></a>

Las variables proporcionan una forma de etiquetar los datos con nombres significativos que se pueden usar en toda la aplicación. Puedes definir variables personalizadas con formatos sencillos y legibles para flujos de trabajo complejos y hacer referencia a ellas en el documento del componente de la aplicación YAML de un TOE de AWS componente.

En esta sección, se proporciona información que te ayudará a definir las variables de tu TOE de AWS componente en el documento de componentes de la aplicación YAML, incluida la sintaxis, las restricciones de nombres y algunos ejemplos.

## Constantes
<a name="user-defined-vars-constants"></a>

Las constantes son variables inmutables que no se pueden modificar ni anular una vez definidas. Las constantes se pueden definir mediante los valores de la `constants` sección de un TOE de AWS documento.

**Reglas de nomenclatura de constantes**
+ El nombre debe tener entre 3 y 128 caracteres de extensión.
+ El nombre solo puede contener caracteres alfanuméricos (a-z, A-Z y 0-9), guiones (-) o guiones bajos (\$1).
+ El nombre debe ser único dentro del documento.
+ El nombre debe estar especificado como una cadena YAML.

**Sintaxis**

```
constants:
  - <name>:
      type: <constant type>
      value: <constant value>
```


| Nombre de la clave | Obligatorio | Descripción | 
| --- | --- | --- | 
|  `name`  |  Sí  | Nombre de la constante. Debe ser único para el documento (no debe coincidir con ningún otro nombre de parámetro o constante). | 
| `value` | Sí | Valor de la constante. | 
| `type` | Sí | Tipo de la constante. El tipo admitido es string. | 

**Valores constantes de referencia en un documento**  
Puede hacer referencia a las constantes en entradas escalonadas o en bucle dentro de su documento YAML, de la siguiente manera:
+ Las referencias constantes distinguen mayúsculas y minúsculas y el nombre debe coincidir exactamente.
+ El nombre debe estar entre corchetes dobles. `{{` *MyConstant* `}}`
+ Se permiten espacios dentro de las llaves y se recortan automáticamente. Por ejemplo, todas las referencias siguientes son válidas:

  `{{ MyConstant }}`, `{{ MyConstant}}`, `{{MyConstant }}`, `{{MyConstant}}`
+ La referencia del documento YAML debe especificarse como una cadena (entre comillas simples o dobles).

  Por ejemplo: `- {{ MyConstant }}` no es válido, ya que no se identifica como una cadena.

  Sin embargo, las siguientes referencias son válidas: `- '{{ MyConstant }}'` y `- "{{ MyConstant }}"`.

**Ejemplos**  
Constante referenciada en las entradas escalonadas

```
name: Download AWS CLI version 2
schemaVersion: 1.0
constants:
  - Source:
      type: string
      value: https://awscli.amazonaws.com/AWSCLIV2.msi
phases:
  - name: build
    steps:
      - name: Download
        action: WebDownload
        inputs:
          - source: '{{ Source }}'
            destination: 'C:\Windows\Temp\AWSCLIV2.msi'
```

Constante referenciada en las entradas de bucle

```
name: PingHosts
schemaVersion: 1.0
constants:
  - Hosts:
      type: string
      value: 127.0.0.1,amazon.com
phases:
  - name: build
    steps:
      - name: Ping
        action: ExecuteBash
        loop:
          forEach:
            list: '{{ Hosts }}'
            delimiter: ','
        inputs:
          commands:
            - ping -c 4 {{ loop.value }}
```

## Parameters
<a name="user-defined-vars-parameters"></a>

Los parámetros son variables mutables, con ajustes que la aplicación que realiza la llamada puede proporcionar en el tiempo de ejecución. Puede definir los parámetros en la sección `Parameters` del documento YAML.

**Reglas para nombres de parámetros**
+ El nombre debe tener entre 3 y 128 caracteres de extensión.
+ El nombre solo puede contener caracteres alfanuméricos (a-z, A-Z y 0-9), guiones (-) o guiones bajos (\$1).
+ El nombre debe ser único dentro del documento.
+ El nombre debe estar especificado como una cadena YAML.

### Sintaxis
<a name="vars-parameters-syntax"></a>

```
parameters:
  - <name>:
      type: <parameter type>
      default: <parameter value>
      description: <parameter description>
```


| Nombre de la clave | Obligatorio | Descripción | 
| --- | --- | --- | 
| `name` | Sí | El nombre del parámetro. Debe ser único para el documento (no debe coincidir con ningún otro nombre de parámetro o constante). | 
| `type` | Sí | El tipo de datos del parámetro. Los tipos admitidos incluyen: `string`. | 
| `default` | No | El valor predeterminado para el parámetro. | 
| `description` | No | Describe el parámetro. | 

### Valores de parámetros de referencia en un documento
<a name="vars-parameters-referencing"></a>

Puede hacer referencia a los parámetros en entradas escalonadas o en bucle dentro de su documento YAML, de la siguiente manera:
+ Las referencias de parámetros distinguen mayúsculas y minúsculas y el nombre debe coincidir exactamente.
+ El nombre debe estar entre `{{` *MyParameter* `}}` corchetes dobles.
+ Se permiten espacios dentro de las llaves y se recortan automáticamente. Por ejemplo, todas las referencias siguientes son válidas:

  `{{ MyParameter }}`, `{{ MyParameter}}`, `{{MyParameter }}`, `{{MyParameter}}`
+ La referencia del documento YAML debe especificarse como una cadena (entre comillas simples o dobles).

  Por ejemplo: `- {{ MyParameter }}` no es válido, ya que no se identifica como una cadena.

  Sin embargo, las siguientes referencias son válidas: `- '{{ MyParameter }}'` y `- "{{ MyParameter }}"`.

**Ejemplos**  
En los siguientes ejemplos, se muestra cómo utilizar los parámetros del documento YAML:
+ Consulte un parámetro en las entradas escalonadas:

  ```
  name: Download AWS CLI version 2
  schemaVersion: 1.0
  parameters:
    - Source:
        type: string
        default: 'https://awscli.amazonaws.com/AWSCLIV2.msi'
        description: The AWS CLI installer source URL.
  phases:
    - name: build
      steps:
        - name: Download
          action: WebDownload
          inputs:
            - source: '{{ Source }}'
              destination: 'C:\Windows\Temp\AWSCLIV2.msi'
  ```
+ Consulte un parámetro en las entradas de bucle:

  ```
  name: PingHosts
  schemaVersion: 1.0
  parameters:
    - Hosts:
        type: string
        default: 127.0.0.1,amazon.com
        description: A comma separated list of hosts to ping.
  phases:
    - name: build
      steps:
        - name: Ping
          action: ExecuteBash
          loop:
            forEach:
              list: '{{ Hosts }}'
              delimiter: ','
          inputs:
            commands:
              - ping -c 4 {{ loop.value }}
  ```

### Anulación de los parámetros en tiempo de ejecución
<a name="vars-parameters-set-at-runtime"></a>

Puede utilizar la `--parameters` opción AWS CLI con un par clave-valor para establecer el valor de un parámetro en tiempo de ejecución.
+ Especifique el par clave-valor del parámetro como nombre y valor, separados por un signo igual (<name>=<value>).
+ Varios parámetros deben estar separados por una coma.
+ Se ignoran los nombres de los parámetros que no se encuentran en el documento de componentes de YAML.
+ Tanto el nombre como el valor del parámetro son obligatorios.

**importante**  
Los parámetros del componente son valores de texto sin formato y se registran en AWS CloudTrail. Le recomendamos que utilice AWS Secrets Manager nuestro almacén de AWS Systems Manager parámetros para almacenar sus secretos. Para obtener más información sobre Secrets Manager, consulte [¿Qué es Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) en la *Guía del usuario de AWS Secrets Manager *. Para obtener más información acerca del almacén de parámetros de AWS Systems Manager , consulte [Almacén de parámetros de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) en la *Guía del usuario de AWS Systems Manager *.

#### Sintaxis
<a name="vars-runtime-parameters-syntax"></a>

```
--parameters name1=value1,name2=value2...
```


| Opción de la CLI | Obligatorio | Description (Descripción) | 
| --- | --- | --- | 
| --parámetros *name* =*value*,... | No | Esta opción toma una lista de pares clave-valor, con el nombre del parámetro como clave. | 

**Ejemplos**  
En los siguientes ejemplos, se muestra cómo utilizar los parámetros del documento YAML:
+ El par clave-valor del parámetro especificado en esta opción `--parameter` no es válido:

  ```
  --parameters ntp-server=
  ```
+ Establezca un par clave-valor de un parámetro con la opción `--parameter` en el AWS CLI:

  ```
  --parameters ntp-server=ntp-server-windows-qe.us-east1.amazon.com
  ```
+ Establezca varios pares clave-valor de parámetros con la opción `--parameter` en el AWS CLI:

  ```
  --parameters ntp-server=ntp-server.amazon.com,http-url=https://internal-us-east1.amazon.com
  ```

## Utilice los parámetros del almacén de parámetros de Systems Manager
<a name="toe-ssm-parameters"></a>

Puede hacer referencia a los AWS Systems Manager parámetros del almacén de parámetros (parámetros SSM) en los documentos de sus componentes añadiendo el prefijo a las variables. `aws:ssm` Por ejemplo: 

`{{ aws:ssm:/my/param }}`se resuelve en el valor del parámetro SSM. `/my/param`

Esta función admite los siguientes tipos de parámetros de SSM:
+ Cadena: se asigna al tipo de TOE de AWS cadena.
+ StringList — Se asigna al TOE de AWS `stringList` tipo.
+ SecureString — Se asigna al tipo de TOE de AWS cadena.

Para obtener más información sobre el almacén de parámetros, consulte el [almacén de AWS Systems Manager parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) en la *Guía del AWS Systems Manager usuario*.

También puede hacer referencia a AWS Secrets Manager los secretos mediante un parámetro `SecureString` SSM. Por ejemplo: `{{ aws:ssm:/aws/reference/secretsmanager/test/test-secret }}`. Para obtener más información, consulte Hacer [referencia a AWS Secrets Manager los secretos de los parámetros del almacén de parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/integration-ps-secretsmanager.html).

**importante**  
Image Builder excluye la resolución de `SecureString` parámetros de sus registros. Sin embargo, también es responsable de garantizar que la información confidencial no se registre mediante los comandos incluidos en el documento del componente. Por ejemplo, si utiliza el `echo` comando con una cadena segura, el comando escribirá un valor de texto simple en el registro.

### Permisos de IAM necesarios
<a name="toe-ssm-parameters-permissions"></a>

Para usar los parámetros de Systems Manager en sus componentes, su rol de instancia debe tener el `ssm:GetParameter` permiso para el ARN del recurso de parámetros. Por ejemplo:

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ssm:GetParameter",
			"Resource": "arn:aws:ssm:*:111122223333:parameter/ImageBuilder-*"
		}
	]
}
```

------

Para acceder a los valores cifrados, también necesitarás los siguientes permisos:
+ Agregue `kms:Decrypt` `SecureString` parámetros o AWS Secrets Manager valores cifrados con un administrador por el cliente AWS KMS key.
+ `secretsmanager:GetSecretValue`Añádelo si haces referencia a un secreto de Secrets Manager.

### Haga referencia a un parámetro SSM en un documento de componentes
<a name="toe-ssm-parameters-example"></a>

El siguiente ejemplo muestra cómo hacer referencia a un parámetro del almacén de parámetros de Systems Manager de los parámetros de Systems Manager de un componente:

```
name: UseSSMParameterVariable
description: This is a sample component document that prints out the value of an SSM Parameter. Never do this for a SecureString parameter.
schemaVersion: 1.0

phases:
  - name: verify
    steps:
      - name: EchoParameterValue
        action: ExecuteBash
        inputs:
          commands:
            - echo "Log SSM parameter name: /my/test/param, value {{ aws:ssm:/my/test/param }}."
```

### Resolución dinámica de variables de tiempo de ejecución para los parámetros de SSM
<a name="toe-dynamic-vars"></a>

AWSTOE proporciona la siguiente función integrada que puede utilizar en las referencias de variables para manipular o transformar valores en tiempo de ejecución.

#### función de resolución
<a name="toe-function-resolve"></a>

La `resolve` función resuelve una referencia de variable dentro de otra referencia de variable, lo que permite hacer referencias dinámicas a nombres de variables. Esto resulta útil cuando se trabaja con parámetros de SSM, en los que parte de la ruta del parámetro puede ser variable y transferirse como parámetro del documento.

La `resolve` función solo admite la resolución dinámica de la parte del nombre de un parámetro de SSM.

##### Sintaxis
<a name="toe-function-resolve-syntax"></a>

El `dynamic_variable` ejemplo siguiente representa el nombre de un parámetro SSM y debe ser uno de los siguientes:
+ Una referencia de parámetro SSM (por ejemplo,) `aws:ssm:/my/param`
+ Una referencia de parámetros de un documento de componentes (por ejemplo,`parameter-name`)

```
{{ aws:ssm:resolve(dynamic_variable) }}
```

##### Ejemplo: resolver un parámetro SSM en tiempo de ejecución
<a name="toe-function-resolve-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar la `resolve` función en un documento de componentes de YAML:

```
name: SsmParameterTest
description: This component verifies an SSM parameter variable reference with the echo command.
schemaVersion: 1.0

parameters:
  - parameter-name:
      type: string
      description: "test"

phases:
  - name: validate
    steps:
      - name: PrintDynamicVariable
        action: ExecuteBash
        inputs:
          commands:
            - echo "{{ aws:ssm:resolve(parameter-name) }}"
```