Implementación de funciones de Lambda con el AWS CDK
AWS Cloud Development Kit (AWS CDK) es un marco de infraestructura como código (IAC) que puede usar para definir la infraestructura en la nube de AWS mediante un lenguaje de programación de su elección. Para definir su propia infraestructura de nube, primero escriba una aplicación (en uno de los lenguajes compatibles con CDK) que contenga una o más pilas. Luego, sintetícela en una plantilla de AWS CloudFormation e implemente sus recursos en suCuenta de AWS. Siga los pasos de este tema para implementar una función de Lambda que devuelva un evento desde un punto de conexión de Amazon API Gateway.
La biblioteca de construcción de AWS, incluida con el CDK, ofrece módulos que puede usar para modelar los recursos proporcionados por Servicios de AWS. Para los servicios más populares, la biblioteca proporciona construcciones seleccionadas con valores predeterminados inteligentes y prácticas recomendadas. Puede usar el módulo aws_lambda para definir su función y los recursos de soporte con solo unas pocas líneas de código.
Requisitos previos
Antes de empezar este tutorial, instale el AWS CDK; para ello, ejecute el siguiente comando.
npm install -g aws-cdk
Paso 1: Configurar el proyecto de AWS CDK
Cree un directorio para la nueva aplicación AWS CDK e inicialice el proyecto.
nota
La plantilla de la aplicación AWS CDK utiliza el nombre del directorio del proyecto para generar nombres para los archivos y las clases fuente. En este ejemplo, el directorio se llama hello-lambda
. Si usa otro nombre de directorio de proyecto, la aplicación no coincidirá con estas instrucciones.
AWS CDK v2 incluye construcciones estables para todos los Servicios de AWS en un solo paquete denominado aws-cdk-lib
. Este paquete se instala como dependencia cuando inicializa el proyecto. Al trabajar con ciertos lenguajes de programación, el paquete se instala al crear el proyecto por primera vez.
Paso 2: definición de la pila de AWS CDK
Una pila de CDK es una colección de una o más construcciones que definen los recursos de AWS. Cada pila de CDK representa una pila de AWS CloudFormation en la aplicación del CDK.
Para definir su CDK, siga las instrucciones de su lenguaje de programación preferido. En esta pila se define lo siguiente:
-
Nombre lógico de la función:
MyFunction
-
La ubicación del código de la función, especificada en la propiedad
code
. Para obtener más información, consulte Código del controlador en la Referencia de la API de AWS Cloud Development Kit (AWS CDK). -
Nombre lógico de la API de REST:
HelloApi
-
Nombre lógico del punto de conexión de API Gateway:
ApiGwEndpoint
Tenga en cuenta que todas las pilas de CDK de este tutorial utilizan el tiempo de ejecución de Node.js para la función de Lambda. Puede usar diferentes lenguajes de programación para la pila de CDK y la función de Lambda para aprovechar las ventajas de cada lenguaje. Por ejemplo, puede usar TypeScript para la pila de CDK para aprovechar las ventajas de la escritura estática en el código de su infraestructura. Puede utilizar JavaScript para la función de Lambda para aprovechar la flexibilidad y el rápido desarrollo de un lenguaje de tipificación dinámica.
Paso 3: creación del código de la función de Lambda
-
Desde la raíz del proyecto (
hello-lambda
), cree el directorio/lib/lambda-handler
para el código de la función de Lambda. Este directorio se especifica en la propiedadcode
de la pila de AWS CDK. -
Cree un archivo con el nombre
index.js
en el directorio/lib/lambda-handler
. Pegue el código siguiente en el archivo. La función extrae propiedades específicas de la solicitud de API y las devuelve como una respuesta JSON.exports.handler = async (event) => { // Extract specific properties from the event object const { resource, path, httpMethod, headers, queryStringParameters, body } = event; const response = { resource, path, httpMethod, headers, queryStringParameters, body, }; return { body: JSON.stringify(response, null, 2), statusCode: 200, }; };
Paso 4: implementación de la pila de AWS CDK
-
Desde la raíz del proyecto, ejecute el comando cdk synth:
cdk synth
Este comando sintetiza una plantilla AWS CloudFormation de la pila de CDK. La plantilla es un archivo YAML de aproximadamente 400 líneas, similar al siguiente.
nota
Si aparece el siguiente error, asegúrese de que está en la raíz del directorio del proyecto.
--app is required either in command-line, in cdk.json or in ~/.cdk.json
ejemplo Plantilla de AWS CloudFormation
Resources: MyFunctionServiceRole3C357FF2: 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: HelloLambdaStack/MyFunction/ServiceRole/Resource MyFunction1BAA52E7: Type: AWS::Lambda::Function Properties: Code: S3Bucket: Fn::Sub: cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region} S3Key: ab1111111cd32708dc4b83e81a21c296d607ff2cdef00f1d7f48338782f92l3901.zip Handler: index.handler Role: Fn::GetAtt: - MyFunctionServiceRole3C357FF2 - Arn Runtime: nodejs20.x ...
-
Ejecute el comando cdk deploy:
cdk deploy
Espere a que se creen sus recursos. El resultado final incluye la URL de su punto de conexión de API Gateway. Ejemplo:
Outputs: HelloLambdaStack.ApiGwEndpoint77F417B1 =
https://abcd1234.execute-api.us-east-1.amazonaws.com/prod/
Paso 5: prueba de la función
Para invocar la función de Lambda, copie el punto de conexión de API Gateway y péguelo en un navegador web o ejecute un comando curl
:
curl -s
https://abcd1234.execute-api.us-east-1.amazonaws.com/prod/
La respuesta es una representación en JSON de las propiedades seleccionadas del objeto de evento original, que contiene información sobre la solicitud hecha al punto de conexión de API Gateway. Ejemplo:
{
"resource": "/",
"path": "/",
"httpMethod": "GET",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-ASN": "16509",
"CloudFront-Viewer-Country": "US",
"Host": "abcd1234.execute-api.us-east-1.amazonaws.com",
...
Paso 6: Eliminar los recursos
El punto de conexión de API Gateway es de acceso público. Para evitar cargos inesperados, ejecute el comando cdk destroy para eliminar la pila y todos los recursos asociados.
cdk destroy
Siguientes pasos
Para obtener información sobre cómo escribir aplicaciones de AWS CDK en el lenguaje de su elección, consulte: