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.
Tutorial: Crea tu primera aplicación de AWS CDK
Comience a usar el AWS Cloud Development Kit (AWS CDK) mediante la interfaz de línea de comandos de AWS CDK (AWS CDK CLI) para desarrollar su primera aplicación de CDK, arrancar AWS su entorno e implementar su aplicación. AWS
Requisitos previos
Antes de comenzar este tutorial, complete todos los pasos de configuración que aparecen en Introducción a la CDK. AWS
Acerca de este tutorial
En este tutorial, creará e implementará una aplicación sencilla sobre el AWS uso del AWS CDK. La aplicación consta de una función AWS Lambda que devuelve un Hello World!
mensaje cuando se invoca. La función se invocará a través de la URL de la función de Lambda que sirve como punto de conexión HTTP(S) dedicado para la función de Lambda.
A través de este tutorial, hará lo siguiente:
-
Cree su proyecto: cree un proyecto de CDK mediante el comando
cdk init
CLI de CDK. -
Configure su AWS entorno: configure el AWS entorno en el que implementará la aplicación.
-
Inicie su AWS entorno: prepare su AWS entorno para la implementación iniciándolo mediante el comando CDK CLI.
cdk bootstrap
-
Desarrolle su aplicación: utilice construcciones de la biblioteca AWS Construct para definir los recursos de URL de la función Lambda y la función Lambda.
-
Prepare su aplicación para la implementación: use la CLI de CDK para crear su aplicación y sintetizar una AWS CloudFormation plantilla.
-
Implemente su aplicación: utilice el
cdk deploy
comando CLI de CDK para implementar su aplicación y aprovisionar sus AWS recursos. -
Interactúe con su aplicación: interactúe con la función Lambda AWS desplegada invocándola y recibiendo una respuesta.
-
Modificar su aplicación: modifique su función de Lambda e impleméntela para aplicar sus cambios.
-
Eliminar la aplicación: elimine todos los recursos que creó mediante el
cdk destroy
comando CDK CLI.
Paso 1: cree su proyecto de CDK
En este paso va a crear un proyecto nuevo de CDK. Un proyecto de CDK debe estar en su propio directorio, con sus propias dependencias de módulos locales.
- Para crear un proyecto de CDK
-
-
Desde el directorio de inicio que elija, cree y navegue hasta un directorio denominado
hello-cdk
:$ mkdir hello-cdk && cd hello-cdk
importante
Asegúrese de asignar un nombre al directorio del proyecto
hello-cdk
, exactamente como se muestra aquí. La CLI de la CDK usa este nombre de directorio para nombrar las cosas del código de la CDK. Si utiliza otro nombre de directorio, tendrá problemas durante este tutorial. -
Desde el
hello-cdk
directorio, inicialice un nuevo proyecto de CDK mediante el comando CDK CLIcdk init
. Especifique la plantilla de laapp
y su lenguaje de programación preferido con la opción--language
:
-
El comando cdk init
crea una estructura de archivos y carpetas dentro del directorio hello-cdk
para ayudar a organizar el código fuente de la aplicación de CDK. Esta estructura de archivos y carpetas se denomina proyecto de CDK. Tómese un momento para explorar su proyecto de CDK.
Si ha instalado Git, cada proyecto que cree utilizando cdk init
se iniciará como un repositorio de Git.
Durante la inicialización del proyecto, la CLI de CDK crea una aplicación de CDK que contiene una única pila de CDK. La instancia de la aplicación de CDK se crea mediante el constructo App
. La siguiente es una parte de este código del archivo de aplicación de CDK:
La pila de CDK se crea mediante el constructo Stack
. La siguiente es una parte de este código del archivo de pila de CDK:
Paso 2: Configure su entorno AWS
En este paso, configurará el AWS entorno de su pila de CDK. De este modo, podrá especificar en qué entorno se implementará su pila de CDK.
En primer lugar, determine el AWS entorno que quiere usar. Un AWS entorno consta de una AWS cuenta y una AWS región.
Cuando usa la AWS CLI para configurar las credenciales de seguridad en su máquina local, puede usar la AWS CLI para obtener información del AWS entorno para un perfil específico.
- Para usar la AWS CLI para obtener el ID de su AWS cuenta
-
-
Ejecute el siguiente comando AWS CLI para obtener el ID de AWS cuenta
default
de su perfil:$ aws sts get-caller-identity --query "Account" --output text
-
Si prefiere utilizar un perfil con nombre, proporcione el nombre de su perfil a través de la opción
--profile
:$ aws sts get-caller-identity --profile your-profile-name --query "Account" --output text
-
- Para usar la AWS CLI para obtener su AWS región
-
-
Ejecute el siguiente comando AWS CLI para obtener la región que configuró para su
default
perfil:$ aws configure get region
-
Si prefiere utilizar un perfil con nombre, proporcione el nombre de su perfil a través de la opción
--profile
:$ aws configure get region --profile your-profile-name
-
A continuación, configurará el AWS entorno de su pila de CDK modificando la HelloCdkStack
instancia en el archivo de su aplicación. Para este tutorial, codificará la información de su AWS entorno. Recomendamos este procedimiento para los entornos de producción. Para obtener información sobre otras formas de configurar entornos, consulte Configurar entornos para usarlos con la AWS CDK.
- Para configurar el entorno de su pila de CDK
-
-
En el archivo de la aplicación, utilice la propiedad
env
del constructoStack
para configurar el entorno. A continuación, se muestra un ejemplo:
-
Paso 3: Inicie su entorno AWS
En este paso, arranca el AWS entorno que configuró en el paso anterior. Esto prepara el entorno para las implementaciones de CDK.
Para arrancar su entorno, ejecute lo siguiente desde la raíz de su proyecto de CDK:
$ cdk bootstrap
Al arrancar desde la raíz del proyecto de CDK, no es necesario que proporciones ninguna información adicional. La CLI de CDK obtiene información del entorno de su proyecto. En el caso de que arranque fuera de un proyecto de CDK, debe proporcionar información sobre el entorno con el comando cdk bootstrap
. Para obtener más información, consulte Bootstrap your environment para usarlo con el CDK. AWS
Paso 4: cree su aplicación de CDK
En la mayoría de los entornos de programación, el código se crea o compila después de realizar cambios. Esto no es necesario con la AWS CDK, ya que la CLI de la CDK realizará este paso automáticamente. Sin embargo, puede seguir compilando de forma manual cuando quiera encontrar errores de sintaxis y de tipeo. A continuación, se muestra un ejemplo:
Paso 5: enumere las pilas de CDK de su aplicación
En este punto, debería tener una aplicación de CDK que contenga una sola pila de CDK. Para verificarlo, utilice el cdk list
comando CLI de CDK para mostrar las pilas. El resultado debe mostrar una sola pila denominada HelloCdkStack
:
$ cdk list HelloCdkStack
Si no ve este resultado, compruebe que está en el directorio de trabajo correcto de su proyecto e inténtelo de nuevo. Si sigues sin ver tu pila, repite el paso 1: crea tu proyecto de CDK e inténtalo de nuevo.
Paso 6: defina la función de Lambda
En este paso, importará el aws_lambda
módulo de la biblioteca de AWS construcciones y utilizará la construcción Function
L2.
Modifique el archivo de pila de CDK de la siguiente manera:
Echemos un vistazo más de cerca a la Function
construcción. Como todos los constructos, la clase Function
utiliza tres parámetros:
-
alcance: define la instancia de
Stack
como la matriz del constructoFunction
. Todas las construcciones que definen AWS los recursos se crean dentro del ámbito de una pila. Puede definir constructos dentro de otros constructos, lo cual crea una jerarquía (árbol). Aquí, y en la mayoría de los casos, el alcance esthis
(self
en Python). -
ID: el ID de construcción de
Function
la aplicación AWS CDK. Este ID, más un hash basado en la ubicación de la función dentro de la pila, identifica a la función de forma exclusiva durante la implementación. La AWS CDK también hace referencia a este ID cuando actualizas la construcción en tu aplicación y la vuelves a implementar para actualizar el recurso implementado. Aquí, su ID de constructo esHelloWorldFunction
. Las funciones también pueden tener un nombre, especificado con la propiedadfunctionName
. Esta es diferente al ID del constructo. -
props: agrupación de valores que definen las propiedades de la función. Aquí se definen las propiedades
runtime
,handler
ycode
.Los accesorios se representan de forma diferente en los idiomas compatibles con la CDK. AWS
-
En TypeScript y JavaScript,
props
es un único argumento y se pasa un objeto que contiene las propiedades deseadas. -
En Python, los props se pasan como argumentos de palabras clave.
-
En Java, se proporciona un constructor para pasar los accesorios. Existen dos: uno para
FunctionProps
y otro paraFunction
, con el fin de que pueda construir el constructo y su objeto de props en un solo paso. Este código usa este último. -
En C#, se crea una instancia de un
FunctionProps
objeto mediante un inicializador de objetos y se pasa como tercer parámetro.Si los accesorios de una construcción son opcionales, puedes omitir el parámetro por completo.
props
-
Todos los constructos utilizan los mismos tres argumentos, por lo que es fácil mantenerse orientado a medida que se aprenden otros nuevos. Y como es de esperar, puede subclasificar cualquier constructo para ampliarlo según sus necesidades o si desea cambiar sus valores predeterminados.
Paso 7: implemente la URL de función de Lambda
En este paso, se utiliza el método auxiliar addFunctionUrl
del constructo Function
para definir la URL de una función de Lambda. Para generar el valor de esta URL en el momento de la implementación, creará una AWS CloudFormation salida utilizando la CfnOutput
construcción.
Agregue lo siguiente a su archivo:
aviso
Para simplificar este tutorial, la URL de función de Lambda se define sin autenticación. Cuando se implementa, se crea un punto de conexión de acceso público que se puede utilizar para invocar la función. Cuando haya terminado con este tutorial, siga el paso 12: Elimine su aplicación para eliminar estos recursos.
Paso 8: Sintetizar una plantilla CloudFormation
En este paso, se prepara para la implementación sintetizando una CloudFormation plantilla con el comando CDK CLIcdk synth
. Este comando realiza una validación básica del código de CDK, ejecuta la aplicación de CDK y genera una CloudFormation plantilla a partir de la pila de CDK.
Si su aplicación contiene más de una pila, debe especificar qué pilas desea sintetizar. Como la aplicación contiene una sola pila, la CLI de CDK detecta automáticamente la pila que se va a sintetizar.
Si no sintetiza una plantilla, la CLI de CDK realizará este paso automáticamente cuando la implemente. Sin embargo, recomendamos que ejecute este paso antes de cada implementación para comprobar si hay errores de síntesis.
Antes de sintetizar una plantilla, si lo desea, puede crear su aplicación para detectar errores de sintaxis y de tipeo. Para obtener instrucciones, consulte el paso 4: Cree su aplicación CDK.
Para sintetizar una CloudFormation plantilla, ejecuta lo siguiente desde la raíz de tu proyecto:
$ cdk synth
nota
Si recibe un error como el siguiente, verifique que se encuentra en el directorio hello-cdk
e inténtelo de nuevo:
--app is required either in command-line, in cdk.json or in ~/.cdk.json
Si se ejecuta correctamente, la CLI de CDK generará YAML
una CloudFormation plantilla con formato stdout
y guardará una plantilla JSON
con formato en el cdk.out
directorio de su proyecto.
A continuación, se muestra un ejemplo de salida de la plantilla: CloudFormation
Resources: HelloWorldFunctionServiceRole<unique-identifier>: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lambda.amazonaws.com Version: "2012-10-17" ManagedPolicyArns: - Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/ServiceRole/Resource HelloWorldFunction<unique-identifier>: Type: AWS::Lambda::Function Properties: Code: ZipFile: " \ exports.handler = async function(event) { \ return { \ statusCode: 200, \ body: JSON.stringify('Hello World!'), \ }; \ }; \ " Handler: index.handler Role: Fn::GetAtt: - HelloWorldFunctionServiceRole<unique-identifier> - Arn Runtime: nodejs20.x DependsOn: - HelloWorldFunctionServiceRole<unique-identifier> Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/Resource HelloWorldFunctionFunctionUrl<unique-identifier>: Type: AWS::Lambda::Url Properties: AuthType: NONE TargetFunctionArn: Fn::GetAtt: - HelloWorldFunction<unique-identifier> - Arn Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/FunctionUrl/Resource HelloWorldFunctioninvokefunctionurl<unique-identifier>: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunctionUrl FunctionName: Fn::GetAtt: - HelloWorldFunction<unique-identifier> - Arn FunctionUrlAuthType: NONE Principal: "*" Metadata: aws:cdk:path: HelloCdkStack/HelloWorldFunction/invoke-function-url CDKMetadata: Type: AWS::CDK::Metadata Properties: Analytics: v2:deflate64:<unique-identifier> Metadata: aws:cdk:path: HelloCdkStack/CDKMetadata/Default Condition: CDKMetadataAvailable Outputs: myFunctionUrlOutput: Value: Fn::GetAtt: - HelloWorldFunctionFunctionUrl<unique-identifier> - FunctionUrl Parameters: BootstrapVersion: Type: AWS::SSM::Parameter::Value<String> Default: /cdk-bootstrap/<unique-identifier>/version Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip] Rules: CheckBootstrapVersion: Assertions: - Assert: Fn::Not: - Fn::Contains: - - "1" - "2" - "3" - "4" - "5" - Ref: BootstrapVersion AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.
nota
Cada plantilla generada contiene un recurso AWS::CDK::Metadata
de forma predeterminada. El equipo de AWS CDK utiliza estos metadatos para obtener información sobre el uso de las AWS CDK y encontrar formas de mejorarlo. Para obtener más información, incluida la forma de excluirse de los informes de versiones, consulte los informes de versiones.
Al definir una única construcción de nivel 2, la AWS CDK crea una amplia CloudFormation plantilla que contiene los recursos de Lambda, junto con los permisos y la lógica de unión necesarios para que los recursos interactúen dentro de la aplicación.
Paso 9: implemente su pila de CDK
En este paso, se utiliza el cdk deploy
comando CLI de CDK para implementar la pila de CDK. Este comando recupera la CloudFormation plantilla generada y la despliega mediante ella AWS CloudFormation, lo que aprovisiona los recursos como parte de una pila. CloudFormation
Desde la raíz del proyecto, ejecute lo siguiente. Confirme los cambios, si se le solicita:
$ cdk deploy ✨ Synthesis time: 2.69s HelloCdkStack: start: Building <unique-identifier>:current_account-current_region HelloCdkStack: success: Built <unique-identifier>:current_account-current_region HelloCdkStack: start: Publishing <unique-identifier>:current_account-current_region HelloCdkStack: success: Published <unique-identifier>:current_account-current_region This deployment will make potentially sensitive changes according to your current security approval level (--require-approval broadening). Please confirm you intend to make the following modifications: IAM Statement Changes ┌───┬───────────────────────────────────────┬────────┬──────────────────────────┬──────────────────────────────┬───────────┐ │ │ Resource │ Effect │ Action │ Principal │ Condition │ ├───┼───────────────────────────────────────┼────────┼──────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${HelloWorldFunction.Arn} │ Allow │ lambda:InvokeFunctionUrl │ * │ │ ├───┼───────────────────────────────────────┼────────┼──────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${HelloWorldFunction/ServiceRole.Arn} │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │ └───┴───────────────────────────────────────┴────────┴──────────────────────────┴──────────────────────────────┴───────────┘ IAM Policy Changes ┌───┬───────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────┐ │ │ Resource │ Managed Policy ARN │ ├───┼───────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────┤ │ + │ ${HelloWorldFunction/ServiceRole} │ arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole │ └───┴───────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┘ (NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299) Do you wish to deploy these changes (y/n)? y
Del mismo modocdk synth
, no es necesario especificar la pila de AWS CDK, ya que la aplicación contiene una sola pila.
Durante la implementación, la CLI de CDK muestra información de progreso a medida que se implementa la pila. Cuando haya terminado, podrá ir a la consola de AWS CloudFormation HelloCdkStack
. También puede ir a la consola de Lambda para ver el recurso HelloWorldFunction
.
Cuando se complete la implementación, la CLI de CDK generará la URL de su punto final. Copie esta URL para el siguiente paso. A continuación, se muestra un ejemplo:
... HelloCdkStack: deploying... [1/1] HelloCdkStack: creating CloudFormation changeset... ✅ HelloCdkStack ✨ Deployment time: 41.65s Outputs: HelloCdkStack.myFunctionUrlOutput = https://<api-id>.lambda-url.<Region>.on.aws/ Stack ARN: arn:aws:cloudformation:<Region:account-id>:stack/HelloCdkStack/<unique-identifier> ✨ Total time: 44.34s
Paso 10: Interactúe con su aplicación en AWS
En este paso, interactúa con la aplicación AWS invocando la función Lambda a través de la URL de la función. Al acceder a la URL, la función de Lambda devuelve el mensaje de Hello World!
.
Para invocar la función, acceda a la URL de función a través del navegador o desde la línea de comandos. A continuación, se muestra un ejemplo:
$ curl https://<api-id>.lambda-url.<Region>.on.aws/ "Hello World!"%
Paso 11: modifique su aplicación
En este paso, modifique el mensaje que la función de Lambda devuelve cuando se invoca. Se realiza una diferencia mediante el cdk diff
comando CLI de CDK para obtener una vista previa de los cambios y se implementa para actualizar la aplicación. A continuación, interactúa con la aplicación AWS para ver el nuevo mensaje.
Modifique la instancia de myFunction
en su archivo de pila de CDK de la siguiente manera:
Actualmente, los cambios en el código no han realizado ninguna actualización directa en el recurso de Lambda implementado. El código define el estado deseado del recurso. Para modificar el recurso implementado, utilizará la CLI de CDK para sintetizar el estado deseado en una nueva AWS CloudFormation plantilla. A continuación, implementará la nueva CloudFormation plantilla como un conjunto de cambios. Los conjuntos de cambios solo realizan cambios necesarios para alcanzar el nuevo estado deseado.
Para obtener una vista previa de los cambios, ejecute el comando cdk diff
. A continuación, se muestra un ejemplo:
$ cdk diff Stack HelloCdkStack Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff) Resources [~] AWS::Lambda::Function HelloWorldFunction HelloWorldFunction<unique-identifier> └─ [~] Code └─ [~] .ZipFile: ├─ [-] exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; └─ [+] exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello CDK!'), }; }; ✨ Number of stacks with differences: 1
Para crear esta diferencia, la CLI del CDK consulta su AWS cuenta para obtener la AWS CloudFormation plantilla más reciente de la HelloCdkStack
pila. A continuación, compare la plantilla más reciente con la plantilla que acaba de sintetizar en su aplicación.
Para implementar los cambios, ejecute el comando cdk deploy
. A continuación, se muestra un ejemplo:
$ cdk deploy ✨ Synthesis time: 2.12s HelloCdkStack: start: Building <unique-identifier>:current_account-current_region HelloCdkStack: success: Built <unique-identifier>:current_account-current_region HelloCdkStack: start: Publishing <unique-identifier>:current_account-current_region HelloCdkStack: success: Published <unique-identifier>:current_account-current_region HelloCdkStack: deploying... [1/1] HelloCdkStack: creating CloudFormation changeset... ✅ HelloCdkStack ✨ Deployment time: 26.96s Outputs: HelloCdkStack.myFunctionUrlOutput = https://<unique-identifier>.lambda-url.<Region>.on.aws/ Stack ARN: arn:aws:cloudformation:<Region:account-id>:stack/HelloCdkStack/<unique-identifier> ✨ Total time: 29.07s
Para interactuar con la aplicación, repita el paso 10: Activa la interacción con la AWS aplicación. A continuación, se muestra un ejemplo:
$ curl https://<api-id>.lambda-url.<Region>.on.aws/ "Hello CDK!"%
Paso 12: elimine la aplicación
En este paso, utiliza el cdk destroy
comando CDK CLI para eliminar la aplicación. Este comando elimina la CloudFormation pila asociada a la pila de CDK, que incluye los recursos que ha creado.
Para eliminar la aplicación, ejecute el comando cdk destroy
y confirme la solicitud para eliminar la aplicación. A continuación, se muestra un ejemplo:
$ cdk destroy Are you sure you want to delete: HelloCdkStack (y/n)? y HelloCdkStack: destroying... [1/1] ✅ HelloCdkStack: destroyed
Pasos a seguir a continuación
¡Enhorabuena! Ha completado este tutorial y ha utilizado la AWS CDK para crear, modificar y eliminar recursos en la nube correctamente. AWS Ahora está listo para empezar a usar la AWS CDK.
Para obtener más información sobre el uso del AWS CDK en su lenguaje de programación preferido, consulte Trabajar con la biblioteca del AWS CDK.
Para obtener más ayuda, consulte los siguientes recursos:
-
Para realizar un recorrido más detallado sobre un proyecto más complejo, pruebe CDK Workshop
. -
Consulte la referencia de la API para empezar a explorar las estructuras de CDK disponibles para sus servicios favoritos. AWS
-
Visite Construct Hub
para descubrir construcciones creadas por AWS y otras personas. -
Explore algunos ejemplos
de uso del AWS CDK.
El AWS CDK es un proyecto de código abierto. Para contribuir, consulte Contribución al AWS Cloud Development Kit (AWS CDK).