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.
Valores de contexto y el AWS CDK.
Los valores de contexto son pares clave-valor que pueden asociarse a una aplicación, pila o constructo. Se pueden proporcionar a la aplicación desde un archivo (generalmente, cdk.json o cdk.context.json en el directorio del proyecto) o en la línea de comandos.
El kit de herramientas de CDK utiliza el contexto para almacenar en la memoria caché los valores recuperados de su cuenta de AWS durante la síntesis. Los valores incluyen las zonas de disponibilidad de su cuenta o los ID de imagen de máquina de Amazon (AMI) disponibles actualmente para las instancias de Amazon EC2. Dado que estos valores provienen de su cuenta de AWS, pueden cambiar de una ejecución a otra de la aplicación de CDK. Esto los convierte en una posible fuente de cambios no deseados. El comportamiento de almacenamiento en memoria caché del kit de herramientas de CDK “congela” estos valores para la aplicación de CDK hasta que usted decida aceptar los valores nuevos.
Imagine el siguiente escenario sin almacenamiento en memoria caché de contexto. Supongamos que especificó la “última versión de Amazon Linux” como AMI para las instancias de Amazon EC2, y se publicó una versión nueva de esta AMI. Entonces, la próxima vez que implemente su pila de CDK, las instancias ya implementadas utilizarán la AMI obsoleta (“incorrecta”) y deberán actualizarse. La actualización implicaría la sustitución de todas las instancias existentes por otras nuevas, lo que probablemente no sea lo deseado ni lo esperado.
El CDK registra las AMI disponibles de su cuenta en el archivo cdk.context.json del proyecto y utiliza el valor almacenado para futuras operaciones de síntesis. De esta manera, la lista de AMI deja de ser una posible fuente de cambios. Además, puede quedarse tranquilo sabiendo que sus pilas siempre se sintetizarán en las mismas plantillas de AWS CloudFormation.
No todos los valores de contexto son valores almacenados en la memoria caché de su entorno de AWS. AWS Las marcas de características de CDK también son valores de contexto. También puede crear sus propios valores de contexto para que sus aplicaciones o constructos los utilicen.
Las claves de contexto son cadenas. Los valores pueden ser de cualquier tipo compatible con JSON: números, cadenas, matrices u objetos.
sugerencia
Si sus constructos crean sus propios valores de contexto, incorpore el nombre del paquete de la biblioteca en las claves para que no entren en conflicto con los valores de contexto de otros paquetes.
Muchos valores de contexto están asociados a un entorno de AWS concreto, y una aplicación de CDK determinada se puede implementar en más de un entorno. La clave de dichos valores incluye la cuenta y la región de AWS para que los valores de diferentes entornos no entren en conflicto.
La siguiente clave de contexto ilustra el formato utilizado por el AWS CDK, incluidas la cuenta y la región.
availability-zones:account=123456789012:region=eu-central-1
importante
Los valores de contexto almacenados en la memoria caché son administrados por el AWS CDK y sus constructos, incluidos los constructos que pueda escribir. No agregue ni modifique los valores de contexto almacenados en la memoria caché mediante la edición manual de los archivos. Sin embargo, puede resultar útil revisar cdk.context.json de vez en cuando para ver qué valores se están almacenando en la memoria caché. Los valores de contexto que no representan valores almacenados en la memoria caché deben almacenarse con la clave context de cdk.json. De esta forma, no se borrarán cuando se borren los valores almacenados en la memoria caché.
Orígenes de los valores de contexto
Los valores de contexto se pueden transferir a su aplicación de AWS CDK de seis maneras diferentes:
-
Desde la cuenta de AWS actual de manera automática.
-
Mediante la opción
--contextal comandocdk. (Estos valores son siempre cadenas). -
En el archivo
cdk.context.jsondel proyecto. -
En la clave
contextdel archivocdk.jsondel proyecto. -
En la clave
contextde su archivo~/.cdk.json. -
En su aplicación de AWS CDK mediante el método
construct.node.setContext().
El archivo del proyecto cdk.context.json es donde AWS CDK almacena en la memoria caché los valores de contexto recuperados de su cuenta de AWS. Esta práctica evita cambios inesperados en las implementaciones cuando, por ejemplo, se introduce una zona de disponibilidad nueva. AWS CDK no escribe datos de contexto en ninguno de los demás archivos de la lista.
importante
Dado que forman parte del estado de la aplicación, cdk.json y cdk.context.json deben estar sujetos al control de código fuente junto con el resto del código fuente de la aplicación. De lo contrario, las implementaciones en otros entornos (por ejemplo, una canalización de CI) podrían producir resultados incoherentes.
Los valores de contexto se asignan al constructo que los creó; son visibles para los constructos secundarios, pero no para los principales o del mismo nivel. Los valores de contexto que establece el kit de herramientas de AWS CDK (el comando cdk) pueden configurarse de manera automática, desde un archivo o desde la opción --context. Los valores de contexto de estos orígenes se establecen de manera implícita en el constructo App. Por lo tanto, son visibles para todos los constructos de todas las pilas de la aplicación.
Su aplicación puede leer un valor de contexto mediante el método construct.node.tryGetContext. Si la entrada solicitada no se encuentra en el constructo actual ni en ninguno de los principales, el resultado será undefined. (Como alternativa, el resultado podría ser el equivalente en su lenguaje, como None en Python).
Métodos de context
AWS CDK admite varios métodos de contexto que permiten a las aplicaciones de AWS CDK obtener información de contexto del entorno de AWS. Por ejemplo, puede obtener una lista de las zonas de disponibilidad que estén disponibles en una cuenta y una región de AWS determinadas mediante el método stack.availabilityZones.
Los métodos de contexto son los siguientes:
-
HostedZone.fromLookup -
Obtiene las zonas alojadas de su cuenta.
-
stack.availabilityZones -
Obtiene las zonas de disponibilidad compatibles.
-
StringParameter.valueFromLookup -
Obtiene un valor del almacén de parámetros de Systems Manager de Amazon EC2 de la región actual.
-
Vpc.fromLookup -
Obtiene las Amazon Virtual Private Cloud existentes en sus cuentas.
-
LookupMachineImage -
Busca una imagen de máquina para utilizarla con una instancia de NAT en una Amazon Virtual Private Cloud.
Si el valor de contexto solicitado no está disponible, la aplicación de AWS CDK notifica al kit de herramientas del CDK que falta la información de contexto. Luego, la CLI consulta la cuenta de AWS actual para obtener información y almacena la información de contexto resultante en el archivo cdk.context.json. Luego, vuelve a ejecutar la aplicación de AWS CDK con los valores de contexto.
Visualización y administración del contexto
Utilice el comando cdk context para ver y administrar la información del archivo cdk.context.json. Para ver esta información, utilice el comando cdk context sin ninguna opción. El resultado debería verse de la siguiente manera.
Context found in cdk.json: ┌───┬─────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┐ │ # │ Key │ Value │ ├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ │ 1 │ availability-zones:account=123456789012:region=eu-central-1 │ [ "eu-central-1a", "eu-central-1b", "eu-central-1c" ] │ ├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ │ 2 │ availability-zones:account=123456789012:region=eu-west-1 │ [ "eu-west-1a", "eu-west-1b", "eu-west-1c" ] │ └───┴─────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┘ Run cdk context --reset KEY_OR_NUMBER to remove a context key. If it is a cached value, it will be refreshed on the next cdk synth .
Para eliminar un valor de contexto, ejecute cdk context --reset y especifique la clave o el número correspondiente al valor. En el siguiente ejemplo, se elimina el valor que corresponde a la segunda clave del ejemplo anterior. Este valor representa la lista de zonas de disponibilidad de la región de Europa (Irlanda).
cdk context --reset 2
Context value availability-zones:account=123456789012:region=eu-west-1 reset. It will be refreshed on the next SDK synthesis run.
Por lo tanto, si desea actualizar a la última versión de la AMI de Amazon Linux, utilice el ejemplo anterior para realizar una actualización controlada del valor de contexto y restablecerlo. Luego, sintetice y vuelva a implementar la aplicación.
$ cdk synth
Para borrar todos los valores de contexto almacenados de su aplicación, ejecute cdk context --clear, como se muestra a continuación.
$ cdk context --clear
Solo se pueden restablecer o borrar los valores de contexto almacenados en cdk.context.json. AWS CDK no afecta a otros valores de contexto. Por lo tanto, para evitar que un valor de contexto se restablezca mediante estos comandos, puede copiar el valor en cdk.json.
Marca AWS del kit de herramientas de --context CDK
Utilice la opción --context (-c abreviada) para pasar los valores de contexto de tiempo de ejecución a su aplicación de CDK durante la síntesis o la implementación.
$ cdk synth --context key=value MyStack
Para especificar varios valores de contexto, repita la opción --context tantas veces como desee y proporcione un par clave-valor cada vez que repita la acción.
$ cdk synth --context key1=value1 --context key2=value2 MyStack
Cuando se sintetizan varias pilas, los valores de contexto especificados se transfieren a todas las pilas. Para proporcionar diferentes valores de contexto a pilas individuales, utilice diferentes claves para los valores o utilice varios comandos cdk synth o cdk deploy.
Los valores de contexto que se pasan desde la línea de comandos son siempre cadenas. Si un valor suele ser de otro tipo, el código debe estar preparado para convertir o analizar el valor. Es posible que los valores de contexto que no sean cadenas se proporcionen de otras formas (por ejemplo, en cdk.context.json). Para asegurarse de que este tipo de valor funciona según lo esperado, confirme que el valor es una cadena antes de convertirlo.
Ejemplo
A continuación, se muestra un ejemplo del uso de una Amazon VPC existente con el contexto de AWS CDK.
Puede utilizar cdk diff para ver los efectos de pasar un valor de contexto en la línea de comandos:
$ cdk diff -c vpcid=vpc-0cb9c31031d0d3e22
Stack ExistsvpcStack Outputs [+] Output publicsubnets publicsubnets: {"Value":"subnet-06e0ea7dd302d3e8f,subnet-01fc0acfb58f3128f"}
Los valores de contexto resultantes pueden verse como se muestra a continuación.
$ cdk context -j
{ "vpc-provider:account=123456789012:filter.vpc-id=vpc-0cb9c31031d0d3e22:region=us-east-1": { "vpcId": "vpc-0cb9c31031d0d3e22", "availabilityZones": [ "us-east-1a", "us-east-1b" ], "privateSubnetIds": [ "subnet-03ecfc033225be285", "subnet-0cded5da53180ebfa" ], "privateSubnetNames": [ "Private" ], "privateSubnetRouteTableIds": [ "rtb-0e955393ced0ada04", "rtb-05602e7b9f310e5b0" ], "publicSubnetIds": [ "subnet-06e0ea7dd302d3e8f", "subnet-01fc0acfb58f3128f" ], "publicSubnetNames": [ "Public" ], "publicSubnetRouteTableIds": [ "rtb-00d1fdfd823c82289", "rtb-04bb1969b42969bcb" ] } }