paint-brush
AWS SDK v2에서 v3(Javascript)로 마이그레이션에 대한 참고 사항 - 도움이 되는 빠른 안내서~에 의해@lregalado
7,586 판독값
7,586 판독값

AWS SDK v2에서 v3(Javascript)로 마이그레이션에 대한 참고 사항 - 도움이 되는 빠른 안내서

~에 의해 Lorenzo Regalado3m2023/07/22
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

JavaScript용 AWS SDK(v2)는 2023년에 유지 관리 모드로 전환됩니다. 규칙을 AWS SDK(v3)로 마이그레이션하는 데 시간을 절약할 수 있는 몇 가지 팁을 공유합니다.
featured image - AWS SDK v2에서 v3(Javascript)로 마이그레이션에 대한 참고 사항 - 도움이 되는 빠른 안내서
Lorenzo Regalado HackerNoon profile picture
0-item

JavaScript용 AWS SDK(v2)는 올해(2023년)에 유지 관리 모드로 전환됩니다. v3는 한동안 사용 가능했으며 현재 LTS 노드 버전이기도 한 Node18의 최신 람다 런타임에 포함된 버전입니다.


따라서 람다를 Node18 Lambda 런타임으로 업데이트하려면 SDK v2를 현재 람다 함수에 추가하거나 Node16에 머물러야 합니다( 자체 런타임을 롤링할 수도 있지만 이는 또 다른 주제입니다).


새로운 SDK 버전의 이점은 필요한 것, 최신 람다 이미지에 직접 제공되는 더 작은 패키지 크기, Typescript 지원 및 일부 SDK 동작을 사용자 정의하기 위한 사용자 정의 미들웨어 스택(아직 사용하지 않음)을 포함하여 더 많은 모듈화입니다. .


마이그레이션은 그리 어렵지 않습니다. 이 문서를 따를 수 있습니다. 그러나 처음에는 명확하지 않은 몇 가지 세부 정보를 발견하여 인터넷 검색/프롬프트 시간을 절약할 수 있었습니다.

람다

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


작성 당시 @aws-sdk/util-utf8-node 패키지는 @aws-sdk/util-utf8을 위해 더 이상 사용되지 않는 것으로 표시되었습니다. 하지만 람다 런타임에는 nodejs18.x가 아직 포함되어 있지 않으므로 이를 사용하려면 프로젝트 프로덕션 종속성에 추가해야 합니다.

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 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 DeleteCommand(params)); await docClient.send(new ScanCommand(params)); await docClient.send(new QueryCommand(params));


DynamoDB 테이블의 일부 스트림을 처리하고 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));