

Esta es la guía para desarrolladores de AWS CDK v2. La primera versión del CDK pasó a la etapa de mantenimiento el 1.° de junio de 2022 y no cuenta con soporte desde el 1.° de junio de 2023.

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.

# Utilice los parámetros de CloudFormation para obtener un valor de CloudFormation
<a name="get-cfn-param"></a>

Utilice los parámetros de AWS CloudFormation dentro de las aplicaciones de AWS Cloud Development Kit (AWS CDK) para ingresar valores personalizados en sus plantillas de CloudFormation sintetizadas durante la implementación.

Para obtener una introducción, consulte [Parámetros y el AWS CDK.](parameters.md)

## Defina los parámetros en su aplicación de CDK
<a name="parameters-define"></a>

Utilice la clase [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnParameter.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnParameter.html) para definir un parámetro. Deberá especificar al menos un tipo y una descripción para la mayoría de los parámetros, aunque ambos son técnicamente opcionales. La descripción aparece cuando se le pide al usuario que introduzca el valor del parámetro en la consola de AWS CloudFormation. Para obtener más información sobre los tipos disponibles, consulte [Tipos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#parameters-section-structure-properties-type).

**nota**  
Puede definir los parámetros en cualquier ámbito. Sin embargo, recomendamos definir parámetros en el nivel de pila para que su ID lógico no cambie cuando refactorice su código.

**Example**  

```
const uploadBucketName = new CfnParameter(this, "uploadBucketName", {
  type: "String",
  description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
```

```
const uploadBucketName = new CfnParameter(this, "uploadBucketName", {
  type: "String",
  description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
```

```
upload_bucket_name = CfnParameter(self, "uploadBucketName", type="String",
    description="The name of the Amazon S3 bucket where uploaded files will be stored.")
```

```
CfnParameter uploadBucketName = CfnParameter.Builder.create(this, "uploadBucketName")
        .type("String")
        .description("The name of the Amazon S3 bucket where uploaded files will be stored")
        .build();
```

```
var uploadBucketName = new CfnParameter(this, "uploadBucketName", new CfnParameterProps
{
    Type = "String",
    Description = "The name of the Amazon S3 bucket where uploaded files will be stored"
});
```

## Uso de parámetros
<a name="parameters-use"></a>

Una instancia de `CfnParameter` expone su valor a su aplicación CDK mediante un [token](tokens.md). Como todos los tókenes, el token del parámetro se resuelve en el momento de la síntesis. Sin embargo, se basa en una referencia al parámetro definido en la plantilla de AWS CloudFormation (que se resolverá en el momento de la implementación), en lugar de en un valor concreto.

Puede recuperar el token como una instancia de la clase de `Token` o en una cadena, lista de cadenas o codificación numérica. La elección depende del tipo de valor requerido en la clase o el método con el que desee utilizar el parámetro.

**Example**  


| Propiedad | tipo de valor | 
| --- | --- | 
|   `value`   |   Instancia de clase `Token`  | 
|   `valueAsList`   |  El token se representa como una lista de cadenas  | 
|   `valueAsNumber`   |  El token se representa como un número  | 
|   `valueAsString`   |  El token se representa como una cadena  | 


| Propiedad | tipo de valor | 
| --- | --- | 
|   `value`   |   Instancia de clase `Token`  | 
|   `valueAsList`   |  El token se representa como una lista de cadenas  | 
|   `valueAsNumber`   |  El token se representa como un número  | 
|   `valueAsString`   |  El token se representa como una cadena  | 


| Propiedad | tipo de valor | 
| --- | --- | 
|   `value`   |   Instancia de clase `Token`  | 
|   `value_as_list`   |  El token se representa como una lista de cadenas  | 
|   `value_as_number`   |  El token se representa como un número  | 
|   `value_as_string`   |  El token se representa como una cadena  | 


| Propiedad | tipo de valor | 
| --- | --- | 
|   `getValue()`   |   Instancia de clase `Token`  | 
|   `getValueAsList()`   |  El token se representa como una lista de cadenas  | 
|   `getValueAsNumber()`   |  El token se representa como un número  | 
|   `getValueAsString()`   |  El token se representa como una cadena  | 


| Propiedad | tipo de valor | 
| --- | --- | 
|   `Value`   |   Instancia de clase `Token`  | 
|   `ValueAsList`   |  El token se representa como una lista de cadenas  | 
|   `ValueAsNumber`   |  El token se representa como un número  | 
|   `ValueAsString`   |  El token se representa como una cadena  | 

Por ejemplo, para usar un parámetro en una definición de `Bucket`:

**Example**  

```
const bucket = new Bucket(this, "amzn-s3-demo-bucket",
  { bucketName: uploadBucketName.valueAsString});
```

```
const bucket = new Bucket(this, "amzn-s3-demo-bucket",
  { bucketName: uploadBucketName.valueAsString});
```

```
bucket = Bucket(self, "amzn-s3-demo-bucket",
    bucket_name=upload_bucket_name.value_as_string)
```

```
Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket")
        .bucketName(uploadBucketName.getValueAsString())
        .build();
```

```
var bucket = new Bucket(this, "amzn-s3-demo-bucket")
{
    BucketName = uploadBucketName.ValueAsString
};
```

## Implementar aplicaciones de CDK que contengan parámetros
<a name="parameters-deploy"></a>

Al implementar una plantilla de AWS CloudFormation generada a través de la consola de AWS CloudFormation, se le solicitará que proporcione los valores de cada parámetro.

También puede proporcionar los valores de los parámetros mediante el comando `cdk deploy` de la CLI de CDK o especificando los valores de los parámetros en el archivo de pila del proyecto de CDK.

### Proporcionar los valores de los parámetros con cdk deploy
<a name="parameters-deploy-cli"></a>

Al realizar la implementación mediante el comando `cdk deploy` de la CLI de CDK, puede proporcionar valores de parámetros en la implementación con la opción `--parameters`.

A continuación, se muestra un ejemplo de la estructura de comando `cdk deploy`:

```
$ cdk deploy <stack-logical-id> --parameters <stack-name>:<parameter-name>=<parameter-value>
```

Si su aplicación de CDK contiene una sola pila, no es necesario que proporcione el argumento del ID lógico de la pila ni el valor `stack-name` en la opción `--parameters`. La CLI de CDK buscará y proporcionará estos valores de forma automática. El siguiente es un ejemplo que especifica un valor `uploadbucket` para el parámetro de `uploadBucketName` de la pila única de nuestra aplicación de CDK:

```
$ cdk deploy --parameters <uploadBucketName>=<uploadbucket>
```

### Proporcionar valores de parámetros con cdk deploy para aplicaciones de múltiples pilas
<a name="parameters-deploy-cli-multi-stack"></a>

El siguiente es un ejemplo de aplicación de CDK en TypeScript que contiene dos pilas de CDK. Cada pila contiene una instancia de bucket de Amazon S3 y un parámetro para establecer el nombre del bucket de Amazon S3:

```
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';

// Define the CDK app
const app = new cdk.App();

// First stack
export class MyFirstStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Set a default parameter name
    const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', {
      type: 'String',
      default: 'amzn-s3-demo-bucket1'
    });

    // Define an S3 bucket
    new s3.Bucket(this, 'MyFirstBucket', {
      bucketName: bucketNameParam.valueAsString
    });
  }
}

// Second stack
export class MySecondStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Set a default parameter name
    const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', {
      type: 'String',
      default: 'amzn-s3-demo-bucket2'
    });

    // Define an S3 bucket
    new s3.Bucket(this, 'MySecondBucket', {
      bucketName: bucketNameParam.valueAsString
    });
  }
}

// Instantiate the stacks
new MyFirstStack(app, 'MyFirstStack', {
  stackName: 'MyFirstDeployedStack',
});

new MySecondStack(app, 'MySecondStack', {
  stackName: 'MySecondDeployedStack',
});
```

En el caso de las aplicaciones de CDK que tienen varias pilas, puede hacer lo siguiente:
+  **Implementar una pila con parámetros**: para implementar una sola pila desde una aplicación de múltiples pilas, proporcione el ID lógico de la pila como argumento.

  A continuación, se muestra un ejemplo que implementa `MySecondStack` con `mynewbucketname` como valor de parámetro para `bucketNameParam`:

  ```
  $ cdk deploy <MySecondStack> --parameters <bucketNameParam>='<mynewbucketname>'
  ```
+  **Implementar todas las pilas y especificar los valores de los parámetros para cada pila**: proporcione el comodín `'*'` o la opción `--all` para implementar todas las pilas. Proporcione la opción `--parameters` varias veces en un solo comando para especificar los valores de los parámetros de cada pila. A continuación, se muestra un ejemplo:

  ```
  $ cdk deploy <'*'> --parameters <MyFirstDeployedStack>:<bucketNameParam>='<mynewfirststackbucketname>' --parameters <MySecondDeployedStack>:<bucketNameParam>='<mynewsecondstackbucketname>'
  ```
+  **Implementar todas las pilas y especificar los valores de los parámetros para una sola pila**: proporcione el comodín `'*'` o la opción `--all` para implementar todas las pilas. A continuación, especifique la pila para la que desea definir el parámetro en la opción `--parameters`. A continuación, se muestran ejemplos en los que se implementan todas las pilas en una aplicación de CDK y se especifica un valor de parámetro para la pila `MySecondDeployedStack` de AWS CloudFormation. Todas las demás pilas implementarán y utilizarán el valor de parámetro predeterminado:

  ```
  $ cdk deploy <'*'> --parameters <MySecondDeployedStack>:<bucketNameParam>='<mynewbucketname>'
  $ cdk deploy <--all> --parameters <MySecondDeployedStack>:<bucketNameParam>='<mynewbucketname>'
  ```

### Proporcionar valores de parámetros con `cdk deploy` para aplicaciones con pilas anidadas
<a name="parameters-deploy-cli-nested-stack"></a>

El comportamiento de la CLI de CDK al trabajar con aplicaciones que contienen pilas anidadas es similar al de las aplicaciones con múltiples pilas. La principal diferencia es que, si quiere implementar todas las pilas anidadas, se utiliza el comodín `'**'`. El comodín `'*'` implementa todas las pilas, pero no las anidadas. El comodín `'**'` implementa todas las pilas, incluidas las anidadas.

El siguiente es un ejemplo que implementa pilas anidadas, a la vez que especifica el valor del parámetro para una pila anidada:

```
$ cdk deploy '**' --parameters <MultiStackCdkApp/SecondStack>:<bucketNameParam>='<mysecondstackbucketname>'
```

Para obtener más información sobre opciones del comando `cdk deploy`, consulte [Implementar CDK](ref-cli-cmd-deploy.md).