Esta es la guía para AWS CDK desarrolladores de la versión 2. La CDK versión anterior entró en mantenimiento el 1 de junio de 2022 y finalizó el 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.
Importar una AWS CloudFormation plantilla existente
Importe recursos de una AWS CloudFormation plantilla a sus AWS Cloud Development Kit (AWS CDK) aplicaciones mediante la cloudformation-include.CfnInclude
construcción para convertir los recursos en construcciones de nivel 1.
Tras la importación, puedes trabajar con estos recursos en tu aplicación de la misma manera que lo harías si estuvieran definidos originalmente en AWS CDK el código. También puede usar estas construcciones de L1 dentro de las construcciones de nivel superior AWS CDK . Por ejemplo, esto puede permitirle usar los métodos de concesión de permisos de nivel 2 con los recursos que definen.
Básicamente, la cloudformation-include.CfnInclude
construcción agrega un AWS CDK API contenedor a cualquier recurso de la plantilla AWS CloudFormation . Usa esta capacidad para importar tus AWS CloudFormation plantillas existentes a AWS CDK una pieza a la vez. De este modo, puede administrar sus recursos existentes mediante AWS CDK componentes constructos para aprovechar las ventajas de las abstracciones de nivel superior. También puede utilizar esta función para vender sus AWS CloudFormation plantillas a AWS CDK los desarrolladores proporcionando una construcción. AWS CDK API
nota
AWS CDK También se incluye la versión 1 aws-cdk-lib.CfnInclude
, que anteriormente se utilizaba con el mismo propósito general. Sin embargo, carece de gran parte de la funcionalidad decloudformation-include.CfnInclude
.
Temas
Importa una AWS CloudFormation plantilla
La siguiente es una AWS CloudFormation plantilla de ejemplo que utilizaremos para proporcionar ejemplos en este tema. Copia y guarda la plantilla como se my-template.json
indica a continuación. Después de trabajar con estos ejemplos, puede explorar más a fondo utilizando cualquiera de las AWS CloudFormation plantillas desplegadas existentes. Puede obtenerlas desde la AWS CloudFormation
consola.
{ "Resources": { "amzn-s3-demo-bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "amzn-s3-demo-bucket", } } } }
Puede trabajar con cualquiera JSON de las dos YAML plantillas. Recomendamos que estén JSON disponibles, ya que YAML los analizadores pueden variar ligeramente en cuanto a lo que aceptan.
El siguiente es un ejemplo de cómo importar la plantilla de muestra a tu AWS CDK aplicación utilizandocloudformation-include
. Las plantillas se importan en el contexto de una CDK pila.
De forma predeterminada, la importación de un recurso conserva el identificador lógico original del recurso que figura en la plantilla. Este comportamiento es adecuado para importar una AWS CloudFormation plantilla a la AWS CDK, donde se IDs debe conservar la lógica. AWS CloudFormation necesita esta información para reconocer estos recursos importados como los mismos recursos de la AWS CloudFormation plantilla.
Si está desarrollando un contenedor AWS CDK de componentes para la plantilla para que otros AWS CDK desarrolladores puedan usarlo, utilice el recurso de AWS CDK generación de nuevos recursosIDs. De este modo, la construcción se puede utilizar varias veces en una pila sin conflictos de nombres. Para ello, defina la preserveLogicalIds
propiedad en false
al importar la plantilla. A continuación, se muestra un ejemplo:
Para poner los recursos importados bajo el control de tu AWS CDK aplicación, agrega la pila aApp
:
Para comprobar que no se produzcan cambios imprevistos en los AWS recursos de la pila, puedes realizar una diferencia. Usa el AWS CDK CLI cdk diff
comando y omita cualquier metadato AWS CDK específico. A continuación, se muestra un ejemplo:
cdk diff --no-version-reporting --no-path-metadata --no-asset-metadata
Tras importar una AWS CloudFormation plantilla, la AWS CDK aplicación debería convertirse en la fuente fiable de los recursos importados. Para realizar cambios en los recursos, modifíquelos en la AWS CDK aplicación e impleméntelos con el AWS CDK CLI cdk deploycomando.
Acceder a los recursos importados
El nombre template
del código de ejemplo representa la AWS CloudFormation plantilla importada. Para acceder a un recurso desde ella, utilice el getResource()
método del objeto. Para acceder al recurso devuelto como un tipo de recurso específico, asigne el resultado al tipo deseado. Esto no es necesario en Python o JavaScript. A continuación, se muestra un ejemplo:
A partir de este ejemplo, ahora cfnBucket
es una instancia de la aws-s3.CfnBucket
clase. Se trata de una construcción L1 que representa el AWS CloudFormation recurso correspondiente. Puede tratarlo como cualquier otro recurso de su tipo. Por ejemplo, puede obtener su ARN valor con la bucket.attrArn
propiedad.
Para empaquetar el CfnBucket
recurso L1 en una aws-s3.Bucket
instancia L2, usa los métodos estáticos fromBucketArn()
fromBucketAttributes()
, o. fromBucketName()
Por lo general, el fromBucketName()
método es el más conveniente. A continuación, se muestra un ejemplo:
Otras construcciones L2 tienen métodos similares para crear la construcción a partir de un recurso existente.
Al incluir una construcción de L1 en una construcción de L2, no se crea un recurso nuevo. A partir de nuestro ejemplo, no vamos a crear un segundo bucket de S3;. En su lugar, la nueva Bucket
instancia encapsula la existenteCfnBucket
.
A partir del ejemplo, ahora bucket
es una construcción L2 que se comporta como cualquier otra Bucket
construcción L2. Por ejemplo, puedes conceder a una AWS Lambda función acceso de escritura al depósito mediante el práctico método del depósito. grantWrite()
No es necesario que definas manualmente la política necesaria AWS Identity and Access Management (IAM). A continuación, se muestra un ejemplo:
Sustituya los parámetros
Si la AWS CloudFormation plantilla contiene parámetros, puede sustituirlos por valores de tiempo de creación en el momento de la importación mediante la parameters
propiedad. En el siguiente ejemplo, sustituimos el UploadBucket
parámetro por el ARN de un segmento definido en otra parte de nuestro AWS CDK código.
Importa otros elementos de la plantilla
Puede importar cualquier elemento AWS CloudFormation de la plantilla, no solo los recursos. Los elementos importados pasan a formar parte de la AWS CDK
pila. Para importar estos elementos, utilice los siguientes métodos del CfnInclude
objeto:
-
getCondition()
— AWS CloudFormation condiciones. -
getHook()
— AWS CloudFormation ganchos para despliegues azules/verdes. -
getParameter()
— AWS CloudFormation parámetros. -
getRule()
— AWS CloudFormation reglas para AWS Service Catalog plantillas.
Cada uno de estos métodos devuelve una instancia de una clase que representa el tipo específico de AWS CloudFormation elemento. Estos objetos son mutables. Los cambios que realices en ellos aparecerán en la plantilla que se genere a partir de la AWS CDK pila. A continuación se muestra un ejemplo en el que se importa un parámetro de la plantilla y se modifica su valor predeterminado:
Importa pilas anidadas
Puede importar pilas anidadas especificándolas al importar su plantilla principal o en algún momento posterior. La plantilla anidada debe almacenarse en un archivo local, pero debe hacerse referencia a ella como NestedStack
recurso en la plantilla principal. Además, el nombre del recurso utilizado en el AWS CDK código debe coincidir con el nombre utilizado para la pila anidada en la plantilla principal.
Dada esta definición de recurso en la plantilla principal, el código siguiente muestra cómo importar la pila anidada a la que se hace referencia en ambos sentidos.
"NestedStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": "https://my-s3-template-source.s3.amazonaws.com/nested-stack.json" }
Puede importar varias pilas anidadas con cualquiera de los dos métodos. Al importar la plantilla principal, se proporciona un mapeo entre el nombre del recurso de cada pila anidada y su archivo de plantilla. Este mapeo puede contener cualquier número de entradas. Para hacerlo después de la importación inicial, llama loadNestedStack()
una vez por cada pila anidada.
Tras importar una pila anidada, puedes acceder a ella mediante el método de la plantilla principal. getNestedStack()
El getNestedStack()
método devuelve una IncludedNestedStack
instancia. Desde esta instancia, puede acceder a la AWS CDK NestedStack
instancia a través de la stack
propiedad, como se muestra en el ejemplo. También puedes acceder al objeto de AWS CloudFormation plantilla original a través includedTemplate
del cual puedes cargar recursos y otros AWS CloudFormation elementos.