Parámetros - AWS Cloud Development Kit (AWS CDK) v2

Esta es la guía para AWS CDK desarrolladores de la versión 2. La versión anterior del CDK v1 entró en mantenimiento el 1 de junio de 2022 y dejó de ofrecer soporte 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.

Parámetros

Los parámetros son valores personalizados que se proporcionan en el momento de la implementación. Los parámetros son una característica de AWS CloudFormation. Dado que AWS Cloud Development Kit (AWS CDK) sintetiza AWS CloudFormation plantillas, también ofrece soporte para los parámetros del tiempo de implementación.

Acerca de los parámetros

Con el AWS CDK, puede definir parámetros, que luego se pueden usar en las propiedades de los componentes fijos que cree. También puede implementar pilas que contengan parámetros.

Al implementar la AWS CloudFormation plantilla mediante el AWS CDK kit de herramientas, debe proporcionar los valores de los parámetros en la línea de comandos. Si despliega la plantilla a través de la AWS CloudFormation consola, se le solicitarán los valores de los parámetros.

En general, no se recomienda utilizar AWS CloudFormation parámetros con AWS CDK. Las formas habituales de pasar valores a AWS CDK las aplicaciones son los valores de contexto y las variables de entorno. Como no están disponibles en el momento de la síntesis, los valores de los parámetros no se pueden usar fácilmente para controlar el flujo y otros fines en su aplicación de CDK.

nota

Para controlar el flujo con parámetros, puedes usar CfnConditionconstrucciones, aunque esto resulta incómodo en comparación con las sentencias nativasif.

El uso de parámetros requiere que tengas en cuenta cómo se comporta el código que estás escribiendo en el momento de la implementación y también en el momento de la síntesis. Esto hace que sea más difícil entender y razonar acerca de la AWS CDK aplicación y, en muchos casos, ofrece pocos beneficios.

Por lo general, es mejor hacer que la aplicación de CDK acepte la información necesaria de forma bien definida y que la utilice directamente para declarar las construcciones en la aplicación de CDK. Una AWS CloudFormation plantilla ideal AWS CDK generada es concreta, sin que queden valores por especificar en el momento de la implementación.

Sin embargo, hay casos de uso para los que AWS CloudFormation los parámetros son especialmente adecuados. Si tiene equipos independientes que definen e implementan la infraestructura, por ejemplo, puede usar los parámetros para que las plantillas generadas sean más útiles. Además, dado que AWS CloudFormation los parámetros de AWS CDK soporte, se pueden utilizar AWS CDK con AWS servicios que utilizan AWS CloudFormation plantillas (como Service Catalog). Estos AWS servicios utilizan parámetros para configurar la plantilla que se va a implementar.

Definir parámetros

Utilice la CfnParameterclase 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 AWS CloudFormation consola. Para obtener más información sobre los tipos disponibles, consulte Tipos.

nota

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

TypeScript
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
JavaScript
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
Python
upload_bucket_name = CfnParameter(self, "uploadBucketName", type="String", description="The name of the Amazon S3 bucket where uploaded files will be stored.")
Java
CfnParameter uploadBucketName = CfnParameter.Builder.create(this, "uploadBucketName") .type("String") .description("The name of the Amazon S3 bucket where uploaded files will be stored") .build();
C#
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

Una CfnParameter instancia expone su valor a tu AWS CDK aplicación mediante un token. Como todos los tokens, 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 AWS CloudFormation plantilla (que se resolverá en el momento de la implementación), más que en un valor concreto.

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

TypeScript
Propiedad tipo de valor
value Tokeninstancia de clase
valueAsList El token representado como una lista de cadenas
valueAsNumber El token se representa como un número
valueAsString El token se representa como una cadena
JavaScript
Propiedad tipo de valor
value Tokeninstancia de clase
valueAsList El token representado como una lista de cadenas
valueAsNumber El token se representa como un número
valueAsString El token se representa como una cadena
Python
Propiedad tipo de valor
value Tokeninstancia de clase
value_as_list El token representado 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
Java
Propiedad tipo de valor
getValue() Tokeninstancia de clase
getValueAsList() El token representado como una lista de cadenas
getValueAsNumber() El token se representa como un número
getValueAsString() El token se representa como una cadena
C#
Propiedad tipo de valor
Value Tokeninstancia de clase
ValueAsList El token representado 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 Bucket definición:

TypeScript
const bucket = new Bucket(this, "myBucket", { bucketName: uploadBucketName.valueAsString});
JavaScript
const bucket = new Bucket(this, "myBucket", { bucketName: uploadBucketName.valueAsString});
Python
bucket = Bucket(self, "myBucket", bucket_name=upload_bucket_name.value_as_string)
Java
Bucket bucket = Bucket.Builder.create(this, "myBucket") .bucketName(uploadBucketName.getValueAsString()) .build();
C#
var bucket = new Bucket(this, "myBucket") { BucketName = uploadBucketName.ValueAsString };

Despliegue con parámetros

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

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

Proporcionar valores de parámetros con cdk deploy

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

A continuación se muestra un ejemplo de la estructura de cdk deploy comandos:

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

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

$ cdk deploy --parameters uploadBucketName=uploadbucket

Proporcionar valores de parámetros con cdk deploy para aplicaciones de varias pilas

El siguiente es un ejemplo de una aplicación de CDK 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: 'myfirststackdefaultbucketname' }); // 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: 'mysecondstackdefaultbucketname' }); // 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 contienen varias pilas, puedes hacer lo siguiente:

  • Implemente una pila con parámetros: para implementar una sola pila desde una aplicación de varias pilas, proporcione el ID lógico de la pila como argumento.

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

    $ cdk deploy MySecondStack --parameters bucketNameParam='mynewbucketname'
  • Despliegue todas las pilas y especifique los valores de los parámetros para cada pila: proporcione el '*' comodín o la --all opción de desplegar todas las pilas. Proporcione la --parameters opción 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'
  • Despliegue todas las pilas y especifique los valores de los parámetros para una sola pila: proporcione el '*' comodín o la --all opción de desplegar 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 despliegan todas las pilas en una aplicación de CDK y se especifica un valor de parámetro para la pila. MySecondDeployedStack AWS CloudFormation Todas las demás pilas se 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 cdk deploy para aplicaciones con pilas anidadas

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

A continuación se muestra un ejemplo en el que se despliegan pilas anidadas y se especifica el valor del parámetro para una pila anidada:

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

Para obtener más información sobre las opciones de cdk deploy comando, consulte. cdk deploy