

 O [Guia de referência da API do AWS SDK para JavaScript V3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) descreve em detalhes todas as operações da API para o AWS SDK para JavaScript versão 3 (V3). 

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migre da versão 2.x para a 3.x do AWS SDK para JavaScript
<a name="migrating"></a>

A AWS SDK para JavaScript versão 3 é uma grande reescrita da versão 2. A seção descreve as diferenças entre as duas versões e explica como migrar da versão 2 para a versão 3 do SDK para. JavaScript

## Migre seu código para o SDK for JavaScript v3 usando codemod
<a name="migrating-to-v3"></a>

AWS SDK para JavaScript a versão 3 (v3) vem com interfaces modernizadas para configurações e utilitários de clientes, que incluem credenciais, upload de várias partes do Amazon S3, cliente de documentos do DynamoDB, garçons e muito mais. Você pode descobrir o que mudou na v2 e nos equivalentes da v3 para cada alteração no [guia de migração no repositório](https://github.com/aws/aws-sdk-js-v3/blob/main/UPGRADING.md). AWS SDK para JavaScript GitHub 

Para aproveitar ao máximo a AWS SDK para JavaScript v3, recomendamos usar os scripts de codemod descritos abaixo.

### Usar codemod para migrar códigos v2 existentes
<a name="using-codemod"></a>

A coleção de scripts de codemod [aws-sdk-js-codemod](https://www.npmjs.com/package/aws-sdk-js-codemod)ajuda a migrar seu aplicativo existente AWS SDK para JavaScript (v2) para usar a v3. APIs Você pode executar a transformação da seguinte maneira.

```
$ npx aws-sdk-js-codemod -t v2-to-v3 PATH...
```

Por exemplo, considere que você tem o código a seguir, que cria um cliente Amazon DynamoDB a partir da v2 e chama a operação `listTables`.

```
// example.ts
import AWS from "aws-sdk";

const region = "us-west-2";
const client = new AWS.DynamoDB({ region });
await client.listTables({}).promise()
  .then(console.log)
  .catch(console.error);
```

Você pode executar a transformação `v2-to-v3` em `example.ts` da seguinte maneira.

```
$ npx aws-sdk-js-codemod -t v2-to-v3 example.ts
```

A transformação converterá a importação do DynamoDB em v3, criará o cliente v3 e chamará a operação `listTables` da seguinte forma.

```
// example.ts
import { DynamoDB } from "@aws-sdk/client-dynamodb";

const region = "us-west-2";
const client = new DynamoDB({ region });
await client.listTables({})
  .then(console.log)
  .catch(console.error);
```

Implementamos transformações para casos de uso comuns. Se seu código não for transformado corretamente, crie um [relatório de bug](https://github.com/awslabs/aws-sdk-js-codemod/issues/new?assignees=&labels=bug%2Ctriage&template=bug_report.yml&title=%5BBug%3F%5D%3A+) ou uma [solicitação de recurso](https://github.com/awslabs/aws-sdk-js-codemod/issues/new?assignees=&labels=enhancement&template=feature_request.yml&title=%5BFeature%5D%3A+) com exemplos de código de entrada e código observed/expected de saída. Se seu caso de uso específico já foi relatado em [um problema existente](https://github.com/awslabs/aws-sdk-js-codemod/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc), mostre seu apoio por meio de um voto positivo.

## Novidades da versão 3
<a name="welcome_whats_new_v3"></a>

A versão 3 do SDK para JavaScript (v3) contém os seguintes novos recursos.

Pacotes modularizados  
Agora, os usuários podem usar um pacote separado para cada serviço.

Nova pilha de middleware  
Agora, os usuários podem usar uma pilha de middleware para controlar o ciclo de vida de uma chamada de operação.

Além disso, o SDK é incorporado TypeScript, o que tem muitas vantagens, como digitação estática.

**Importante**  
Os exemplos de código para a v3 neste guia estão escritos em ECMAScript 6 (ES6). ES6traz nova sintaxe e novos recursos para tornar seu código mais moderno e legível, além de fazer mais. ES6 requer que você use o Node.js versão 13.x ou superior. Para baixar e instalar a versão mais recente do Node.js, consulte [Downloads do Node.js](https://nodejs.org/en/download/). Para obter mais informações, consulte [Sintaxe ES6/CommonJS de JavaScript](sdk-example-javascript-syntax.md).

## Pacotes modularizados
<a name="welcome_whats_new_v3_modularized_packages"></a>

A versão 2 do SDK para JavaScript (v2) exigia que você usasse o AWS SDK inteiro, da seguinte forma.

```
var AWS = require("aws-sdk");
```

Carregar o SDK inteiro não é um problema se seu aplicativo estiver usando muitos AWS serviços. No entanto, se você precisar usar apenas alguns AWS serviços, isso significa aumentar o tamanho do seu aplicativo com código que você não precisa nem usa.

Na v3, você pode carregar e usar somente os AWS serviços individuais de que precisa. Isso é mostrado no exemplo a seguir, que fornece acesso ao Amazon DynamoDB (DynamoDB).

```
import { DynamoDB } from "@aws-sdk/client-dynamodb";
```

Você não só pode carregar e usar AWS serviços individuais, mas também pode carregar e usar somente os comandos de serviço necessários. Isso é mostrado nos exemplos a seguir, que fornecem acesso ao cliente do DynamoDB e ao comando `ListTablesCommand`.

```
import {
  DynamoDBClient,
  ListTablesCommand
} from "@aws-sdk/client-dynamodb";
```

**Importante**  
Você não deve importar submódulos em módulos. Por exemplo, o código a seguir poderá retornar erros.  

```
import { CognitoIdentity } from "@aws-sdk/client-cognito-identity/CognitoIdentity";
```
A seguir está o código correto.  

```
import { CognitoIdentity } from "@aws-sdk/client-cognito-identity";
```

### Comparação de tamanho de código
<a name="welcome_whats_new_v3_modularized_packages_code_size"></a>

Na versão 2 (v2), um exemplo de código simples que lista todas as suas tabelas do Amazon DynamoDB na região `us-west-2` pode ser parecido com o seguinte.

```
var AWS = require("aws-sdk");
// Set the Region
AWS.config.update({ region: "us-west-2" });
// Create DynamoDB service object
var ddb = new AWS.DynamoDB({ apiVersion: "2012-08-10" });

// Call DynamoDB to retrieve the list of tables
ddb.listTables({ Limit: 10 }, function (err, data) {
  if (err) {
    console.log("Error", err.code);
  } else {
    console.log("Tables names are ", data.TableNames);
  }
});
```

A v3 é similar ao seguinte.

```
import {
  DynamoDBClient,
  ListTablesCommand
} from "@aws-sdk/client-dynamodb";

const dbclient = new DynamoDBClient({ region: "us-west-2" });

try {
  const results = await dbclient.send(new ListTablesCommand);
  
  for (const item of results.TableNames) {
    console.log(item);
  }
} catch (err) {
  console.error(err)
}
```

O pacote `aws-sdk` adiciona cerca de 40 MB ao seu aplicativo. Substituir `var AWS = require("aws-sdk")` por `import {DynamoDB} from "@aws-sdk/client-dynamodb"` reduz essa sobrecarga para cerca de 3 MB. Restringir a importação apenas ao cliente do DynamoDB e ao comando `ListTablesCommand` reduz a sobrecarga para menos de 100 KB.

```
// Load the DynamoDB client and ListTablesCommand command for Node.js
import {
  DynamoDBClient,
  ListTablesCommand
} from "@aws-sdk/client-dynamodb";
const dbclient = new DynamoDBClient({});
```

### Chamar comandos na v3
<a name="welcome_whats_new_v3_function_examples"></a>

Você pode realizar operações na v3 usando comandos da v2 ou v3. Para usar os comandos v3, você importa os comandos e os clientes do pacote de AWS serviços necessários e executa o comando usando o `.send` método usando o async/await padrão.

Para usar os comandos v2, você importa os pacotes de AWS serviços necessários e executa o comando v2 diretamente no pacote usando um retorno de chamada ou um padrão. async/await 

#### Usar comandos da v3
<a name="using_v3_commands"></a>

A v3 fornece um conjunto de comandos para cada pacote AWS de serviços para permitir que você execute operações para esse AWS serviço. Depois de instalar um Serviço da AWS , você pode navegar pelos comandos disponíveis na `node-modules/@aws-sdk/client-PACKAGE_NAME/commands folder.` de seu projeto. 

Você deve importar os comandos que deseja usar. Por exemplo, o código a seguir carrega o serviço do DynamoDB e o comando `CreateTableCommand`. 

```
import { DynamoDB, CreateTableCommand } from "@aws-sdk/client-dynamodb";
```

Para chamar esses comandos no async/await padrão recomendado, use a sintaxe a seguir. 

```
CLIENT.send(new XXXCommand);
```

Por exemplo, o exemplo a seguir cria uma tabela do DynamoDB usando o padrão recomendado. async/await 

```
import { DynamoDB, CreateTableCommand } from "@aws-sdk/client-dynamodb";
const dynamodb = new DynamoDB({ region: "us-west-2" });
const tableParams = {
  TableName: TABLE_NAME
};

try {
  const data = await dynamodb.send(new CreateTableCommand(tableParams));
  console.log("Success", data);
} catch (err) {
  console.log("Error", err);
};
```

#### Usar comandos da v2
<a name="using_v2_commands"></a>

Para usar os comandos v2 no SDK para JavaScript, você importa os pacotes de AWS serviços completos, conforme demonstrado no código a seguir.

```
const { DynamoDB } = require('@aws-sdk/client-dynamodb');
```

 Para chamar os comandos v2 no async/await padrão recomendado, use a sintaxe a seguir. 

```
client.command(parameters);
```

O exemplo a seguir usa o `createTable` comando v2 para criar uma tabela do DynamoDB usando o padrão recomendado. async/await 

```
const { DynamoDB } = require('@aws-sdk/client-dynamodb');
const dynamoDB = new DynamoDB({ region: 'us-west-2' });
var tableParams = {
  TableName: TABLE_NAME
};
async function run() => {
  try {
    const data = await dynamoDB.createTable(tableParams);
    console.log("Success", data);
  }
  catch (err) {
    console.log("Error", err);
  }
};
run();
```

O exemplo a seguir usa o comando `createBucket` da v2 para criar um bucket do Amazon S3 usando o padrão de retorno de chamada.

```
const { S3 } = require('@aws-sdk/client-s3');
const s3 = new S3({ region: 'us-west-2' });
var bucketParams = {
  Bucket : BUCKET_NAME
};
function run() {
  s3.createBucket(bucketParams, function (err, data) {
    if (err) {
      console.log("Error", err);
    } else {
      console.log("Success", data.Location);
    }
  })
};
run();
```

## Nova pilha de middleware
<a name="welcome_whats_new_v3_middleware_stack"></a>

A v2 do SDK permitiu que você modificasse uma solicitação em vários estágios do ciclo de vida, anexando receptores de eventos à solicitação. Essa abordagem pode dificultar a depuração do que deu errado durante o ciclo de vida de uma solicitação.

Na v3, você pode usar uma nova pilha de middleware para controlar o ciclo de vida de uma chamada de operação. Essa abordagem oferece alguns benefícios. Cada estágio de middleware na pilha chama o próximo estágio de middleware depois de fazer qualquer alteração no objeto de solicitação. Isso também facilita muito a depuração de problemas na pilha, porque você pode ver exatamente quais estágios de middleware foram chamados antes do erro.

O exemplo a seguir adiciona um cabeçalho personalizado a um cliente do Amazon DynamoDB (que criamos e mostramos anteriormente) usando middleware. O primeiro argumento é uma função que aceita `next`, que é o próximo estágio de middleware na pilha a ser chamada, e `context`, que é um objeto que contém algumas informações sobre a operação que está sendo chamada. A função retorna uma função que aceita `args`, que é um objeto que contém os parâmetros passados para a operação e a solicitação. Ela retorna o resultado da chamada do próximo middleware com `args`.

```
dbclient.middlewareStack.add(
  (next, context) => args => {
    args.request.headers["Custom-Header"] = "value";
    return next(args);
  },
  {
    name: "my-middleware",
    override: true,
    step: "build"
  }
);

dbclient.send(new PutObjectCommand(params));
```

# Diferenças entre o AWS SDK para JavaScript v2 e v3
<a name="migrate-whats-different"></a>

 Esta seção aborda as mudanças notáveis do AWS SDK para JavaScript v2 para a v3. Como a v3 é uma regravação modular da v2, alguns conceitos básicos são diferentes entre elas. Saiba mais sobre essas mudanças nas [publicações do nosso blog](https://aws.amazon.com/blogs/developer/category/developer-tools/aws-sdk-for-javascript-in-node-js/). As seguintes publicações do blog ajudarão você a se atualizar: 
+  [Pacotes modulares no AWS SDK para JavaScript](https://aws.amazon.com/blogs/developer/modular-packages-in-aws-sdk-for-javascript/) 
+  [Apresentação da pilha do middleware no AWS SDK para JavaScript modular](https://aws.amazon.com/blogs/developer/middleware-stack-modular-aws-sdk-js/) 

 Confira abaixo o resumo das alterações de interface do AWS SDK para JavaScript v2 para v3. O objetivo é ajudar você a encontrar facilmente os equivalentes das APIS da v2 que você já conhece na v3. 

**Topics**
+ [

# Construtores do cliente
](migrate-client-constructors.md)
+ [

# Provedores de credenciais
](migrate-credential-providers.md)
+ [

# Considerações sobre o Amazon S3
](migrate-s3.md)
+ [

# Cliente de documento do DynamoDB
](migrate-dynamodb-doc-client.md)
+ [

# Waiters e signatários
](migrate-waiters-signers.md)
+ [

# Observações sobre clientes de serviços específicos
](migrate-service-client-notes.md)

# Construtores do cliente
<a name="migrate-client-constructors"></a>

 Essa lista é indexada pelos [parâmetros de configuração v2](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html). 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#computeChecksums-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#computeChecksums-property) 
  +  **v2**: Se as MD5 somas de verificação dos corpos da carga útil devem ser computadas quando o serviço as aceita (atualmente compatível somente com o S3). 
  +  **v3**: os comandos aplicáveis do S3 (PutObject, PutBucketCors, etc.) calcularão automaticamente as MD5 somas de verificação da carga útil da solicitação. Você também pode especificar um algoritmo de soma de verificação diferente no parâmetro `ChecksumAlgorithm` dos comandos para usar um algoritmo de soma de verificação diferente. Você pode encontrar mais informações no [anúncio dos recursos do S3](https://aws.amazon.com/blogs/aws/new-additional-checksum-algorithms-for-amazon-s3/). 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#convertResponseTypes-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#convertResponseTypes-property) 
  +  **v2**: se os tipos são convertidos ao analisar dados de resposta. 
  +  **v3**: **obsoleto**. Essa opção é considerada insegura porque não converte tipos como timestamp ou binários base64 da resposta JSON. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#correctClockSkew-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#correctClockSkew-property) 
  +  **v2**: se deve aplicar uma correção de distorção de relógio e repetir as solicitações que falham devido a um relógio distorcido do cliente. 
  +  **v3**: **obsoleto**. O SDK *sempre* aplica uma correção de distorção de relógio. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#systemClockOffset-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#systemClockOffset-property) 
  +  **v2**: um valor de deslocamento em milissegundos a ser aplicado a todos os horários de assinatura. 
  +  **v3**: sem alteração. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#credentials-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#credentials-property) 
  +  **v2**: as credenciais da AWS com as quais assinar as solicitações. 
  +  **v3**: sem alteração. Também pode ser uma função assíncrona que retorna credenciais. Se a função retornar um `expiration (Date)`, a função será chamada novamente quando a data e hora de expiração se aproximar. Consulte a [referência da API v3 para credenciais `AwsAuthInputConfig`](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-middleware-signing/Interface/AwsAuthInputConfig/). 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#endpointCacheSize-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#endpointCacheSize-property) 
  +  **v2**: o tamanho do cache global que armazena os endpoints das operações de descoberta de endpoints. 
  +  **v3**: sem alteração. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#endpointDiscoveryEnabled-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#endpointDiscoveryEnabled-property) 
  +  **v2**: se deve chamar operações com endpoints fornecidos pelo serviço dinamicamente. 
  +  **v3**: sem alteração. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#hostPrefixEnabled-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#hostPrefixEnabled-property) 
  +  **v2**: se os parâmetros da solicitação devem ser agrupados com o prefixo do nome do host. 
  +  **v3**: **obsoleto**. O SDK *sempre* injeta o prefixo do nome do host quando necessário. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property) 

   Um conjunto de opções para passar para a solicitação HTTP de baixo nível. Essas opções são agregadas de forma diferente na v3. Você pode configurá-las fornecendo um novo `requestHandler`. Veja o exemplo de configuração de opções http no runtime do Node.js. Você pode encontrar mais na [referência da API v3 para NodeHttpHandler](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-smithy-node-http-handler/). 

   Todas as solicitações v3 usam HTTPS por padrão. Só é necessário fornecer um httpsAgent personalizado. 

  ```
  const { Agent } = require("https");
  const { Agent: HttpAgent } = require("http");
  const { NodeHttpHandler } = require("@smithy/node-http-handler");
  const dynamodbClient = new DynamoDBClient({
      requestHandler: new NodeHttpHandler({
          httpsAgent: new Agent({
              /*params*/
          }),
          connectionTimeout: /*number in milliseconds*/,
          socketTimeout: /*number in milliseconds*/
      }),
  });
  ```

   Se estiver passando um endpoint personalizado que usa http, você precisará fornecer o httpAgent. 

  ```
  const { Agent } = require("http");
  const { NodeHttpHandler } = require("@smithy/node-http-handler");
  
  const dynamodbClient = new DynamoDBClient({
      requestHandler: new NodeHttpHandler({
          httpAgent: new Agent({
              /*params*/
          }),
      }),
      endpoint: "http://example.com",
  });
  ```

   Se o cliente estiver sendo executado em navegadores, um conjunto diferente de opções estará disponível. Você pode encontrar mais na [referência da API v3 para FetchHttpHandler](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-smithy-fetch-http-handler/). 

  ```
  const { FetchHttpHandler } = require("@smithy/fetch-http-handler");
  const dynamodbClient = new DynamoDBClient({
      requestHandler: new FetchHttpHandler({
          requestTimeout: /* number in milliseconds */
      }),
  });
  ```

   Cada opção de `httpOptions` é especificada abaixo: 
  +  `proxy` 
    +  **v2**: o URL pelo qual as solicitações de proxy serão encaminhadas. 
    +  **v3**: você pode configurar um proxy com um agente seguindo as instruções em [Como configurar proxies para Node.js](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-configuring-proxies.html). 
  +  `agent` 
    +  **v2**: o objeto Agent com o qual realizar solicitações HTTP. Usado para o agrupamento de conexões. 
    +  **v3**: você pode configurar `httpAgent` ou `httpsAgent` conforme mostrado nos exemplos acima. 
  +  `connectTimeout` 
    +  **v2**: define o soquete para expirar após não conseguir estabelecer uma conexão com o servidor após `connectTimeout` milissegundos. 
    +  **v3**: `connectionTimeout` está disponível [em opções de `NodeHttpHandler`](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-smithy-node-http-handler/). 
  +  `timeout` 
    +  **v2**: o número de milissegundos que uma solicitação pode levar antes de ser encerrada automaticamente. 
    +  **v3**: `socketTimeout` está disponível [em opções de `NodeHttpHandler`](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-smithy-node-http-handler/). 
  +  `xhrAsync` 
    +  **v2**: se o SDK enviará solicitações HTTP assíncronas. 
    +  **v3**: **obsoleto**. As solicitações são *sempre* assíncronas. 
  +  `xhrWithCredentials` 
    +  **v2**: define a propriedade “withCredentials” de um XMLHttp objeto Request. 
    +  **v3**: não disponível. O SDK herda [as configurações de busca padrão](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch). 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#logger-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#logger-property) 
  +  **v2**: um objeto que responde a `.write()` (como um fluxo) ou `.log()` (como o objeto do console) para registrar informações sobre solicitações. 
  +  **v3**: sem alteração. Logs mais granulares estão disponíveis na v3. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#maxRedirects-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#maxRedirects-property) 
  +  **v2**: a quantidade máxima de redirecionamentos a serem seguidos para uma solicitação de serviço. 
  +  **v3**: **obsoleto**. O SDK *não* segue redirecionamentos para evitar solicitações não intencionais entre regiões. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#maxRetries-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#maxRetries-property) 
  +  **v2**: a quantidade máxima de novas tentativas a serem realizadas para uma solicitação de serviço. 
  +  **v3**: alterado para `maxAttempts`. Veja mais na [referência da API v3 para RetryInputConfig](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-smithy-middleware-retry/Interface/RetryInputConfig/). Observe que `maxAttempts` deveria ser `maxRetries + 1`. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#paramValidation-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#paramValidation-property) 
  +  **v2**: se os parâmetros de entrada devem ser validados em relação à descrição da operação antes de enviar a solicitação. 
  +  **v3**: **obsoleto**. O SDK *não* faz validação no lado do cliente em runtime. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#region-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#region-property) 
  +  **v2**: a região para a qual enviar solicitações de serviço. 
  +  **v3**: sem alteração. Também pode ser uma função assíncrona que retorna uma string de região. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#retryDelayOptions-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#retryDelayOptions-property) 
  +  **v2**: um conjunto de opções para configurar o atraso da nova tentativa em erros que podem ser repetidos. 
  +  **v3**: **obsoleto**. O SDK oferece suporte a uma estratégia de repetição mais flexível com a opção de construtor `retryStrategy` do cliente. Veja mais [na referência da API v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-smithy-util-retry/). 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3BucketEndpoint-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3BucketEndpoint-property) 
  +  **v2**: se o endpoint fornecido aborda um bucket individual (falso se abordar o endpoint raiz da API). 
  +  **v3**: alterado para `bucketEndpoint`. Veja mais na [referência da API v3 para bucketEndpoint](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-middleware-bucket-endpoint/Interface/BucketEndpointInputConfig/). Observe que, quando definido como `true`, é preciso especificar o endpoint da solicitação no parâmetro `Bucket` da solicitação. O endpoint original será sobrescrito. Já na v2, o endpoint da solicitação no construtor do cliente sobrescreve o parâmetro `Bucket` da solicitação. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3DisableBodySigning-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3DisableBodySigning-property) 
  +  **v2**: se a assinatura corporal do S3 deve ser desabilitada ao usar a versão v4 da assinatura. 
  +  **v3**: renomeado para `applyChecksum`. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3ForcePathStyle-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3ForcePathStyle-property) 
  +  **v2**: Se deve forçar o estilo de caminho URLs para objetos do S3. 
  +  **v3**: renomeado para `forcePathStyle`. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3UseArnRegion-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3UseArnRegion-property) 
  +  **v2**: se a região solicitada deve ser substituída pela região inferida do ARN do recurso solicitado. 
  +  **v3**: renomeado para `useArnRegion`. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3UsEast1RegionalEndpoint-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3UsEast1RegionalEndpoint-property) 
  +  **v2**: quando a região é definida como “us-east-1”, seja para enviar a solicitação s3 para endpoints globais ou endpoints regionais “us-east-1”. 
  +  **v3**: **obsoleto**. O cliente do S3 sempre usará o endpoint regional se a região estiver definida como `us-east-1`. Você pode definir a região como `aws-global` para enviar solicitações ao endpoint global do S3. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#signatureCache-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#signatureCache-property) 
  +  **v2**: se a assinatura com a qual assinar solicitações (substituindo a configuração da API) é armazenada em cache. 
  +  **v3**: **obsoleto**. O SDK *sempre* armazena em cache as chaves de assinatura com hash. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#signatureVersion-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#signatureVersion-property) 
  +  **v2**: a versão da assinatura com a qual assinar solicitações (substituindo a configuração da API). 
  +  **v3**: **obsoleto**. *O Signature V2 suportado no SDK v2 foi descontinuado por AWS. A v3 suporta apenas a assinatura v4.* 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#sslEnabled-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#sslEnabled-property) 
  +  **v2**: se o SSL está habilitado para solicitações. 
  +  **v3**: renomeado para `tls`. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#stsRegionalEndpoints-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#stsRegionalEndpoints-property) 
  +  **v2**: se deve enviar uma solicitação sts para endpoints globais ou endpoints regionais. 
  +  **v3**: **obsoleto**. O cliente STS *sempre* usará endpoints regionais se definido como uma região específica. Você pode definir a região como `aws-global` para enviar a solicitação ao endpoint global do STS. 
+  [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#useAccelerateEndpoint-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#useAccelerateEndpoint-property) 
  +  **v2**: se deve usar o endpoint Accelerate com o serviço S3. 
  +  **v3**: sem alteração. 

# Provedores de credenciais
<a name="migrate-credential-providers"></a>

 Na v2, o SDK para JavaScript fornece uma lista de provedores de credenciais, bem como uma cadeia de fornecedores de credenciais, disponível por padrão no Node.js, que tenta carregar as credenciais da AWS de todos os provedores mais comuns. O SDK para JavaScript v3 simplifica a interface do provedor de credenciais, facilitando o uso e a criação de provedores de credenciais personalizados. Além de uma nova cadeia de provedores de credenciais, o SDK para JavaScript v3 fornece uma lista de provedores de credenciais equivalente à da v2. 

 Aqui estão todos os provedores de credenciais na v2 e seus equivalentes na v3. 

## Provedor de credenciais padrão
<a name="default-credential-provider"></a>

 O provedor de credenciais padrão é como o SDK para JavaScript resolve a credencial da AWS se você *não* fornecer uma explicitamente. 
+  **v2**: [CredentialProviderChain](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CredentialProviderChain.html) no Node.js resolve a credencial das fontes na seguinte ordem: 
  +  [Variável de ambiente](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html) 
  +  [Arquivo de credenciais compartilhadas](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html) 
  +  [Credenciais de contêiner do ECS](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/RemoteCredentials.html) 
  +  [Processo externo de geração](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sourcing-external.html) 
  +  [Token OIDC do arquivo especificado](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/TokenFileWebIdentityCredentials.html) 
  +  [Metadados da instância do Amazon EC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) 

   Se um dos provedores de credenciais acima não conseguir resolver a credencial da AWS, a cadeia voltará para o próximo provedor até que uma credencial válida seja resolvida, e a cadeia gerará um erro quando todos os provedores falharem. 

   Nos runtimes do Browser e do React Native, a cadeia de credenciais está vazia e as credenciais devem ser definidas explicitamente. 
+  **v3**: [defaultProvider](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers#fromnodejsproviderchain-1). As fontes de credenciais e a ordem de fallback *não* mudam na v3. Também oferece suporte a [credenciais do Centro de Identidade do AWS IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html). 

## Credenciais temporárias
<a name="temporary-credentials"></a>
+  **v2**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ChainableTemporaryCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ChainableTemporaryCredentials.html) representa credenciais temporárias recuperadas do `AWS.STS`. Sem nenhum parâmetro extra, as credenciais serão obtidas da operação `AWS.STS.getSessionToken()`. Se um perfil do IAM for fornecido, a operação `AWS.STS.assumeRole()` será usada para buscar credenciais para o perfil. `AWS.ChainableTemporaryCredentials` difere de `AWS.TemporaryCredentials` em como as masterCredentials e as atualizações são tratadas. `AWS.ChainableTemporaryCredentials` atualiza as credenciais expiradas usando as masterCredentials passadas pelo usuário para oferecer suporte ao encadeamento de credenciais STS. No entanto, `AWS.TemporaryCredentials` reduz recursivamente as masterCredentials durante a instanciação, impedindo a capacidade de atualizar credenciais que exigem credenciais intermediárias temporárias. 

   O [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/TemporaryCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/TemporaryCredentials.html) original foi **substituído** por `ChainableTemporaryCredentials` na v2. 
+  **v3**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromtemporarycredentials](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromtemporarycredentials). Você pode chamar `fromTemporaryCredentials()` do pacote `@aws-sdk/credential-providers`. Veja um exemplo abaixo: 

  ```
  import { FooClient } from "@aws-sdk/client-foo";
  import { fromTemporaryCredentials } from "@aws-sdk/credential-providers"; // ES6 import
  // const { FooClient } = require("@aws-sdk/client-foo");
  // const { fromTemporaryCredentials } = require("@aws-sdk/credential-providers"); // CommonJS import
  
  const sourceCredentials = {
    // A credential can be a credential object or an async function that returns a credential object
  };
  const client = new FooClient({
    credentials: fromTemporaryCredentials({
      masterCredentials: sourceCredentials,
      params: { RoleArn },
    }),
  });
  ```

## Credenciais de identidade do Amazon Cognito
<a name="cognito-identity-credentials"></a>

 Carregue credenciais do serviço de identidades do Amazon Cognito, normalmente usado em navegadores. 
+  **v2**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html) representa as credenciais recuperadas da federação de identidades do STS Web usando o serviço de identidades do Amazon Cognito. 
+  **v3**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers.html) O [pacote `@aws/credential-providers`](https://www.npmjs.com/package/@aws-sdk/credential-providers) fornece duas funções de provedor de credenciais, uma das quais [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers.html) recebe um ID de identidade e chama `cognitoIdentity:GetCredentialsForIdentity`, enquanto a outra [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers.html) recebe um ID de banco de identidades, chama `cognitoIdentity:GetId` na primeira invocação e, em seguida, chama `fromCognitoIdentity`. As invocações subsequentes da última não invocam novamente o GetId. 

   O provedor implementa o “Fluxo simplificado” descrito no [Guia do Desenvolvedor do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html). O “Classic Flow”, que envolve chamar `cognito:GetOpenIdToken` e depois chamar`sts:AssumeRoleWithWebIdentity`, *não* é compatível. Abra uma [solicitação de recurso](https://github.com/aws/aws-sdk-js-v3/issues/new?assignees=&labels=feature-request&template=---feature-request.md&title=), se precisar. 

  ```
  // fromCognitoIdentityPool example
  import { fromCognitoIdentityPool } from "@aws-sdk/credential-providers"; // ES6 import
  // const { fromCognitoIdentityPool } = require("@aws-sdk/credential-providers"); // CommonJS import
  
  const client = new FooClient({
    region: "us-east-1",
    credentials: fromCognitoIdentityPool({
      clientConfig: cognitoIdentityClientConfig, // Optional
      identityPoolId: "us-east-1:1699ebc0-7900-4099-b910-2df94f52a030",
      customRoleArn: "arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity", // Optional
      logins: {
        // Optional
        "graph.facebook.com": "FBTOKEN",
        "www.amazon.com": "AMAZONTOKEN",
        "api.twitter.com": "TWITTERTOKEN",
      },
    }),
  });
  ```

  ```
  // fromCognitoIdentity example
  import { fromCognitoIdentity } from "@aws-sdk/credential-providers"; // ES6 import
  // const { fromCognitoIdentity } = require("@aws-sdk/credential-provider-cognito-identity"); // CommonJS import
  
  const client = new FooClient({
    region: "us-east-1",
    credentials: fromCognitoIdentity({
      clientConfig: cognitoIdentityClientConfig, // Optional
      identityId: "us-east-1:128d0a74-c82f-4553-916d-90053e4a8b0f",
      customRoleArn: "arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity", // Optional
      logins: {
        // Optional
        "graph.facebook.com": "FBTOKEN",
        "www.amazon.com": "AMAZONTOKEN",
        "api.twitter.com": "TWITTERTOKEN",
      },
    }),
  });
  ```

## Credencial de metadados do Amazon EC2 (IMDS)
<a name="ec2-metadataimds-credential"></a>

 Representa credenciais recebidas do serviço de metadados de uma instância do Amazon EC2. 
+  **v2**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html) 
+  **v3**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromcontainermetadata-and-frominstancemetadata](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromcontainermetadata-and-frominstancemetadata). Cria um provedor de credenciais que pegará credenciais do serviço de metadados da instância do Amazon EC2. 

  ```
  import { fromInstanceMetadata } from "@aws-sdk/credential-providers"; // ES6 import
  // const { fromInstanceMetadata } = require("@aws-sdk/credential-providers"); // CommonJS import
  
  const client = new FooClient({
    credentials: fromInstanceMetadata({
      maxRetries: 3, // Optional
      timeout: 0, // Optional
    }),
  });
  ```

## Credenciais do Amazon ECS
<a name="ecs-credentials"></a>

 Representa as credenciais recebidas do URL especificado. Esse provedor solicitará credenciais temporárias do URI especificado por `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` ou pela variável de ambiente `AWS_CONTAINER_CREDENTIALS_FULL_URI`. 
+  **v2**: `ECSCredentials` ou [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/RemoteCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/RemoteCredentials.html) 
+  **v3**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromcontainermetadata-and-frominstancemetadata](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromcontainermetadata-and-frominstancemetadata). Cria um provedor de credenciais que pegará credenciais do serviço de metadados do contêiner do Amazon ECS. 

  ```
  import { fromContainerMetadata } from "@aws-sdk/credential-providers"; // ES6 import
  
  const client = new FooClient({
    credentials: fromContainerMetadata({
      maxRetries: 3, // Optional
      timeout: 0, // Optional
    }),
  });
  ```

## Credenciais do sistema de arquivos
<a name="file-system-credentials"></a>
+ **v2**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/FileSystemCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/FileSystemCredentials.html). Representa credenciais de um arquivo JSON no disco.
+  **v3**: **obsoleto**. Você pode ler explicitamente o arquivo JSON e fornecer ao cliente. Abra uma [solicitação de recurso](https://github.com/aws/aws-sdk-js-v3/issues/new?assignees=&labels=feature-request&template=---feature-request.md&title=), se precisar. 

## Provedor de credenciais SAML
<a name="saml-credential-provider"></a>
+  **v2**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SAMLCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SAMLCredentials.html) representa as credenciais recuperadas do suporte ao STS SAML. 
+  **v3**: **não disponível**. Abra uma [solicitação de recurso](https://github.com/aws/aws-sdk-js-v3/issues/new?assignees=&labels=feature-request&template=---feature-request.md&title=), se precisar. 

## Credenciais do arquivo de credenciais compartilhadas
<a name="shared-credential-file-credentials"></a>

 Carrega as credenciais do arquivo de credenciais compartilhadas (usando `~/.aws/credentials` como padrão ou definido pela variável de ambiente `AWS_SHARED_CREDENTIALS_FILE`). Esse arquivo é compatível com diferentes SDKs e ferramentas da AWS. Você pode consultar o [documento de arquivos de configuração e credenciais compartilhadas](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) para obter mais informações. 
+  **v2**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SharedIniFileCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SharedIniFileCredentials.html) 
+  **v3**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_credential_providers.html) 

  ```
  import { fromIni } from "@aws-sdk/credential-providers";
  // const { fromIni } from("@aws-sdk/credential-providers");
  
  const client = new FooClient({
    credentials: fromIni({
      configFilepath: "~/.aws/config", // Optional
      filepath: "~/.aws/credentials", // Optional
      mfaCodeProvider: async (mfaSerial) => {
        // implement a pop-up asking for MFA code
        return "some_code";
      }, // Optional
      profile: "default", // Optional
      clientConfig: { region }, // Optional
    }),
  });
  ```

## Credenciais de identidade na web
<a name="web-identity-credentials"></a>

 Recupera credenciais usando o token OIDC de um arquivo no disco. Comumente usado no Amazon EKS. 
+  **v2**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/TokenFileWebIdentityCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/TokenFileWebIdentityCredentials.html) 
+  **v3**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromtokenfile](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromtokenfile) 

  ```
  import { fromTokenFile } from "@aws-sdk/credential-providers"; // ES6 import
  // const { fromTokenFile } from("@aws-sdk/credential-providers"); // CommonJS import
  
  const client = new FooClient({
    credentials: fromTokenFile({
      // Optional. If skipped, read from `AWS_ROLE_ARN` environmental variable
      roleArn: "arn:xxxx",
      // Optional. If skipped, read from `AWS_ROLE_SESSION_NAME` environmental variable
      roleSessionName: "session:a",
      // Optional. STS client config to make the assume role request.
      clientConfig: { region },
    }),
  });
  ```

## Credenciais de federação de identidades web
<a name="web-identity-federation-credentials"></a>

 Recupera credenciais do suporte da federação de identidade web do STS. 
+  **v2**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/WebIdentityCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/WebIdentityCredentials.html) 
+  **v3**: [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromwebtoken](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromwebtoken) 

  ```
  import { fromWebToken } from "@aws-sdk/credential-providers"; // ES6 import
  // const { fromWebToken } from("@aws-sdk/credential-providers"); // CommonJS import
  
  const client = new FooClient({
    credentials: fromWebToken({
      // Optional. If skipped, read from `AWS_ROLE_ARN` environmental variable
      roleArn: "arn:xxxx",
      // Optional. If skipped, read from `AWS_ROLE_SESSION_NAME` environmental variable
      roleSessionName: "session:a",
      // Optional. STS client config to make the assume role request.
      clientConfig: { region },
    }),
  });
  ```

# Considerações sobre o Amazon S3
<a name="migrate-s3"></a>

## Upload fracionado do Amazon S3
<a name="s3-multipart-upload"></a>

 Na v2, o cliente do Amazon S3 contém uma operação [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property) compatível com o upload de objetos grandes [com o recurso de upload fracionado oferecido pelo Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html). 

 O pacote [https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage) está disponível na v3. Ele é compatível com todos os recursos oferecidos na operação `upload()` da v2 e oferece suporte tanto ao Node.js quanto ao runtime dos navegadores. 

## URL pré-assinado do Amazon S3
<a name="s3-presigned-url"></a>

 Na v2, o cliente do Amazon S3 contém as operações [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property)e [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrlPromise-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrlPromise-property) para gerar um URL que os usuários podem usar para fazer upload ou baixar objetos do Amazon S3. 

 O pacote [https://github.com/aws/aws-sdk-js-v3/tree/main/packages/s3-request-presigner](https://github.com/aws/aws-sdk-js-v3/tree/main/packages/s3-request-presigner) está disponível na v3. Este pacote contém as funções para as operações `getSignedUrl()` e ` getSignedUrlPromise()`. Esta [publicação do blog](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) discute os detalhes desse pacote.

## Redirecionamentos de região no Amazon S3
<a name="s3-global-client-region-redirects"></a>

Se uma região incorreta for passada ao cliente do Amazon S3 e um erro subsequente ` PermanentRedirect` (status 301) for gerado, o cliente do Amazon S3 na v3 oferecerá suporte a redirecionamentos de região (anteriormente conhecido como cliente global do Amazon S3 na v2). Você pode usar o sinalizador [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-middleware-sdk-s3/Interface/S3InputConfig/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-middleware-sdk-s3/Interface/S3InputConfig/) na configuração do cliente para fazer com que o cliente do Amazon S3 siga os redirecionamentos de região e ofereça suporte a sua função como cliente global.

**nota**  
É importante ressaltar que este recurso pode resultar em latência adicional, pois as solicitações com falha são repetidas com uma região corrigida ao receber um erro `PermanentRedirect` com status 301. Esse recurso só deve ser usado caso a região dos buckets não for conhecida com antecedência. 

## Streaming e respostas armazenadas em buffer do Amazon S3
<a name="amazon-s3-stream-vs-buffer"></a>

 A v3 do SDK opta por não armazenar respostas potencialmente grandes. Este é um comportamento comum encontrado na operação `GetObject` do Amazon S3, que retorna um `Buffer` na v2, mas um `Stream` na v3. 

 Para o Node.js, é preciso consumir o fluxo ou a coleta de resíduos do cliente ou de seu manipulador de solicitações para manter as conexões abertas para novos tráfegos liberando soquetes. 

```
// v2
const get = await s3.getObject({ ... }).promise(); // this buffers consumes the stream already.
```

```
// v3, consume the stream to free the socket
const get = await s3.getObject({ ... }); // object .Body has unconsumed stream
const str = await get.Body.transformToString(); // consumes the stream

// other ways to consume the stream include writing it to a file,
// passing it to another consumer like an upload, or buffering to
// a string or byte array.
```

 Para obter mais informações, consulte a seção sobre [exaustão de soquetes](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md#request-handler-requesthandler). 

# Cliente de documento do DynamoDB
<a name="migrate-dynamodb-doc-client"></a>

## Uso básico do cliente de documento do DynamoDB na v3
<a name="basic-usage-of-dynamodb-document-client-in-v3"></a>
+  Na v2, você pode usar a [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html)classe para chamar o APIs DynamoDB com tipos JavaScript nativos, como Array, Number e Object. Isso simplifica o trabalho com itens no Amazon DynamoDB, abstraindo a noção de valores de atributo. 
+  Na v3, o cliente [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_lib_dynamodb.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_lib_dynamodb.html) equivalente está disponível. É semelhante aos clientes de serviço normais da v3 do SDK, com a diferença de que usa um cliente básico do DynamoDB no construtor. 

 Exemplo: 

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; // ES6 import
// const { DynamoDBClient } = require("@aws-sdk/client-dynamodb"); // CommonJS import
import { DynamoDBDocumentClient, PutCommand } from "@aws-sdk/lib-dynamodb"; // ES6 import
// const { DynamoDBDocumentClient, PutCommand } = require("@aws-sdk/lib-dynamodb"); // CommonJS import

// Bare-bones DynamoDB Client
const client = new DynamoDBClient({});

// Bare-bones document client
const ddbDocClient = DynamoDBDocumentClient.from(client); // client is DynamoDB client

await ddbDocClient.send(
  new PutCommand({
    TableName,
    Item: {
      id: "1",
      content: "content from DynamoDBDocumentClient",
    },
  })
);
```

## Valores `Undefined` no momento do marshalling
<a name="undefined-values-in-when-marshalling"></a>
+  Na v2, os valores `undefined` nos objetos foram automaticamente omitidos durante o processo de mashalling para o DynamoDB. 
+  Na v3, o comportamento padrão de marshalling em `@aws-sdk/lib-dynamodb` mudou: objetos com valores `undefined` não são mais omitidos. Para se alinhar à funcionalidade da v2, os desenvolvedores devem definir explicitamente `removeUndefinedValues` como `true` em `marshallOptions` do documento de cliente do DynamoDB. 

 Exemplo: 

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { DynamoDBDocumentClient, PutCommand } from "@aws-sdk/lib-dynamodb";

const client = new DynamoDBClient({});

// The DynamoDBDocumentClient is configured to handle undefined values properly
const ddbDocClient = DynamoDBDocumentClient.from(client, {
  marshallOptions: {
    removeUndefinedValues: true
  }
});

await ddbDocClient.send(
  new PutCommand({
    TableName,
    Item: {
      id: "123",
      content: undefined // This value will be automatically omitted.
      array: [1, undefined], // The undefined value will be automatically omitted.
      map: { key: undefined }, // The "key" will be automatically omitted.
      set: new Set([1, undefined]), // The undefined value will be automatically omitted.
    };
  })
);
```

 Consulte mais exemplos e configurações no [pacote README](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-dynamodb/README.md). 

# Waiters e signatários
<a name="migrate-waiters-signers"></a>

Esta página descreve o uso de waiters e signatários no AWS SDK para JavaScript v3.

## Waiters
<a name="waiters"></a>

 Na v2, todos os waiters estão vinculados à classe do cliente de serviço e é preciso especificar na entrada do waiter qual estado projetado o cliente estará esperando. Por exemplo, você precisa chamar [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#bucketExists-waiter](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#bucketExists-waiter) para esperar que um bucket recém-criado esteja pronto.

 Na v3, não é necessário importar waiters se sua aplicação não precisar de um. Além disso, você pode importar somente o waiter necessário para aguardar o estado desejado específico. Assim, você pode reduzir o tamanho do pacote e melhorar o desempenho. Veja um exemplo de como esperar que o bucket esteja pronto após a criação: 

```
import { S3Client, CreateBucketCommand, waitUntilBucketExists } from "@aws-sdk/client-s3"; // ES6 import
// const { S3Client, CreateBucketCommand, waitUntilBucketExists } = require("@aws-sdk/client-s3"); // CommonJS import

const Bucket = "BUCKET_NAME";
const client = new S3Client({ region: "REGION" });
const command = new CreateBucketCommand({ Bucket });

await client.send(command);
await waitUntilBucketExists({ client, maxWaitTime: 60 }, { Bucket });
```

 Consulte tudo sobre como configurar waiters na [publicação do blog sobre waiters](https://aws.amazon.com/blogs/developer/waiters-in-modular-aws-sdk-for-javascript/) no AWS SDK para JavaScript v3.

## Signatário do Amazon CloudFront
<a name="cloudfront-signer"></a>

 Na v2, você pode assinar a solicitação para acessar distribuições restritas do Amazon CloudFront com [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront/Signer.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront/Signer.html).

 A v3 conta com os mesmos utilitários fornecidos no pacote [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_cloudfront_signer.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_cloudfront_signer.html).

## Signatário do Amazon RDS
<a name="rds-signer"></a>

 Na v2, você pode gerar o token de autenticação para um banco de dados do Amazon RDS usando [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/RDS/Signer.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/RDS/Signer.html). 

 Já na v3, a classe de utilitário similar está disponível no pacote [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_rds_signer.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_rds_signer.html).

## Signatário do Amazon Polly
<a name="polly-signer"></a>

 Na v2, você pode gerar um URL assinado para discurso sintetizado pelo serviço Amazon Polly com [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html).

 Já na v3, a função de utilitário similar está disponível no pacote [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_polly_request_presigner.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_polly_request_presigner.html). 

# Observações sobre clientes de serviços específicos
<a name="migrate-service-client-notes"></a>

## AWS Lambda
<a name="aws-lambda-notes"></a>

 O tipo de resposta das invocações do Lambda difere entre as versões 2 e 3. 

```
// v2
import { Lambda } from "@aws-sdk/client-lambda";
import AWS from "aws-sdk";

const lambda = new AWS.Lambda({ REGION });
const invoke = await lambda.invoke({
  FunctionName: "echo",
  Payload: JSON.stringify({ message: "hello" }),
}).promise();

// in v2, Lambda::invoke::Payload is automatically converted to string via a
// specific code customization.
const payloadIsString = typeof invoke.Payload === "string";
console.log("Invoke response payload type is string:", payloadIsString);

const payloadObject = JSON.parse(invoke.Payload);
console.log("Invoke response object", payloadObject);
```

```
// v3
const lambda = new Lambda({ REGION });
const invoke = await lambda.invoke({
  FunctionName: "echo",
  Payload: JSON.stringify({ message: "hello" }),
});

// in v3, Lambda::invoke::Payload is not automatically converted to a string.
// This is to reduce the number of customizations that create inconsistent behaviors.
const payloadIsByteArray = invoke.Payload instanceof Uint8Array;
console.log("Invoke response payload type is Uint8Array:", payloadIsByteArray);

// To maintain the old functionality, only one additional method call is needed:
// v3 adds a method to the Uint8Array called transformToString.
const payloadObject = JSON.parse(invoke.Payload.transformToString());
console.log("Invoke response object", payloadObject);
```

## Amazon SQS
<a name="amazon-sqs-notes"></a>

### Soma de verificação MD5
<a name="md5-checksum"></a>

 Para ignorar o cálculo das somas de verificação MD5 dos corpos das mensagens, defina `md5` como *false* no objeto de configuração. Caso contrário, o SDK, por padrão, calculará a soma de verificação para o envio de mensagens e validará a soma de verificação para mensagens recuperadas.

```
// Example: Skip MD5 checksum in Amazon SQS
import { SQS } from "@aws-sdk/client-sqs";

new SQS({
  md5: false // note: only available in v3.547.0 and higher
});
```

Na v2, ao usar um `QueueUrl` personalizado em operações do Amazon SQS que tem ele como parâmetro de entrada, era possível fornecer um `QueueUrl` personalizado que substituía o endpoint padrão do cliente do Amazon SQS. 

### Mensagens multirregionais
<a name="multi-region-messages"></a>

 Na v3, é preciso usar um cliente por região. A região da AWS deve ser inicializada no nível do cliente e não deve ser alterada entre as solicitações. 

```
import { SQS } from "@aws-sdk/client-sqs";

const sqsClients = {
  "us-east-1": new SQS({ region: "us-east-1" }),
  "us-west-2": new SQS({ region: "us-west-2" }),
};

const queues = [
  { region: "us-east-1", url: "https://sqs.us-east-1.amazonaws.com/{AWS_ACCOUNT}/MyQueue" },
  { region: "us-west-2", url: "https://sqs.us-west-2.amazonaws.com/{AWS_ACCOUNT}/MyOtherQueue" },
];

for (const { region, url } of queues) {
  const params = {
    MessageBody: "Hello",
    QueueUrl: url,
  };
  await sqsClients[region].sendMessage(params);
}
```

### Endpoint personalizado
<a name="custom-endpoint"></a>

 Na v3, ao usar um endpoint personalizado, ou seja, um diferente dos endpoints públicos padrão do Amazon SQS, é necessário sempre definir o endpoint no cliente do Amazon SQS, bem como o campo ` QueueUrl`. 

```
import { SQS } from "@aws-sdk/client-sqs";

const sqs = new SQS({
  // client endpoint should be specified in v3 when not the default public SQS endpoint for your region.
  // This is required for versions <= v3.506.0
  // This is optional but recommended for versions >= v3.507.0 (a warning will be emitted)
  endpoint: "https://my-custom-endpoint:8000/",
});

await sqs.sendMessage({
  QueueUrl: "https://my-custom-endpoint:8000/1234567/MyQueue",
  Message: "hello",
});
```

 Se você não estiver usando um endpoint personalizado, não precisará definir o `endpoint` no cliente.

```
import { SQS } from "@aws-sdk/client-sqs";

const sqs = new SQS({
  region: "us-west-2",
});

await sqs.sendMessage({
  QueueUrl: "https://sqs.us-west-2.amazonaws.com/1234567/MyQueue",
  Message: "hello",
});
```

# Documentação complementar
<a name="migrate-supp-docs"></a>

A tabela a seguir inclui links para documentação adicional que ajudará você a usar e entender o AWS SDK para JavaScript (v3).


****  

| Name | Observações | 
| --- | --- | 
| [Clientes do SDK](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md) | Informações sobre a inicialização de um cliente do SDK e parâmetros comuns configuráveis do construtor. | 
| [Observações de atualização (2.x para 3.x)](https://github.com/aws/aws-sdk-js-v3/blob/main/UPGRADING.md) | Informações sobre a atualização do AWS SDK para JavaScript (v2). | 
| [Usando o AWS SDK para JavaScript (v3) em runtimes do Node.js do AWS Lambda](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/AWS_LAMBDA.md) | Práticas recomendadas para trabalhar no AWS Lambda usando o AWS SDK para JavaScript (v3). | 
| [Desempenho](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/performance/README.md) | Informações sobre como a equipe do AWS SDK otimizou o desempenho do SDK, além de dicas para configurar o SDK para ser executado com eficiência. | 
| [TypeScript](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/TYPESCRIPT.md) | Dicas e perguntas frequentes sobre TypeScript relacionadas ao AWS SDK para JavaScript (v3). | 
| [Tratamento de erros](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/ERROR_HANDLING.md) | Dicas para lidar com erros relacionados ao AWS SDK para JavaScript (v3). | 
| [Práticas efetivas](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/EFFECTIVE_PRACTICES.md) | Recomendações gerais para usar o AWS SDK para JavaScript (v3). | 