

 La [AWS SDK per JavaScript V3 API Reference Guide](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) descrive in dettaglio tutte le operazioni API per la AWS SDK per JavaScript versione 3 (V3). 

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Configurare l'SDK per JavaScript
<a name="configuring-the-jssdk"></a>

Prima di utilizzare l'SDK per JavaScript richiamare i servizi Web tramite l'API, è necessario configurare l'SDK. Come minimo, devi configurare:
+ La AWS regione in cui richiederai i servizi
+ In che modo il codice si autentica con AWS

Oltre a queste impostazioni, potresti dover configurare anche le autorizzazioni per le tue risorse. AWS Ad esempio, puoi limitare l'accesso a un bucket Amazon S3 o limitare una tabella Amazon DynamoDB per l'accesso in sola lettura.

La [AWS SDKs and Tools Reference Guide](https://docs.aws.amazon.com/sdkref/latest/guide/) contiene anche impostazioni, funzionalità e altri concetti fondamentali comuni a molti di essi. AWS SDKs 

Gli argomenti di questa sezione descrivono i modi per configurare l'SDK JavaScript per Node.js e come JavaScript eseguirlo in un browser Web.

**Topics**
+ [Configurazione per servizio](global-config-object.md)
+ [Imposta la regione AWS](setting-region.md)
+ [Imposta le credenziali](setting-credentials.md)
+ [Considerazioni su Node.js](node-js-considerations.md)
+ [Considerazioni sullo script di browser](browser-js-considerations.md)

# Configurazione per servizio
<a name="global-config-object"></a>

È possibile configurare l'SDK passando le informazioni di configurazione a un oggetto di servizio.

La configurazione a livello di servizio offre un controllo significativo sui singoli servizi, consentendo di aggiornare la configurazione dei singoli oggetti di servizio quando le esigenze variano rispetto alla configurazione predefinita.

**Nota**  
Nella versione 2.x della configurazione del AWS SDK per JavaScript servizio poteva essere passata ai singoli costruttori di client. Tuttavia, queste configurazioni verrebbero prima unite automaticamente in una copia della configurazione SDK globale. `AWS.config`  
Inoltre, richiamava `AWS.config.update({/* params *})` solo la configurazione aggiornata per i client di servizio istanziati dopo la chiamata di aggiornamento, non per i client esistenti.  
Questo comportamento era spesso fonte di confusione e rendeva difficile l'aggiunta di una configurazione all'oggetto globale che influiva solo su un sottoinsieme di client di servizio in modo compatibile con le versioni precedenti. Nella versione 3, non esiste più una configurazione globale gestita dall'SDK. La configurazione deve essere passata a ogni client di servizio istanziato. È ancora possibile condividere la stessa configurazione tra più client, ma tale configurazione non verrà unita automaticamente a uno stato globale.

## Imposta la configurazione per servizio
<a name="service-specific-configuration"></a>

Ogni servizio utilizzato nell'SDK per JavaScript è accessibile tramite un oggetto di servizio che fa parte dell'API per quel servizio. Ad esempio, per accedere al servizio Amazon S3, crei l'oggetto di servizio Amazon S3. È possibile specificare le impostazioni di configurazione specifiche per un servizio come parte del costruttore per quell'oggetto di servizio. 

Ad esempio, se devi accedere agli oggetti Amazon EC2 in più AWS regioni, crea un oggetto di servizio Amazon EC2 per ogni regione e imposta di conseguenza la configurazione della regione di ciascun oggetto di servizio.

```
var ec2_regionA = new EC2({region: 'ap-southeast-2', maxAttempts: 15});
var ec2_regionB = new EC2({region: 'us-west-2', maxAttempts: 15});
```

# Imposta la regione AWS
<a name="setting-region"></a>

Una AWS regione è un insieme denominato di AWS risorse nella stessa area geografica. Un esempio di regione è `us-east-1` la regione degli Stati Uniti orientali (Virginia settentrionale). Quando si crea un client di servizio nell'SDK, si specifica una regione in JavaScript modo che l'SDK acceda al servizio in quella regione. Alcuni servizi sono disponibili solo in Regioni specifiche.

L'SDK per JavaScript non seleziona una regione per impostazione predefinita. Tuttavia, puoi impostare la AWS regione utilizzando una variabile di ambiente o un `config` file di configurazione condiviso.

## In un costruttore di classi client
<a name="setting-region-constructor"></a>

Quando si crea un'istanza di un oggetto servizio, è possibile specificare la AWS regione per quella risorsa come parte del costruttore della classe client, come illustrato di seguito.

```
const s3Client = new S3.S3Client({region: 'us-west-2'});
```

## Usa una variabile di ambiente
<a name="setting-region-environment-variable"></a>

È possibile impostare la regione utilizzando la variabile di ambiente `AWS_REGION`. Se definisci questa variabile, l'SDK for la JavaScript legge e la usa.

## Usa un file di configurazione condiviso
<a name="setting-region-config-file"></a>

Proprio come il file delle credenziali condivise consente di archiviare le credenziali per l'utilizzo da parte dell'SDK, è possibile conservare la AWS regione e altre impostazioni di configurazione in un file condiviso denominato `config` SDK da utilizzare. Se la variabile di `AWS_SDK_LOAD_CONFIG` ambiente è impostata su un valore vero, l'SDK cerca JavaScript automaticamente un file al momento del caricamento. `config` Il percorso di salvataggio del file `config` varia a seconda del sistema operativo:
+ Utenti Linux, macOS o Unix - `~/.aws/config`
+ Utenti Windows - `C:\Users\USER_NAME\.aws\config`

Se non si dispone già di un file condiviso `config`, è possibile crearne uno nella directory designata. In questo esempio il file `config` imposta sia la regione sia il formato di output.

```
[default]
   region=us-west-2
   output=json
```

Per ulteriori informazioni sull'utilizzo di `credentials` file `config` e file condivisi, consulta File di [configurazione e credenziali condivisi nella Guida](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) di *riferimento agli strumenti AWS SDKs e agli strumenti*.

## Ordine di precedenza per l'impostazione della regione
<a name="setting-region-order-of-precedence"></a>

Di seguito è riportato l'ordine di precedenza per l'impostazione della regione:

1. Se una regione è passata a un costruttore della classe client, viene utilizzata quella regione.

1. Se una regione è impostata nella variabile di ambiente, viene utilizzata quella regione.

1. Altrimenti, viene utilizzata la regione definita nel file di configurazione condiviso.

# Imposta le credenziali
<a name="setting-credentials"></a>

AWS utilizza le credenziali per identificare chi sta chiamando i servizi e se è consentito l'accesso alle risorse richieste. 

Sia che venga eseguito in un browser Web o in un server Node.js, il JavaScript codice deve ottenere credenziali valide prima di poter accedere ai servizi tramite l'API. Le credenziali possono essere impostate per servizio, passando le credenziali direttamente a un oggetto di servizio.

Esistono diversi modi per impostare le credenziali che differiscono tra Node.js e JavaScript nei browser Web. Gli argomenti in questa sezione descrivono come impostare le credenziali in Node.js o nei browser Web. In ogni caso, le opzioni sono riportate in ordine consigliato.

## Procedure consigliate per le credenziali
<a name="credentials-best-practices"></a>

L'impostazione corretta delle credenziali garantisce che l'applicazione o lo script di browser possano accedere ai servizi e alle risorse necessari, riducendo al minimo l'esposizione a problemi di sicurezza che possono inficiare le applicazioni mission critical o compromettere i dati sensibili.

Un importante principio da applicare durante l'impostazione delle credenziali è concedere sempre i privilegi minimi necessari per l'attività. È più sicuro fornire le autorizzazioni minime per le risorse e aggiungere ulteriori autorizzazioni in base alle esigenze, invece di fornire autorizzazioni che superano il privilegio minimo e, di conseguenza, dover risolvere i problemi di sicurezza scoperti più tardi. Ad esempio, a meno che non sia necessario leggere e scrivere singole risorse, come oggetti in un bucket Amazon S3 o una tabella DynamoDB, imposta tali autorizzazioni in modalità di sola lettura.

*Per ulteriori informazioni sulla concessione del privilegio minimo, consulta la sezione [Concedi il minimo privilegio dell'argomento Best Practices](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) nella IAM User Guide.*

**Topics**
+ [Procedure consigliate per le credenziali](#credentials-best-practices)
+ [Impostare le credenziali in Node.js](setting-credentials-node.md)
+ [Impostare le credenziali in un browser Web](setting-credentials-browser.md)

# Impostare le credenziali in Node.js
<a name="setting-credentials-node"></a>

Consigliamo ai nuovi utenti che si stanno sviluppando localmente e che non dispongono di un metodo di autenticazione da parte del datore di lavoro di effettuare la configurazione AWS IAM Identity Center. Per ulteriori informazioni, consulta [Autenticazione SDK con AWS](getting-your-credentials.md).

Vi sono diversi modi su Node.js per fornire le credenziali all'SDK. Alcuni di questi sono più sicuri e altri offrono più comodità durante lo sviluppo di un'applicazione. Quando ottenete le credenziali in Node.js, fate attenzione a non affidarvi a più di una fonte, ad esempio una variabile di ambiente e un file JSON che caricate. È possibile modificare le autorizzazioni sotto cui il codice viene eseguito senza realizzare che la modifica è avvenuta.

AWS SDK per JavaScript V3 fornisce una catena di provider di credenziali predefinita in Node.js, quindi non è necessario fornire un provider di credenziali in modo esplicito. La [catena di provider di credenziali](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain) predefinita tenta di risolvere le credenziali da una varietà di fonti diverse con una determinata precedenza, finché non viene restituita una credenziale da una delle fonti. [Puoi trovare la catena di fornitori di credenziali per SDK per V3 qui. JavaScript ](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromnodeproviderchain)

## Catena di fornitori di credenziali
<a name="credchain"></a>

Tutti SDKs hanno una serie di luoghi (o fonti) che controllano per ottenere credenziali valide da utilizzare per effettuare una richiesta a un. Servizio AWS Dopo aver trovato credenziali valide, la ricerca viene interrotta. Questa ricerca sistematica è chiamata catena di fornitori di credenziali predefinita. 

Per ogni fase della catena, esistono diversi modi per impostare i valori. L'impostazione dei valori direttamente nel codice ha sempre la precedenza, seguita dall'impostazione come variabili di ambiente e quindi nel AWS `config` file condiviso. Per ulteriori informazioni, vedete la [precedenza delle impostazioni nella *AWS SDKs and Tools Reference*](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#precedenceOfSettings) Guide. 

La *AWS SDKs and Tools Reference Guide* contiene informazioni sulle impostazioni di configurazione SDK utilizzate da tutti AWS SDKs e da. AWS CLI Per ulteriori informazioni su come configurare l'SDK tramite il AWS `config` file condiviso, consulta File di [configurazione e credenziali condivisi](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html). [Per ulteriori informazioni su come configurare l'SDK tramite l'impostazione delle variabili di ambiente, consulta Supporto per le variabili di ambiente.](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html)

Con cui eseguire l'autenticazione AWS, AWS SDK per JavaScript controlla i fornitori di credenziali nell'ordine elencato nella tabella seguente.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html)

Se hai seguito l'approccio consigliato per i nuovi utenti per iniziare, configurerai AWS IAM Identity Center l'autenticazione durante l'argomento [Autenticazione SDK con AWS](getting-your-credentials.md) Guida introduttiva. Altri metodi di autenticazione sono utili per diverse situazioni. Per evitare rischi per la sicurezza, consigliamo di utilizzare sempre credenziali a breve termine. Per altre procedure relative ai metodi di autenticazione, consulta [Autenticazione e accesso](https://docs.aws.amazon.com/sdkref/latest/guide/access.html) nella *Guida di riferimento agli strumenti AWS SDKs e agli strumenti*.

Gli argomenti in questa sezione descrivono come caricare le credenziali su Node.js.

**Topics**
+ [Catena di fornitori di credenziali](#credchain)
+ [Carica le credenziali in Node.js dai ruoli IAM per Amazon EC2](loading-node-credentials-iam.md)
+ [Caricare le credenziali per una funzione Lambda di Node.js](loading-node-credentials-lambda.md)

# Carica le credenziali in Node.js dai ruoli IAM per Amazon EC2
<a name="loading-node-credentials-iam"></a>

Se esegui l'applicazione Node.js su un'istanza Amazon EC2, puoi sfruttare i ruoli IAM per Amazon EC2 per fornire automaticamente le credenziali all'istanza. Se configuri l'istanza per utilizzare i ruoli IAM, l'SDK seleziona automaticamente le credenziali IAM per l'applicazione, eliminando la necessità di fornire manualmente le credenziali.

Per ulteriori informazioni sull'aggiunta di ruoli IAM a un'istanza Amazon EC2, consulta [Ruoli IAM per Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html).

# Caricare le credenziali per una funzione Lambda di Node.js
<a name="loading-node-credentials-lambda"></a>

Quando si crea una AWS Lambda funzione, è necessario creare un ruolo IAM speciale con il permesso di eseguire la funzione. Questo ruolo si chiama *ruolo di esecuzione*. Quando configuri una funzione Lambda, devi specificare il ruolo IAM che hai creato come ruolo di esecuzione corrispondente.

Il ruolo di esecuzione fornisce alla funzione Lambda le credenziali necessarie per eseguire e richiamare altri servizi Web. Di conseguenza, non è necessario fornire le credenziali per il codice Node.js scritto all'interno di una funzione Lambda.

*Per ulteriori informazioni sulla creazione di un ruolo di esecuzione Lambda, consulta [Manage permissions: Using an IAM role (execution role)](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role) nella Developer Guide.AWS Lambda *

# Impostare le credenziali in un browser Web
<a name="setting-credentials-browser"></a>

Vi sono diversi modi per fornire le credenziali all'SDK dagli script di browser. Alcuni di questi sono più sicuri e altri offrono più comodità durante lo sviluppo di uno script.

 Ecco i modi in cui puoi fornire le tue credenziali, in ordine di raccomandazione:

1. Utilizzo di Amazon Cognito Identity per autenticare gli utenti e fornire credenziali

1. Utilizzo delle identità della federazione delle identità Web

**avvertimento**  
Non è consigliabile codificare le AWS credenziali negli script. Effettuare l'hard coding delle credenziali pone un rischio di esposizione dell'ID chiave di accesso e della chiave di accesso segreta.

**Topics**
+ [Usa Amazon Cognito Identity per autenticare gli utenti](loading-browser-credentials-cognito.md)

# Usa Amazon Cognito Identity per autenticare gli utenti
<a name="loading-browser-credentials-cognito"></a>

Il modo consigliato per ottenere AWS le credenziali per gli script del browser consiste nell'utilizzare il client di credenziali di Amazon Cognito Identity. `CognitoIdentityClient` Amazon Cognito consente l'autenticazione degli utenti tramite provider di identità di terze parti.

Per utilizzare Amazon Cognito Identity, devi prima creare un pool di identità nella console Amazon Cognito. Un pool di identità rappresenta il gruppo di identità che l'applicazione fornisce agli utenti. Le identità fornite agli utenti identificano in modo univoco ogni account utente. Le identità di Amazon Cognito non sono credenziali. Vengono scambiate con credenziali utilizzando il supporto per la federazione delle identità web in (). AWS Security Token Service AWS STS

Amazon Cognito ti aiuta a gestire l'astrazione delle identità tra più provider di identità. L'identità caricata viene quindi scambiata con le credenziali in AWS STS.

## Configurazione dell'oggetto credenziali di Amazon Cognito Identity
<a name="browser-cognito-configuration"></a>

Se non ne hai ancora creato uno, crea un pool di identità da utilizzare con gli script del browser nella console [Amazon Cognito](https://console.aws.amazon.com/cognito) prima di configurare il client Amazon Cognito. Crea e associa ruoli IAM autenticati e non autenticati per il tuo pool di identità. Per ulteriori informazioni, consulta [Tutorial: Creazione di un pool di identità](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-identity-pool.html) nella *Amazon Cognito Developer Guide*.

L'identità degli utenti non autenticati non viene verificata, il che rende questo ruolo appropriato per gli utenti ospiti della tua app o nei casi in cui non importa se la loro identità è stata verificata. Gli utenti autenticati accedono all'applicazione tramite un provider di identità di terza parte che verifica la loro identità. Assicurati di creare l'ambito delle autorizzazioni di risorse in modo appropriato per evitare che utenti non autenticati possano accedere a esse.

Dopo aver configurato un pool di identità, utilizza il `fromCognitoIdentityPool` metodo di `@aws-sdk/credential-providers` per recuperare le credenziali dal pool di identità. Nel seguente esempio di creazione di un client Amazon S3, sostituiscilo *AWS\$1REGION* con la regione e *IDENTITY\$1POOL\$1ID* con l'ID del pool di identità.

```
// Import required AWS SDK clients and command for Node.js
import {S3Client} from "@aws-sdk/client-s3";
import {fromCognitoIdentityPool} from "@aws-sdk/credential-providers";

const REGION = AWS_REGION;

const s3Client = new S3Client({
  region: REGION,
  credentials: fromCognitoIdentityPool({
    clientConfig: { region: REGION }, // Configure the underlying CognitoIdentityClient.
    identityPoolId: 'IDENTITY_POOL_ID',
    logins: {
            // Optional tokens, used for authenticated login.
        },
  })
});
```

La proprietà `logins` opzionale è una mappa di nomi di provider di identità ai token di identità per tali provider. Il modo in cui ottieni il token dal provider di identità dipende dal provider utilizzato. Ad esempio, se utilizzi un pool di utenti Amazon Cognito come provider di autenticazione, puoi utilizzare un metodo simile a quello riportato di seguito.

```
// Get the Amazon Cognito ID token for the user. 'getToken()' below.
let idToken = getToken();
let COGNITO_ID = "COGNITO_ID"; // 'COGNITO_ID' has the format 'cognito-idp.REGION.amazonaws.com/COGNITO_USER_POOL_ID'
let loginData = {
  [COGNITO_ID]: idToken,
};
const s3Client = new S3Client({
    region: REGION,
    credentials: fromCognitoIdentityPool({
    clientConfig: { region: REGION }, // Configure the underlying CognitoIdentityClient.
    identityPoolId: 'IDENTITY_POOL_ID',
    logins: loginData
  })
});

// Strips the token ID from the URL after authentication.
window.getToken = function () {
  var idtoken = window.location.href;
  var idtoken1 = idtoken.split("=")[1];
  var idtoken2 = idtoken1.split("&")[0];
  var idtoken3 = idtoken2.split("&")[0];
  return idtoken3;
};
```

## Trasforma gli utenti non autenticati in utenti autenticati
<a name="browser-switching-unauthenticated-users"></a>

Amazon Cognito supporta utenti autenticati e non autenticati. Gli utenti non autenticati ottengono l'accesso alle risorse anche se non sono connessi con un provider di identità. Tale livello di accesso è utile per visualizzare i contenuti agli utenti prima che effettuino l'accesso. Ogni utente non autenticato ha un'identità unica in Amazon Cognito anche se non è stato effettuato l'accesso e l'autenticazione individualmente.

### Utente inizialmente non autenticato
<a name="browser-initially-unauthenticated-user"></a>

Gli utenti in genere iniziano con il ruolo non autenticato, per cui è possibile impostare la proprietà delle credenziali dell'oggetto di configurazione senza una proprietà `logins`. In questo caso, le tue credenziali predefinite potrebbero essere le seguenti:

```
// Import the required AWS SDK per JavaScript v3 modules.                   
import {fromCognitoIdentityPool} from "@aws-sdk/credential-providers";
// Set the default credentials.
const creds = fromCognitoIdentityPool({
  identityPoolId: 'IDENTITY_POOL_ID',
  clientConfig: { region: REGION } // Configure the underlying CognitoIdentityClient.
});
```

### Cambio a utente autenticato
<a name="switch-to-authenticated"></a>

Quando un utente non autenticato accede a un provider di identità e disponi di un token, puoi passare da un utente non autenticato a uno autenticato chiamando una funzione personalizzata che aggiorna l'oggetto credenziali e aggiunge il token. `logins`

```
// Called when an identity provider has a token for a logged in user
function userLoggedIn(providerName, token) {
  creds.params.Logins = creds.params.logins || {};
  creds.params.Logins[providerName] = token;
                    
  // Expire credentials to refresh them on the next request
  creds.expired = true;
}
```

# Considerazioni su Node.js
<a name="node-js-considerations"></a>

Sebbene il codice Node.js lo sia JavaScript, l' AWS SDK per JavaScript utilizzo di Node.js può differire dall'utilizzo dell'SDK negli script del browser. Alcuni metodi API funzionano su Node.js ma non negli script di browser, e viceversa. E il corretto utilizzo di alcuni di APIs essi dipende dalla familiarità con i comuni schemi di codifica Node.js, come l'importazione e l'utilizzo di altri moduli Node.js come il modulo. `File System (fs)`

**Nota**  
AWS consiglia di utilizzare la versione Active LTS di Node.js per lo sviluppo.

## Utilizza i moduli Node.js integrati
<a name="node-common-modules"></a>

Node.js fornisce una raccolta di moduli integrati che è possibile utilizzare senza installazione. Per utilizzare questi moduli, è necessario creare un oggetto con il metodo `require` per specificare il nome del modulo. Ad esempio, per includere il modulo HTTP integrato, utilizza il seguente metodo.

```
import http from 'http';
```

Richiama i metodi del modulo come se fossero metodi di quell'oggetto. Ad esempio, qui c'è il codice per leggere un file HTML.

```
// include File System module
import fs from "fs"; 
// Invoke readFile method 
fs.readFile('index.html', function(err, data) {
  if (err) {
    throw err;
  } else {
    // Successful file read
  }
});
```

Per un elenco completo di tutti i moduli integrati forniti da Node.js, consultate la [documentazione di Node.js](https://nodejs.org/api/modules.html) sul sito Web Node.js.

## Usa i pacchetti npm
<a name="node-npm-packages"></a>

Oltre ai moduli integrati, puoi anche includere e incorporare codice di terze parti proveniente dal `npm` gestore di pacchetti Node.js. Si tratta di un repository di pacchetti Node.js open source e di un'interfaccia a riga di comando per installare i pacchetti. Per ulteriori informazioni `npm` e per un elenco dei pacchetti attualmente disponibili, vedere [ https://www.npmjs.com](https://www.npmjs.com). Puoi anche saperne di più sui pacchetti Node.js aggiuntivi che puoi usare [qui GitHub](https://github.com/sindresorhus/awesome-nodejs).

# Configurare MaxSockets in Node.js
<a name="node-configuring-maxsockets"></a>

Su Node.js, è possibile impostare il numero massimo di connessioni per origine. Se ` maxSockets` è impostato, il client HTTP di basso livello mette in coda le richieste e le assegna ai socket non appena diventano disponibili.

In questo modo, è possibile impostare un limite superiore per il numero di richieste simultanee per una determinata origine effettuate alla volta. Impostando un valore basso è possibile ridurre il numero di errori di timeout o throttling ricevuti. Tuttavia, potrebbe aumentare l'utilizzo della memoria, perché le richieste vengono accodate fino a quando un socket diventa disponibile.

L'esempio seguente mostra come impostare `maxSockets` un client DynamoDB.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import https from "https";    
let agent = new https.Agent({
  maxSockets: 25
});

let dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    requestTimeout: 3_000,
    httpsAgent: agent
  });
});
```

L'SDK for JavaScript utilizza `maxSockets` il valore 50 se non si fornisce un valore o un oggetto. `Agent` Se fornite un `Agent` oggetto, verrà utilizzato `maxSockets` il suo valore. Per ulteriori informazioni sull'impostazione `maxSockets` in Node.js, consultate la [documentazione di Node.js](https://nodejs.org/dist/latest/docs/api/http.html#http_agent_maxsockets).

A partire dalla versione 3.521.0 di AWS SDK per JavaScript, è possibile utilizzare la seguente sintassi [abbreviata](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md#new-in-v35210) per la configurazione. `requestHandler`

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

const client = new DynamoDBClient({
  requestHandler: {
    requestTimeout: 3_000,
    httpsAgent: { maxSockets: 25 },
  },
});
```

# Riutilizza le connessioni con keep-alive in Node.js
<a name="node-reusing-connections"></a>

L' HTTP/HTTPS agente Node.js predefinito crea una nuova connessione TCP per ogni nuova richiesta. *Per evitare il costo di stabilire una nuova connessione, AWS SDK per JavaScript riutilizza le connessioni TCP per impostazione predefinita.*

Per operazioni di breve durata, come le query Amazon DynamoDB, il sovraccarico di latenza dovuto alla configurazione di una connessione TCP potrebbe essere maggiore dell'operazione stessa. Inoltre, poiché la [crittografia a riposo di DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html) è integrata [AWS KMS](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)con, è possibile che si verifichino delle latenze dovute al database che devono ristabilire AWS KMS nuove voci della cache per ogni operazione. 

Se non si desidera riutilizzare le connessioni TCP, è possibile disattivare il riutilizzo di queste connessioni in tempo reale `keepAlive` su base client per servizio, come illustrato nell'esempio seguente per un client DynamoDB.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { Agent } from "https";

const dynamodbClient = new DynamoDBClient({
    requestHandler: new NodeHttpHandler({
        httpsAgent: new Agent({ keepAlive: false })
    })
});
```

Se `keepAlive` è abilitato, è anche possibile impostare il ritardo iniziale per i pacchetti TCP Keep-Alive con, che per impostazione predefinita è 1000 ms. `keepAliveMsecs` Vedere la [documentazione di Node.js](https://nodejs.org/api/http.html#new-agentoptions) per i dettagli.

# Configura i proxy per Node.js
<a name="node-configuring-proxies"></a>

Se non riesci a connetterti direttamente a Internet, l'SDK JavaScript supporta l'uso di proxy HTTP o HTTPS tramite un agente HTTP di terze parti.

[Per trovare un agente HTTP di terze parti, cerca «proxy HTTP» su npm.](https://www.npmjs.com/)

Per installare un agente proxy HTTP di terze parti, inserisci quanto segue al prompt dei comandi, *PROXY* dov'è il nome del `npm` pacchetto. 

```
npm install PROXY --save
```

Per utilizzare un proxy nell'applicazione, utilizzate la ` httpsAgent` proprietà `httpAgent` and, come illustrato nell'esempio seguente per un client DynamoDB. 

```
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { HttpsProxyAgent } from "hpagent";
const agent = new HttpsProxyAgent({ proxy: "http://internal.proxy.com" });
const dynamodbClient = new DynamoDBClient({
    requestHandler: new NodeHttpHandler({
        httpAgent: agent,
        httpsAgent: agent
    }),
});
```

**Nota**  
`httpAgent`non è uguale a`httpsAgent`, e poiché la maggior parte delle chiamate dal client sarà diretta a`https`, entrambe devono essere impostate.

# Registra i pacchetti di certificati in Node.js
<a name="node-registering-certs"></a>

Gli archivi di fiducia predefiniti per Node.js includono i certificati necessari per accedere ai AWS servizi. In alcuni casi, può essere preferibile includere solo uno specifico set di certificati.

In questo esempio, un determinato certificato su disco viene utilizzato per creare un ` https.Agent` che respinge le connessioni a meno che non venga fornito il certificato designato. Il nuovo file creato `https.Agent` viene quindi utilizzato dal client DynamoDB.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { Agent } from "https";
import { readFileSync } from "fs";
const certs = [readFileSync("/path/to/cert.pem")];
const agent = new Agent({
  rejectUnauthorized: true,
  ca: certs
});
const dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    httpAgent: agent,
    httpsAgent: agent
  })
});
```

# Considerazioni sullo script di browser
<a name="browser-js-considerations"></a>

I seguenti argomenti descrivono considerazioni speciali per l'utilizzo degli script nei browser. AWS SDK per JavaScript 

**Topics**
+ [Crea l'SDK per i browser](building-sdk-for-browsers.md)
+ [Cross-Origin Resource Sharing (CORS)](cors.md)
+ [Raggruppa le applicazioni con webpack](webpack.md)

# Crea l'SDK per i browser
<a name="building-sdk-for-browsers"></a>

A differenza dell'SDK per la JavaScript versione 2 (V2), V3 non viene fornito come JavaScript file con supporto incluso per un set di servizi predefinito. V3 consente invece di raggruppare e includere nel browser solo l'SDK per i JavaScript file necessari, riducendo il sovraccarico. Ti consigliamo di utilizzare Webpack per raggruppare l'SDK richiesto per JavaScript i file e tutti i pacchetti di terze parti aggiuntivi richiesti in un unico `Javascript` file e caricarlo negli script del browser utilizzando un tag. `<script>` Per ulteriori informazioni su Webpack, consulta. [Raggruppa le applicazioni con webpack](webpack.md) 

Se utilizzi l'SDK al di fuori di un ambiente che applica CORS nel tuo browser e desideri accedere a tutti i servizi forniti dall'SDK per JavaScript, puoi creare una copia personalizzata dell'SDK localmente clonando il repository ed eseguendo gli stessi strumenti di compilazione che creano la versione ospitata predefinita dell'SDK. Le sezioni seguenti descrivono la procedura per creare l'SDK con servizi e versioni dell'API aggiuntivi.

## Usa SDK Builder per creare l'SDK per JavaScript
<a name="using-the-sdk-builder"></a>

**Nota**  
La versione 3 (V3) di Amazon Web Services non supporta più Browser Builder. Per ridurre al minimo l'utilizzo della larghezza di banda delle applicazioni browser, ti consigliamo di importare moduli denominati e di raggrupparli per ridurne le dimensioni. Per ulteriori informazioni sul raggruppamento, consulta. [Raggruppa le applicazioni con webpack](webpack.md)

# Cross-Origin Resource Sharing (CORS)
<a name="cors"></a>

Il Cross-origin resource sharing, o CORS, è una caratteristica di sicurezza dei moderni browser Web. In questo modo i browser Web possono negoziare quali domini possono fare richieste di siti Web o servizi esterni. 

CORS è fondamentale quando si sviluppano applicazioni di tipo browser con AWS SDK per JavaScript perché la maggior parte delle richieste di risorse vengono inviate a un dominio esterno, ad esempio l'endpoint di un servizio Web. Se JavaScript l'ambiente utilizza la sicurezza CORS, è necessario configurare CORS con il servizio.

CORS determina se consentire la condivisione di risorse in una richiesta tra origini diverse in base a quanto segue:
+ Il dominio specifico che effettua la richiesta 
+ Il tipo di richiesta HTTP effettuata (GET, PUT, POST, DELETE e così via)

## Come funziona CORS
<a name="how-cors-works"></a>

Nel caso più semplice, lo script di browser invia una richiesta GET per una risorsa da un server in un altro dominio. A seconda della configurazione CORS del server, se la richiesta proviene da un dominio che è autorizzato a inviare le richieste GET, il server cross-origin risponde restituendo la risorsa richiesta.

Se il dominio che effettua la richiesta o il tipo di richiesta HTTP non è autorizzato, la richiesta viene negata. Tuttavia, CORS permette di preparare la richiesta prima dell'invio. In questo caso, viene effettuata una richiesta preliminare in cui viene inviata la richiesta di accesso `OPTIONS`. Se la configurazione CORS del server cross-origin consente di concedere l'accesso al dominio richiedente, il server invia una risposta preliminare che elenca tutti i tipi di richieste HTTP che il dominio può effettuare sulla risorsa richiesta.

![\[Flusso di elaborazione per le richieste CORS\]](http://docs.aws.amazon.com/it_it/sdk-for-javascript/v3/developer-guide/images/cors-overview.png)


## È richiesta la configurazione CORS?
<a name="the-need-for-cors-configuration"></a>

I bucket Amazon S3 richiedono la configurazione CORS prima di poter eseguire operazioni su di essi. In alcuni JavaScript ambienti CORS potrebbe non essere applicato e pertanto la configurazione di CORS non è necessaria. Ad esempio, se ospiti l'applicazione da un bucket Amazon S3 e accedi alle risorse da `*.s3.amazonaws.com` o da qualche altro endpoint specifico, le tue richieste non accederanno a un dominio esterno. Pertanto, questa configurazione non richiede CORS. In questo caso, CORS viene ancora utilizzato per servizi diversi da Amazon S3.

## Configurare CORS per un bucket Amazon S3
<a name="configuring-cors-s3-bucket"></a>

Puoi configurare un bucket Amazon S3 per utilizzare CORS nella console Amazon S3.

Se stai configurando CORS nella console di gestione dei servizi AWS Web, devi usare JSON per creare una configurazione CORS. La nuova console di gestione dei servizi AWS Web supporta solo le configurazioni JSON CORS. 

**Importante**  
Nella nuova console di gestione dei servizi AWS Web, la configurazione CORS deve essere JSON.

1. Nella console di gestione dei servizi AWS Web, apri la console Amazon S3, trova il bucket che desideri configurare e seleziona la relativa casella di controllo.

1. **Nel riquadro che si apre, scegli Autorizzazioni.**

1. Nella scheda **Autorizzazioni**, scegliete Configurazione **CORS.**

1. **Immettete la configurazione CORS nel **CORS Configuration Editor**, quindi scegliete Salva.**

Una configurazione CORS è un file XML che contiene una serie di regole all'interno di un `<CORSRule>`. Una configurazione può avere massimo 100 regole. Una regola è definita da uno dei seguenti tag:
+ `<AllowedOrigin>`— Specificate le origini del dominio a cui consentite di effettuare richieste tra domini.
+ `<AllowedMethod>`— Specificate il tipo di richiesta consentita (GET, PUT, POST, DELETE, HEAD) nelle richieste tra domini.
+ `<AllowedHeader>`— Speciifica le intestazioni consentite in una richiesta di preflight.

Per esempi di configurazioni, vedi [Come posso configurare CORS sul mio bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html#how-do-i-enable-cors)? nella *Guida per l'utente di Amazon Simple Storage Service*.

## Esempio di configurazione CORS
<a name="cors-configuration-example"></a>

Il seguente esempio di configurazione CORS consente a un utente di visualizzare, aggiungere, rimuovere o aggiornare oggetti all'interno di un bucket dal dominio. `example.org` Tuttavia, ti consigliamo di estendere l'ambito `<AllowedOrigin>` al dominio del tuo sito web. È possibile specificare `"*"` per consentire l'origine.

**Importante**  
Nella nuova console S3, la configurazione CORS deve essere JSON.

------
#### [ XML ]

```
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <CORSRule>
    <AllowedOrigin>https://example.org</AllowedOrigin>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
  </CORSRule>
</CORSConfiguration>
```

------
#### [ JSON ]

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "HEAD",
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "https://www.example.org"
        ],
        "ExposeHeaders": [
             "ETag",
             "x-amz-meta-custom-header"]
    }
]
```

------

Questa configurazione non autorizza l'utente a eseguire azioni nel bucket. Abilita il modello di sicurezza del browser per consentire una richiesta ad Amazon S3. Le autorizzazioni devono essere configurate tramite i permessi dei bucket o i permessi dei ruoli IAM.

Puoi utilizzarlo `ExposeHeader` per consentire all'SDK di leggere le intestazioni di risposta restituite da Amazon S3. Ad esempio, se leggi l'`ETag`intestazione da un caricamento in più parti `PUT` o in più parti, devi includere il `ExposeHeader` tag nella configurazione, come mostrato nell'esempio precedente. Il kit SDK è in grado di accedere solo alle intestazioni esposte attraverso la configurazione CORS. Se si impostano i metadati nell'oggetto, i valori vengono restituiti come intestazioni con il prefisso `x-amz-meta-`, ad esempio `x-amz-meta-my-custom-header`, e devono essere esposti in modo analogo.

# Raggruppa le applicazioni con webpack
<a name="webpack"></a>

L'uso di moduli di codice da parte delle applicazioni Web negli script del browser o in Node.js crea dipendenze. Questi moduli di codice possono avere dipendenze proprie, generando una raccolta di moduli interconnessi richiesti dall'applicazione per funzionare. Per gestire le dipendenze, puoi usare un bundler di moduli come. `webpack`

Il bundler di `webpack` moduli analizza il codice dell'applicazione, cercando le nostre `require` istruzioni, `import` per creare pacchetti che contengono tutte le risorse di cui l'applicazione ha bisogno. In questo modo le risorse possono essere facilmente servite tramite una pagina Web. L'SDK for JavaScript può essere incluso `webpack` come una delle dipendenze da includere nel pacchetto di output.

Per ulteriori informazioni in merito`webpack`, consulta il bundler del modulo [webpack](https://webpack.github.io/) su. GitHub

## Installa webpack
<a name="webpack-installing"></a>

Per installare il bundler del `webpack` modulo, devi prima avere installato npm, il gestore di pacchetti Node.js. Digita il comando seguente per installare la `webpack` CLI e JavaScript il modulo.

```
npm install --save-dev webpack
```

Per utilizzare il `path` modulo per lavorare con i percorsi di file e directory, che viene installato automaticamente con webpack, potrebbe essere necessario installare il pacchetto Node.js`path-browserify`. 

```
npm install --save-dev path-browserify
```

## Configura webpack
<a name="webpack-configuring"></a>

Per impostazione predefinita, Webpack cerca un JavaScript file denominato `webpack.config.js` nella directory principale del progetto. Questo file specifica le opzioni di configurazione. Di seguito è riportato un esempio di file di `webpack.config.js` configurazione per la WebPack versione 5.0.0 e successive.

**Nota**  
I requisiti di configurazione di Webpack variano a seconda della versione di Webpack installata. Per ulteriori informazioni, consulta la documentazione di [Webpack](https://webpack.js.org/configuration/). 

```
// Import path for resolving file paths
var path = require("path");
module.exports = {
  // Specify the entry point for our app.
  entry: [path.join(__dirname, "browser.js")],
  // Specify the output file containing our bundled code.
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
   // Enable WebPack to use the 'path' package.
   resolve:{
  fallback: { path: require.resolve("path-browserify")}
  }
  /**
  * In Webpack version v2.0.0 and earlier, you must tell 
  * webpack how to use "json-loader" to load 'json' files.
  * To do this Enter 'npm --save-dev install json-loader' at the 
  * command line to install the "json-loader' package, and include the 
  * following entry in your webpack.config.js.
  * module: {
    rules: [{test: /\.json$/, use: use: "json-loader"}]
  }
  **/
};
```

In questo esempio, `browser.js` viene specificato come *punto di ingresso*. Il *punto di ingresso* è il file `webpack` utilizzato per iniziare la ricerca dei moduli importati. Come `bundle.js` è specificato il nome del file di output. Questo file di output conterrà tutto JavaScript il necessario per l'esecuzione dell'applicazione. Se il codice specificato nel punto di ingresso importa o richiede altri moduli, come l'SDK for JavaScript, quel codice viene fornito in bundle senza bisogno di specificarlo nella configurazione.

## Esegui webpack
<a name="webpack-running"></a>

Per creare un'applicazione da usare`webpack`, aggiungi quanto segue all'`scripts`oggetto nel tuo `package.json` file.

```
"build": "webpack"
```

Di seguito è riportato un `package.json` file di esempio che dimostra l'aggiunta`webpack`.

```
{
  "name": "aws-webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@aws-sdk/client-iam": "^3.32.0",
    "@aws-sdk/client-s3": "^3.32.0"
  },
  "devDependencies": {
    "webpack": "^5.0.0"
  }
}
```

Per creare la tua applicazione, inserisci il seguente comando.

```
npm run build
```

Il bundler del `webpack` modulo genera quindi il JavaScript file specificato nella directory principale del progetto.

## Usa il pacchetto webpack
<a name="webpack-using-bundle"></a>

Per utilizzare il pacchetto in uno script del browser, puoi incorporarlo utilizzando un `<script>` tag, come mostrato nell'esempio seguente.

```
<!DOCTYPE html>
<html>
    <head>
        <title>Amazon SDK with webpack</title>
    </head> 
    <body>
        <div id="list"></div>
        <script src="bundle.js"></script>
    </body>
</html>
```

## Bundle per Node.js
<a name="webpack-nodejs-bundles"></a>

È possibile `webpack` utilizzarlo per generare pacchetti che vengono eseguiti in Node.js specificandolo `node` come destinazione nella configurazione.

```
target: "node"
```

Questa funzione è utile quando si esegue un'applicazione Node.js in un ambiente in cui lo spazio su disco è limitato. Ecco un esempio di configurazione `webpack.config.js` con Node.js specificato come destinazione dell'output.

```
// Import path for resolving file paths
var path = require("path");
module.exports = {
  // Specify the entry point for our app.
  entry: [path.join(__dirname, "browser.js")],
  // Specify the output file containing our bundled code.
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
  // Let webpack know to generate a Node.js bundle.
  target: "node",
   // Enable WebPack to use the 'path' package.
   resolve:{
  fallback: { path: require.resolve("path-browserify")}
   /**
   * In Webpack version v2.0.0 and earlier, you must tell 
   * webpack how to use "json-loader" to load 'json' files.
   * To do this Enter 'npm --save-dev install json-loader' at the 
   * command line to install the "json-loader' package, and include the 
   * following entry in your webpack.config.js.
   module: {
    rules: [{test: /\.json$/, use: use: "json-loader"}]
  }
  **/
};
```