paint-brush
Observações sobre a migração do AWS SDK v2 para v3 (Javascript) - um guia rápido para ajudá-lopor@lregalado
6,840 leituras
6,840 leituras

Observações sobre a migração do AWS SDK v2 para v3 (Javascript) - um guia rápido para ajudá-lo

por Lorenzo Regalado3m2023/07/22
Read on Terminal Reader

Muito longo; Para ler

O AWS SDK for JavaScript (v2) será colocado em modo de manutenção neste ano de 2023. Compartilho algumas dicas que economizarão tempo regra migrando para o AWS SDK (v3)
featured image - Observações sobre a migração do AWS SDK v2 para v3 (Javascript) - um guia rápido para ajudá-lo
Lorenzo Regalado HackerNoon profile picture
0-item

O AWS SDK for JavaScript (v2) será colocado em modo de manutenção este ano (2023). A v3 está disponível há algum tempo e é a versão incluída no tempo de execução lambda mais recente para o Node18, que também é a versão atual do nó LTS.


Então, se você quiser atualizar seus lambdas para o Node18 Lambda runtime, você deve adicionar o SDK v2 à sua função lambda atual ou permanecer no Node16 (você pode rolar seu próprio runtime , mas isso é outro tópico).


Os benefícios da nova versão do SDK são mais modularidade, incluindo o que você precisa, tamanho de pacote menor conforme enviado diretamente na imagem lambda mais recente, suporte a Typescript e uma pilha de middleware personalizada para personalizar alguns comportamentos do SDK (que ainda não usei).


A migração não é muito difícil; você pode seguir este doc . No entanto, encontrei alguns detalhes que não eram óbvios no início e que economizarão algum tempo de pesquisa no Google/solicitação.

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


No momento da redação deste artigo, o pacote @aws-sdk/util-utf8-node está marcado como obsoleto em favor de @aws-sdk/util-utf8 . Mas no tempo de execução lambda, o nodejs18.x ainda não está incluído, então se você quiser usá-lo, você deve adicioná-lo às dependências de produção do seu projeto.

DynamoDBName

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));


Se você costumava processar alguns streams de uma tabela do DynamoDB e usava a função 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();

SNS

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));