paint-brush
Notas sobre la migración de AWS SDK v2 a v3 (Javascript): una guía rápida para ayudarlopor@lregalado
7,176 lecturas
7,176 lecturas

Notas sobre la migración de AWS SDK v2 a v3 (Javascript): una guía rápida para ayudarlo

por Lorenzo Regalado3m2023/07/22
Read on Terminal Reader

Demasiado Largo; Para Leer

El SDK de AWS para JavaScript (v2) se pondrá en modo de mantenimiento este año 2023. Comparto algunos consejos que le ahorrarán tiempo regla migrar a SDK de AWS (v3)
featured image - Notas sobre la migración de AWS SDK v2 a v3 (Javascript): una guía rápida para ayudarlo
Lorenzo Regalado HackerNoon profile picture
0-item

El SDK de AWS para JavaScript (v2) se pondrá en modo de mantenimiento este año (2023). La v3 ha estado disponible durante algún tiempo y es la versión incluida en el tiempo de ejecución lambda más nuevo para Node18, que también es la versión actual del nodo LTS.


Entonces, si desea actualizar sus lambdas al tiempo de ejecución de Node18 Lambda, debe agregar el SDK v2 a su función lambda actual o permanecer en Node16 (podría implementar su propio tiempo de ejecución , pero ese es otro tema).


Los beneficios de la nueva versión del SDK son una mayor modularidad, incluido lo que necesita, un tamaño de paquete más pequeño que se envía directamente en la imagen lambda más nueva, compatibilidad con TypeScript y una pila de middleware personalizada para personalizar el comportamiento del SDK (que aún tengo que usar).


Migrar no es demasiado difícil; Puedes seguir este documento . Sin embargo, encontré algunos detalles que no eran obvios al principio y que le ahorrarán algo de tiempo de búsqueda en Google/indicaciones.

lambda

v2:

 const AWS = require('aws-sdk'); const lambda = new AWS.Lambda(options); const result = await lambda.invoke(invokeParams).promise(); const resultPayload = JSON.parse(result.Payload)


v3:

 const { LambdaClient, InvokeCommand } = require('@aws-sdk/client-lambda'); const { toUtf8 } = require('@aws-sdk/util-utf8-node'); const command = new InvokeCommand(invokeParams); const result = await lambda.send(command); const resultPayload = JSON.parse(toUtf8(result.Payload));// Now the result payload is a Uint8 array that needs to be decoded


Al momento de escribir, el paquete @aws-sdk/util-utf8-node está marcado como obsoleto a favor de @aws-sdk/util-utf8 . Pero en el tiempo de ejecución de lambda, nodejs18.x aún no está incluido, por lo que si desea usarlo, debe agregarlo a las dependencias de producción de su proyecto.

DynamoDB

v2:

 const AWS = require('aws-sdk'); dynamoDbClient = new AWS.DynamoDB.DocumentClient(options); await dynamoDbClient.put(params).promise(); await dynamoDbClient.get(params).promise(); await dynamoDbClient.update(params).promise(); await dynamoDbClient.update(params).promise(); await dynamoDb.delete(params).promise(); await dynamoDb.scan(params).promise(); await dynamoDb.query(params).promise();


v3:

 const { DynamoDBClient } = require('@aws-sdk/client-dynamodb'); const { DynamoDBDocument, GetCommand, PutCommand, DeleteCommand, QueryCommand, UpdateCommand, ScanCommand, } = require('@aws-sdk/lib-dynamodb'); const dynamoDbClient = new DynamoDBClient(options); const docClient = DynamoDBDocument.from(dynamoDbClient); await docClient.send(new PutCommand(params)); await docClient.send(new GetCommand(params)); await docClient.send(new UpdateCommand(params)); await docClient.send(new UpdateCommand(params)); await docClient.send(new DeleteCommand(params)); await docClient.send(new ScanCommand(params)); await docClient.send(new QueryCommand(params));


Si solía procesar algunos flujos de una tabla de DynamoDB y usaba la función unmarshall , v2:

 const AWS = require('aws-sdk'); const {unmarshall} = AWS.DynamoDB.Converter;


v3:

 const { unmarshall } = require('@aws-sdk/util-dynamodb');

S3

v2:

 const AWS = require('aws-sdk'); const s3Client = new AWS.S3(options); s3Client.upload(params, callBack);


v3:

 const { S3Client } = require('@aws-sdk/client-s3'); const { Upload } = require('@aws-sdk/lib-storage'); const s3Client = new S3Client(options); const parallelUploads3 = new Upload({ client: s3Client, params }); const result = await parallelUploads3.done();

redes sociales

v2:

 const AWS = require('aws-sdk'); const snsClient = new AWS.SNS(options); await snsClient.publish(data).promise();


v3:

 const { SNSClient, PublishCommand } = require('@aws-sdk/client-sns'); const snsClient = new SNSClient(options); await snsClient.send(new PublishCommand(data));