

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à.

# Configurazione dei client di servizio nell' AWS SDK for C\$1\$1
<a name="configuring"></a>

 Per accedere a livello di codice Servizi AWS, l' AWS SDK for C\$1\$1 utilizza una classe client per ciascuno. Servizio AWS Ad esempio, se la tua applicazione deve accedere ad Amazon EC2, crea un oggetto EC2 client Amazon per interfacciarsi con quel servizio. Quindi utilizzi il client del servizio per effettuare richieste in merito Servizio AWS. 

Per fare una richiesta a un Servizio AWS, devi prima creare un client di servizio. Per ogni Servizio AWS codice utilizzato, ha una propria libreria e un tipo dedicato per interagire con esso. Il client espone un metodo per ogni operazione API esposta dal servizio. 

Esistono molti modi alternativi per configurare il comportamento dell'SDK, ma alla fine tutto ha a che fare con il comportamento dei client di servizio. Qualsiasi configurazione non ha effetto finché non viene utilizzato un client di servizio creato a partire da tali configurazioni.

È necessario stabilire in che modo il codice si autentica AWS durante lo sviluppo con. Servizi AWSÈ inoltre necessario impostare Regione AWS quello che si desidera utilizzare.

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 AWS SDKs. 

**Topics**
+ [Configurazione SDK](sdkoptions.md)
+ [Configurazione del client esternamente](config-external.md)
+ [Configurazione del client nel codice](client-config.md)
+ [Regione AWS](region.md)
+ [Fornitori di credenziali](credproviders.md)
+ [CMake parametri](cmake-params.md)
+ [Registrazione](logging.md)
+ [HTTP](overriding-http-client.md)
+ [Controllo degli iostream utilizzati da e da `HttpClient` `AWSClient`](configuring-iostreams.md)
+ [Utilizzando una libcrypto personalizzata](libcrypto.md)

# Configurazione generale utilizzando `Aws::SDKOptions` in AWS SDK per C\$1\$1
<a name="sdkoptions"></a>

La [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_s_d_k_options.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_s_d_k_options.html)struttura contiene le opzioni di configurazione SDK. `Aws::SDKOptions`si concentra sulla configurazione generale dell'SDK, mentre la [`ClientConfiguration`](client-config.md)struttura si concentra sulla configurazione della comunicazione con. Servizi AWS

Un'istanza di [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_s_d_k_options.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_s_d_k_options.html)viene passata ai metodi [`Aws::InitAPI`and `Aws::ShutdownAPI`](basic-use.md). La stessa istanza deve essere inviata a entrambi i metodi.

Gli esempi seguenti illustrano alcune delle opzioni disponibili.
+ Attiva l'accesso utilizzando il logger predefinito

  ```
  Aws::SDKOptions options;
  options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
  Aws::InitAPI(options);
  {
      // make your SDK calls here.
  }
  Aws::ShutdownAPI(options);
  ```
+ Sostituisci la fabbrica predefinita del client HTTP

  ```
  Aws::SDKOptions options;
  options.httpOptions.httpClientFactory_create_fn = [](){
          return Aws::MakeShared<MyCustomHttpClientFactory>(
              "ALLOC_TAG", arg1);
      };
  Aws::InitAPI(options);
  {
      // make your SDK calls here.
  }
  Aws::ShutdownAPI(options);
  ```
**Nota**  
 `httpOptions`richiede una chiusura (chiamata anche funzione anonima o espressione lambda) anziché una. `std::shared_ptr` Ciascuna delle funzioni di fabbrica dell'SDK funziona in questo modo perché al momento in cui avviene l'allocazione della memoria di fabbrica, il gestore della memoria non è ancora stato installato. Passando una chiusura al metodo, il gestore della memoria verrà chiamato per eseguire l'allocazione della memoria quando è sicuro farlo. Una tecnica semplice per eseguire questa procedura consiste nell'utilizzare un'espressione Lambda.
+ Utilizzate un gestore globale `SIGPIPE`

  Se create l'SDK per C\$1\$1 con curl e OpenSSL, dovete specificare un gestore di segnale. Se non utilizzate un gestore di segnali personalizzato, impostatelo su. `installSigPipeHandler` `true`

  ```
  Aws::SDKOptions options;
  options.httpOptions.installSigPipeHandler = true; 
  Aws::InitAPI(options);
  {
      // make your SDK calls here.
  }
  Aws::ShutdownAPI(options);
  ```

  In caso `installSigPipeHandler` `true` affermativo, l'SDK for C\$1\$1 utilizza un gestore `SIGPIPE` che ignora i segnali. Per ulteriori informazioni`SIGPIPE`, consultate [Operation Error Signals](https://www.gnu.org/software/libc/manual/html_node/Operation-Error-Signals.html) sul sito web del sistema operativo GNU. Per ulteriori informazioni sul gestore curl, vedete [CURLOPT\$1NOSIGNAL spiegato sul sito web curl](https://curl.se/libcurl/c/CURLOPT_NOSIGNAL.html).

  Le librerie sottostanti di curl e OpenSSL possono inviare `SIGPIPE` un segnale per notificare quando il lato remoto chiude una connessione. Questi segnali devono essere gestiti dall'applicazione. Per maggiori informazioni su questa funzionalità curl, consulta [libcurl thread safety sul sito web curl](https://curl.se/libcurl/c/threadsafe.html). Questo comportamento non è automaticamente integrato nell'SDK perché i gestori di segnale sono globali per ogni applicazione e la libreria è una dipendenza dell'SDK. 

# Configurazione esterna di AWS SDK per i client di servizi C\$1\$1
<a name="config-external"></a>

Molte impostazioni di configurazione possono essere gestite al di fuori del codice. Quando la configurazione viene gestita esternamente, viene applicata a tutte le applicazioni. La maggior parte delle impostazioni di configurazione può essere impostata come variabili di ambiente o in un file condiviso separato. AWS `config` Il `config` file condiviso può mantenere set di impostazioni separati, chiamati profili, per fornire configurazioni diverse per ambienti o test diversi.

Le variabili di ambiente e le impostazioni dei `config` file condivisi sono standardizzate e condivise tra AWS SDKs strumenti per supportare funzionalità coerenti tra diversi linguaggi di programmazione e applicazioni.

Consulta la *AWS SDKs and Tools Reference Guide* per ulteriori informazioni sulla configurazione dell'applicazione con questi metodi, oltre a dettagli su ciascuna impostazione cross-sdk. Per visualizzare tutte le impostazioni che l'SDK è in grado di risolvere a partire dalle variabili di ambiente o dai file di configurazione, consulta il [riferimento alle impostazioni nella Guida di riferimento](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html) agli strumenti *AWS SDKs e* agli strumenti.

Per effettuare una richiesta a un Servizio AWS, devi prima creare un'istanza di un client per quel servizio. È possibile configurare impostazioni comuni per i client di servizio, ad esempio i timeout, il client HTTP e riprovare la configurazione. 

Ogni client di servizio richiede un fornitore di credenziali Regione AWS e un provider di credenziali. L'SDK utilizza questi valori per inviare le richieste alla regione corretta per le tue risorse e per firmare le richieste con le credenziali corrette. Puoi specificare questi valori a livello di codice a livello di codice o caricarli automaticamente dall'ambiente.

L'SDK ha una serie di posizioni (o fonti) che controlla per trovare un valore per le impostazioni di configurazione.

1. Qualsiasi impostazione esplicita impostata nel codice o su un client di servizio stesso ha la precedenza su qualsiasi altra cosa.

1. Variabili di ambiente
   + Per i dettagli sull'impostazione delle variabili di ambiente, consultate le [variabili di ambiente nella Guida](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html) di *riferimento agli strumenti AWS SDKs e agli strumenti.*
   + Nota che puoi configurare le variabili di ambiente per una shell a diversi livelli di ambito: a livello di sistema, a livello di utente e per una sessione di terminale specifica.

1. Condivisi e file `config` `credentials`
   + Per i dettagli sulla configurazione di questi file, consulta la *Guida di riferimento [Condivisi `config`AWS SDKs e `credentials` file](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) in and Tools*.

1. Qualsiasi valore predefinito fornito dal codice sorgente SDK stesso viene utilizzato per ultimo.
   + Alcune proprietà, come Region, non hanno un valore predefinito. È necessario specificarle esplicitamente nel codice, in un'impostazione di ambiente o nel `config` file condiviso. Se l'SDK non è in grado di risolvere la configurazione richiesta, le richieste API possono avere esito negativo in fase di esecuzione.

**Nota**  
 Per visualizzare tutte le impostazioni che l'SDK è in grado di risolvere a partire dalle variabili di ambiente o dai file di configurazione, consulta il [riferimento alle impostazioni](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html) nella *AWS SDKs and Tools Reference* Guide.

# Configurazione dell' AWS SDK per i client del servizio C\$1\$1 nel codice
<a name="client-config"></a>

Quando la configurazione viene gestita direttamente nel codice, l'ambito della configurazione è limitato all'applicazione che utilizza quel codice. All'interno di tale applicazione, sono disponibili opzioni per la configurazione globale di tutti i client di servizio, la configurazione per tutti i client di un determinato Servizio AWS tipo o la configurazione per un'istanza specifica del client di servizio.

 AWS SDK per C\$1\$1 Include classi Servizio AWS client che forniscono funzionalità per interagire con Servizi AWS quelle utilizzate nell'applicazione. Nell'SDK for C\$1\$1, puoi modificare la configurazione predefinita del client, il che è utile quando vuoi fare cose come:
+ Connect a Internet tramite proxy
+ Modifica le impostazioni di trasporto HTTP, ad esempio il timeout della connessione e i nuovi tentativi di richiesta
+ Specificare i suggerimenti sulla dimensione del buffer del socket TCP

`ClientConfiguration`è una struttura dell'SDK for C\$1\$1 che puoi istanziare e utilizzare nel tuo codice. Il seguente frammento illustra l'utilizzo di questa classe per accedere ad Amazon S3 tramite un proxy.

```
Aws::Client::ClientConfiguration clientConfig;
clientConfig.proxyHost = "localhost";
clientConfig.proxyPort = 1234;
clientConfig.proxyScheme = Aws::Http::Scheme::HTTPS;
Aws::S3::S3Client(clientConfig);
```

## Dichiarazioni delle variabili di configurazione
<a name="config-vars-declarations"></a>

 La `ClientConfiguration` struttura dichiara le seguenti variabili membro:

```
Aws::String accountId;
Aws::String accountIdEndpointMode = "preferred";
bool allowSystemProxy = false;
Aws::String appId;
Aws::String caPath;
Aws::String caFile;

struct {
  RequestChecksumCalculation requestChecksumCalculation = RequestChecksumCalculation::WHEN_SUPPORTED;
  ResponseChecksumValidation responseChecksumValidation = ResponseChecksumValidation::WHEN_SUPPORTED;
} checksumConfig;

ProviderFactories configFactories = ProviderFactories::defaultFactories;
long connectTimeoutMs = 1000;

struct CredentialProviderConfiguration {
    Aws::String profile;
    Aws::String region;
    struct {
        long metadataServiceNumAttempts = 1;
        long metadataServiceTimeout = 1;
        std::shared_ptr<RetryStrategy> imdsRetryStrategy;
        bool disableImdsV1;
        bool disableImds;
    } imdsConfig;
    struct STSCredentialsCredentialProviderConfiguration {
        Aws::String roleArn;
        Aws::String sessionName;
        Aws::String tokenFilePath;
        std::chrono::milliseconds retrieveCredentialsFutureTimeout = std::chrono::seconds(10);
    } stsCredentialsProviderConfig;
} credentialProviderConfig;

bool disableExpectHeader = false;
bool disableIMDS = false;
bool disableImdsV1 = false;
bool enableClockSkewAdjustment = true;
Aws::Crt::Optional<bool> enableEndpointDiscovery;
bool enableHostPrefixInjection = true;
bool enableHttpClientTrace = false;
bool enableTcpKeepAlive = true;
Aws::String endpointOverride;
std::shared_ptr<Aws::Utils::Threading::Executor> executor = nullptr;
FollowRedirectsPolicy followRedirects;
Aws::Http::TransferLibType httpLibOverride;
Aws::Http::TransferLibPerformanceMode httpLibPerfMode = Http::TransferLibPerformanceMode::LOW_LATENCY;
long httpRequestTimeoutMs = 0;
unsigned long lowSpeedLimit = 1;
unsigned maxConnections = 25;
Aws::Utils::Array<Aws::String> nonProxyHosts;
Aws::String profileName;
Aws::String proxyCaFile;
Aws::String proxyCaPath;
Aws::Http::Scheme proxyScheme;
Aws::String proxyHost;
unsigned proxyPort = 0;
Aws::String proxyUserName;
Aws::String proxyPassword;
Aws::String proxySSLCertPath;
Aws::String proxySSLCertType;
Aws::String proxySSLKeyPath;
Aws::String proxySSLKeyType;
Aws::String proxySSLKeyPassword;
std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> readRateLimiter = nullptr;
Aws::String region;
Aws::Client::RequestCompressionConfig requestCompressionConfig;
long requestTimeoutMs = 0;
std::shared_ptr<RetryStrategy> retryStrategy = nullptr;
Aws::Http::Scheme scheme;
unsigned long tcpKeepAliveIntervalMs = 30000;
std::shared_ptr<smithy::components::tracing::TelemetryProvider> telemetryProvider;
Aws::String userAgent;
bool useDualStack = false;
bool useFIPS = false;
bool verifySSL = true;
Aws::Http::Version version = Http::Version::HTTP_VERSION_2TLS;

struct WinHTTPOptions {
  bool useAnonymousAuth = false;
} winHTTPOptions;

std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> writeRateLimiter = nullptr;

static Aws::String LoadConfigFromEnvOrProfile(const Aws::String& envKey, const Aws::String& profile,
                                              const Aws::String& profileProperty, const Aws::Vector<Aws::String>& allowedValues,
                                              const Aws::String& defaultValue);
```

## Descrizioni delle variabili di configurazione
<a name="configuration-variables"></a>

L'elenco seguente descrive le variabili `ClientConfiguration` membro che è possibile utilizzare per personalizzare il comportamento del client.

**accountId**  
Speciifica l' Account AWS ID per il routing degli endpoint basato sull'account. Usa il formato 111122223333. Il routing degli endpoint basato sull'account migliora le prestazioni delle richieste per alcuni servizi.

**accountIdEndpointModalità**  
Controlla il comportamento di routing degli endpoint basato sull'account. I valori validi sono «obbligatorio», «disabilitato» o «preferito». Il valore predefinito è «preferito». Imposta su «disabilitato» per disattivare il routing degli endpoint basato sull'account quando necessario.

**allowSystemProxy**  
Controlla se il client HTTP rileva le impostazioni del proxy di sistema. L'impostazione predefinita è false. Impostare su true per abilitare l'individuazione automatica dei proxy.

**appId**  
Specifica un identificatore facoltativo specifico dell'applicazione. Quando impostato, questo valore viene aggiunto all'intestazione nel formato. `User-Agent` `App/{appId}` È possibile impostare questo valore utilizzando la variabile di `AWS_SDK_UA_APP_ID` ambiente o l'attributo `sdk_ua_app_id` shared config profile.

**CapAth, un file**  
Indica al client HTTP dove trovare l'archivio attendibile con i certificati SSL. Un esempio di trust store potrebbe essere una directory preparata con l'utilità `c_rehash` OpenSSL. Non dovrebbe essere necessario impostare queste variabili a meno che l'ambiente non utilizzi collegamenti simbolici. Queste variabili non hanno effetto sui sistemi Windows e macOS.

**CheckSumConfig**  
Contiene le impostazioni di calcolo e convalida del checksum. Include `requestChecksumCalculation` e `responseChecksumValidation` con valore predefinito WHEN\$1SUPPORTED.

**ConfigFactories**  
Specifica i metodi di fabbrica per inizializzare le classi di utilità client come e. `Executor` `RetryStrategy` Utilizza le factory predefinite a meno che non venga sovrascritto.

**requestTimeoutMs e connectTimeoutMs**  
Speciifica la quantità di tempo in millisecondi di attesa prima del timeout di una richiesta HTTP. Ad esempio, è consigliabile aumentare questi tempi per il trasferimento di file di grandi dimensioni.

**credentialProviderConfig**  
Contiene le impostazioni di configurazione per i provider di credenziali. Utilizza questa struttura per personalizzare il modo in cui l'SDK ottiene AWS le credenziali.

**disableExpectHeader**  
Applicabile solo ai client HTTP CURL. Per impostazione predefinita, CURL aggiunge un'intestazione «Expect: 100-Continue» in una richiesta HTTP per evitare di inviare il payload HTTP in situazioni in cui il server risponde con un errore subito dopo aver ricevuto l'intestazione. Questo comportamento può salvare un viaggio di andata e ritorno ed è utile in situazioni in cui il payload è ridotto e la latenza di rete è rilevante. L'impostazione predefinita della variabile è false. Se impostato su true, CURL riceve istruzioni per inviare contemporaneamente sia l'intestazione della richiesta HTTP che il payload del corpo.

**Disabilita gli IMD**  
Controlla se le chiamate IMDS (Instance Metadata Service) sono disabilitate. L'impostazione predefinita è false. Imposta su true per disabilitare le chiamate IMDS quando vengono eseguite al di fuori delle EC2 istanze.

**Disabilita IMDS v1**  
Controlla se le IMDSv1 chiamate sono disabilitate mentre sono consentite. IMDSv2 L'impostazione predefinita è false. Imposta su true per disabilitare solo IMDSv1 le chiamate per una maggiore sicurezza.

**enableClockSkewRegolazione**  
Controlla se l'inclinazione dell'orologio viene regolata dopo ogni tentativo HTTP. L'impostazione predefinita è false.

**enableEndpointDiscovery**  
Controlla se viene utilizzato l'endpoint discovery. Per impostazione predefinita, vengono utilizzati endpoint regionali o sostituiti. Per abilitare il rilevamento degli endpoint, imposta la variabile su true.

**enableHostPrefixIniezione**  
Controlla se l'host HTTP aggiunge un prefisso «data-» alle DiscoverInstances richieste. Per impostazione predefinita, questo comportamento è abilitato. Per disabilitarlo, imposta la variabile su false.

**enableHttpClientTraccia**  
Controlla se il tracciamento del client HTTP è abilitato per scopi di debug. L'impostazione predefinita è false. Imposta su true per abilitare la registrazione dettagliata delle richieste e delle risposte HTTP.

**enableTcpKeepVivo**  
Controlla se inviare pacchetti TCP keep-alive. L'impostazione predefinita è true. Utilizzare in combinazione con la `tcpKeepAliveIntervalMs` variabile. Questa variabile non è applicabile a Win INet e al IXMLHTTPRequest2 client.

**EndpointOverride**  
Specifica un endpoint HTTP prioritario con cui comunicare con un servizio.

**esecutore**  
Fa riferimento all'implementazione del gestore asincrono Executor. Il comportamento predefinito consiste nel creare e scollegare un thread per ogni chiamata asincrona. Per modificare questo comportamento, implementate una sottoclasse della `Executor` classe e assegnate un'istanza a questa variabile.

**Segui i reindirizzamenti**  
Controlla il comportamento durante la gestione dei codici di reindirizzamento HTTP 300.

**httpLibOverride**  
Speciifica l'implementazione HTTP restituita dalla fabbrica HTTP predefinita. Il client HTTP predefinito per Windows è WinHTTP. Il client HTTP predefinito per tutte le altre piattaforme è CURL.

**httpLibPerfModo**  
Speciifica la modalità di prestazioni della libreria HTTP. L'impostazione predefinita è LOW\$1LATENCY. È possibile regolare questa impostazione per ottimizzare le diverse caratteristiche prestazionali.

**httpRequestTimeoutSig.ra**  
Specifica il timeout della richiesta HTTP in millisecondi. Il valore predefinito è 0 (nessun timeout). Valuta la possibilità di aumentare questo valore quando trasferisci file di grandi dimensioni.

**lowSpeedLimit**  
Speciifica la velocità di trasferimento minima consentita in byte al secondo. Se la velocità di trasferimento scende al di sotto della velocità specificata, l'operazione di trasferimento viene interrotta. L'impostazione predefinita è 1 byte/secondo. Questa variabile è applicabile solo ai client CURL.

**MaxConnections**  
Speciifica il numero massimo di connessioni HTTP a un singolo server. Il valore predefinito è 25. Non esiste un valore massimo consentito diverso da quello che la larghezza di banda può ragionevolmente supportare.

**nonProxyHosts**  
Speciifica un array di nomi host che devono ignorare le impostazioni del proxy. Utilizzate questa impostazione per escludere host specifici dalla configurazione del proxy.

**Nome del profilo**  
Speciifica il nome del AWS profilo da utilizzare per la configurazione. L'SDK carica le impostazioni dal profilo specificato nel file di AWS configurazione.

**proxyCaFile**  
Speciifica il percorso del file dell'autorità di certificazione per le connessioni proxy quando è diverso da quello predefinito.

**proxyCaPath**  
Speciifica il percorso dell'archivio attendibile dell'autorità di certificazione per le connessioni proxy quando è diverso da quello predefinito.

**ProxyScheme, ProxyHost, ProxyPort e ProxyPassword proxyUserName**  
Utilizzato per impostare e configurare un proxy per tutte le comunicazioni con. AWS Esempi di casi in cui questa funzionalità potrebbe essere utile includono il debug in combinazione con la suite Burp o l'utilizzo di un proxy per la connessione a Internet.

**percorso del proxy SSLCert**  
Speciifica il percorso del file del certificato SSL per le connessioni proxy che richiedono certificati client.

**Tipo di proxy SSLCert**  
Speciifica il tipo di certificato SSL per le connessioni proxy. I tipi più comuni includono PEM e DER.

**password proxy SSLKey**  
Speciifica la password per la chiave privata SSL utilizzata nelle connessioni proxy quando la chiave è protetta da password.

**percorso del proxy SSLKey**  
Speciifica il percorso del file di chiave privata SSL per le connessioni proxy che richiedono certificati client.

**Tipo di proxy SSLKey**  
Speciifica il tipo di chiave privata SSL per le connessioni proxy. I tipi più comuni includono PEM e DER.

**writeRateLimiter e readRateLimiter**  
Riferimenti alle implementazioni dei limitatori di velocità di lettura e scrittura utilizzati per limitare la larghezza di banda utilizzata dal livello di trasporto. Per impostazione predefinita, le velocità di lettura e scrittura non sono limitate. Per introdurre la limitazione, implementate una sottoclasse di `RateLimiterInterface` e assegnate un'istanza a queste variabili.

**Regione**  
Specifica la AWS regione da utilizzare, ad esempio *us-east-1*. Per impostazione predefinita, la regione utilizzata è la regione predefinita configurata nelle credenziali applicabili. AWS 

**requestCompressionConfig**  
Contiene le impostazioni di configurazione per la compressione delle richieste. Utilizzate questa struttura per controllare quando e come le richieste vengono compresse prima della trasmissione.

**Riprova Strategia**  
Fa riferimento all'implementazione della strategia Retry. La strategia predefinita implementa una politica di backoff esponenziale. Per eseguire una strategia diversa, implementate una sottoclasse della `RetryStrategy` classe e assegnate un'istanza a questa variabile.

**scheme**  
Speciifica lo schema di indirizzamento URI, HTTP o HTTPS. Lo schema predefinito è HTTPS.

**tcpKeepAliveIntervalMs**  
Speciifica l'intervallo di tempo in millisecondi in cui inviare un pacchetto keep-alive tramite una connessione TCP. L'intervallo predefinito è 30 secondi. L'impostazione minima è di 15 secondi. Questa variabile non è applicabile a Win INet e al IXMLHTTPRequest2 client.

**Provider di telemetria**  
Fa riferimento all'implementazione del provider di telemetria per la raccolta di metriche e il tracciamento dei dati. Configura questa impostazione per abilitare le funzionalità di osservabilità.

**userAgent**  
Solo per uso interno. Non modificate l'impostazione di questa variabile.

**useDualStack**  
Controlla se utilizzare il dual stack IPv4 e gli IPv6 endpoint. Tieni presente che non tutti i AWS servizi sono supportati IPv6 in tutte le regioni.

**Usa FIPS**  
Controlla se utilizzare moduli crittografici convalidati dagli standard federali di elaborazione delle informazioni (FIPS) 140-2. L'impostazione predefinita è false. Impostata su true quando è richiesta la conformità FIPS.

**Verifica SSL**  
Controlla se verificare i certificati SSL. Per impostazione predefinita, i certificati SSL vengono verificati. Per disabilitare la verifica, imposta la variabile su false.

**version**  
Speciifica la versione HTTP da utilizzare per le richieste. L'impostazione predefinita è HTTP\$1VERSION\$12TLS (HTTP/2 over TLS).

**vincere HTTPOptions**  
Contiene opzioni di configurazione HTTP specifiche per Windows. Include useAnonymousAuth con l'impostazione predefinita false.

# Impostazione dell' Regione AWS AWS SDK per C\$1\$1
<a name="region"></a>

È possibile accedere a Servizi AWS ciò che opera in un'area geografica specifica utilizzando. Regioni AWS Ciò può essere utile sia per la ridondanza sia per mantenere attivi i dati e le applicazioni vicino a dove voi e i vostri utenti vi accedete. 

**Importante**  
La maggior parte delle risorse risiede in una regione specifica Regione AWS ed è necessario fornire la regione corretta per la risorsa quando si utilizza l'SDK.

Per esempi su come impostare l'area predefinita tramite il AWS `config` file condiviso o le variabili di ambiente, consulta [Regione AWS](https://docs.aws.amazon.com/sdkref/latest/guide/feature-region.html)la Guida di *riferimento agli strumenti AWS SDKs e strumenti*.

È necessario impostare un valore predefinito Regione AWS AWS SDK per C\$1\$1 da utilizzare per AWS le richieste. Questa impostazione predefinita viene utilizzata per tutte le chiamate ai metodi di servizio SDK che non sono specificate con una regione. Nell'SDK for C\$1\$1, puoi anche impostare la regione predefinita utilizzando. [Configurazione del client nel codice](client-config.md)

# Utilizzo di AWS SDK per i provider di credenziali C\$1\$1
<a name="credproviders"></a>

 Tutte le richieste AWS devono essere firmate crittograficamente utilizzando le credenziali emesse da. AWS In fase di esecuzione, l'SDK recupera i valori di configurazione delle credenziali controllando diverse posizioni.

L'autenticazione con AWS può essere gestita all'esterno del codebase. Molti metodi di autenticazione possono essere rilevati, utilizzati e aggiornati automaticamente dall'SDK utilizzando la catena di fornitori di credenziali.

Per le opzioni guidate su come iniziare a utilizzare AWS l'autenticazione del progetto, consultate [Autenticazione e accesso](https://docs.aws.amazon.com/sdkref/latest/guide/access.html) nella Guida di riferimento agli *strumenti AWS SDKs e agli strumenti*.

## La catena di fornitori di credenziali
<a name="credproviders-default-credentials-provider-chain"></a>

Se non specificate esplicitamente un provider di credenziali durante la creazione di un client, l'SDK per C\$1\$1 utilizza una catena di provider di credenziali che controlla una serie di punti in cui è possibile fornire le credenziali. Una volta che l'SDK trova le credenziali in una di queste posizioni, la ricerca si interrompe. 

### Ordine di recupero delle credenziali
<a name="credproviders-credential-retrieval-order"></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. 

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. 

L'SDK tenta di caricare le credenziali dal `[default]` profilo nei file condivisi AWS `config` e. `credentials` Puoi utilizzare la variabile di `AWS_PROFILE` ambiente per scegliere un profilo denominato che desideri venga caricato dall'SDK anziché utilizzare. `[default]` I `credentials` file `config` and sono condivisi da AWS SDKs and tools. La *AWS SDKs and Tools Reference Guide* contiene informazioni sulle impostazioni di configurazione dell'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, l'SDK for C\$1\$1 controlla i provider di credenziali nell'ordine seguente. 

1. **AWS chiavi di accesso (credenziali temporanee e a lungo termine)**

   L'SDK tenta di caricare le credenziali dalle `AWS_ACCESS_KEY_ID` variabili and e di `AWS_SESSION_TOKEN` ambiente o dal file condiviso. `AWS_SECRET_ACCESS_KEY` AWS `credentials`
   +  Per indicazioni sulla configurazione di questo provider, consulta [le chiavi di AWS accesso](https://docs.aws.amazon.com/sdkref/latest/guide/access-users.html) nella Guida di riferimento agli *strumenti AWS SDKs e agli strumenti*.
   +  Per i dettagli sulle proprietà di configurazione dell'SDK per questo provider, consulta [le chiavi di AWS accesso](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html) nella *AWS SDKs and Tools Reference Guide*.

1. **AWS STS identità web**

   Quando si creano applicazioni mobili o applicazioni Web basate su client che richiedono l'accesso a AWS, AWS Security Token Service (AWS STS) restituisce un set di credenziali di sicurezza temporanee per gli utenti federati autenticati tramite un provider di identità pubblica (IdP).
   + Quando lo specificate in un profilo, l'SDK o lo strumento tenta di recuperare le credenziali temporanee utilizzando il metodo API. AWS STS `AssumeRoleWithWebIdentity` *Per i dettagli su questo metodo, consulta l'API [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)Reference.AWS Security Token Service *
   +  Per indicazioni sulla configurazione di questo provider, consulta [Federate with web identity o OpenID Connect](https://docs.aws.amazon.com/sdkref/latest/guide/access-assume-role.html#webidentity) nella *AWS SDKs and* Tools Reference Guide.
   +  *Per i dettagli sulle proprietà di configurazione SDK per questo provider, consulta [Assume il ruolo del provider di credenziali nella and Tools Reference](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html) Guide.AWS SDKs *

1. **Centro identità IAM**

   Se utilizzi IAM Identity Center per l'autenticazione, questo è quando l'SDK for C\$1\$1 utilizza il token Single Sign-on che è stato impostato eseguendo il comando CLI. AWS `aws sso login` L'SDK utilizza le credenziali temporanee scambiate da IAM Identity Center con un token valido. L'SDK utilizza quindi le credenziali temporanee quando chiama. Servizi AWS Per informazioni dettagliate su questo processo, consulta [Understand SDK per la risoluzione delle credenziali Servizi AWS](https://docs.aws.amazon.com/sdkref/latest/guide/understanding-sso.html#idccredres) nella *AWS SDKs and* Tools Reference Guide.
   +  Per indicazioni sulla configurazione di questo provider, consulta l'[autenticazione di IAM Identity Center](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html) nella *AWS SDKs and Tools* Reference Guide.
   +  Per i dettagli sulle proprietà di configurazione dell'SDK per questo provider, consulta il provider di [credenziali IAM Identity Center](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html) nella *AWS SDKs and Tools* Reference Guide.

1. **Risolutore di identità di credenziali di accesso con Signin AWS **

   Se utilizzi le credenziali di accesso e della console AWS per l'autenticazione, questo è quando l'SDK for C\$1\$1 utilizza le credenziali della console configurate in esecuzione o nella CLI. `aws login` `aws login --profile` L'SDK utilizza queste credenziali quando chiama i servizi. AWS 
   +  Per informazioni dettagliate su questo processo, consulta [Login for AWS local development using console credenziali](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html) nella *AWS SDKs and Tools* Reference Guide.

1. **Fornitore di processi esterno**

   Questo provider può essere utilizzato per fornire implementazioni personalizzate, come il recupero delle credenziali da un archivio di credenziali locale o l'integrazione con il provider di identità locale.
   +  *Per indicazioni su un modo per configurare questo provider, consulta [IAM Roles](https://docs.aws.amazon.com/sdkref/latest/guide/access-rolesanywhere.html) Anywhere nella and Tools Reference Guide.AWS SDKs *
   +  Per i dettagli sulle proprietà di configurazione dell'SDK per questo provider, consulta [Process Credential Provider](https://docs.aws.amazon.com/sdkref/latest/guide/feature-process-credentials.html) nella *AWS SDKs and Tools Reference Guide*.

1. **Credenziali dei container Amazon ECS e Amazon EKS**

   Alle attività di Amazon Elastic Container Service e agli account di servizio Kubernetes può essere associato un ruolo IAM. Le autorizzazioni concesse nel ruolo IAM vengono assunte dai contenitori in esecuzione nell'attività o nei contenitori del pod. Questo ruolo consente al codice dell'applicazione SDK for C\$1\$1 (nel contenitore) di utilizzarne altri. Servizi AWS

   L'SDK tenta di recuperare le credenziali dalle variabili di `AWS_CONTAINER_CREDENTIALS_FULL_URI` ambiente `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` or, che possono essere impostate automaticamente da Amazon ECS e Amazon EKS.
   + Per dettagli sulla configurazione di questo ruolo per Amazon ECS, consulta il [ruolo IAM delle attività di Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) nella *Amazon Elastic Container Service Developer Guide*.
   + Per informazioni sulla configurazione di Amazon EKS, consulta [Configurazione dell'agente Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) nella **Guida per l'utente di Amazon EKS**.
   +  Per i dettagli sulle proprietà di configurazione SDK per questo provider, consulta [Container credential provider](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html) nella *AWS SDKs and Tools Reference Guide*.

1. **Servizio di metadati di Amazon EC2 Instance**

   Crea un ruolo IAM e collegalo alla tua istanza. L'applicazione SDK for C\$1\$1 sull'istanza tenta di recuperare le credenziali fornite dal ruolo dai metadati dell'istanza. 
   + Per i dettagli sulla configurazione di questo ruolo e sull'utilizzo dei metadati, consulta i [metadati [IAM roles for Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) e Work with Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) nella *Amazon EC2 User Guide*.
   +  *Per i dettagli sulle proprietà di configurazione SDK per questo provider, consulta il provider di [credenziali IMDS nella and Tools Reference](https://docs.aws.amazon.com/sdkref/latest/guide/feature-imds-credentials.html) Guide.AWS SDKs *

La catena di fornitori di credenziali può essere esaminata [https://github.com/aws/aws-sdk-cpp/blob/main/src/aws-cpp-sdk-core/source/auth/AWSCredentialsProviderChain.cpp#L43-L86](https://github.com/aws/aws-sdk-cpp/blob/main/src/aws-cpp-sdk-core/source/auth/AWSCredentialsProviderChain.cpp#L43-L86)nel codice sorgente su. AWS SDK per C\$1\$1 GitHub

Se hai seguito l'approccio consigliato per i nuovi utenti per iniziare, configurerai l'autenticazione delle AWS credenziali [Autenticazione con l' AWS utilizzo di AWS SDK for C\$1\$1](credentials.md) di accesso durante l'argomento 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*.

## Fornitore di credenziali esplicite
<a name="credproviders-explicit-credentials-provider"></a>

Invece di affidarti alla catena di fornitori di credenziali per rilevare il metodo di autenticazione, puoi specificare un provider di credenziali specifico che l'SDK deve utilizzare. Puoi farlo fornendo le credenziali nel costruttore del tuo client di servizio.

L'esempio seguente crea un client Amazon Simple Storage Service fornendo direttamente credenziali di accesso temporanee anziché utilizzare la catena.

```
    SDKOptions options;
    Aws::InitAPI(options);
    {
        const auto cred_provider = Aws::MakeShared<Auth::SimpleAWSCredentialsProvider>("TestAllocationTag",
            "awsAccessKeyId",
            "awsSecretKey",
            "sessionToken");
        S3Client client{cred_provider};
    }
    Aws::ShutdownAPI(options);
```

## Memorizzazione nella cache delle identità
<a name="credproviders-identity-caching"></a>

L'SDK memorizzerà nella cache le credenziali e altri tipi di identità come i token SSO. Per impostazione predefinita, l'SDK utilizza un'implementazione lazy cache che carica le credenziali alla prima richiesta, le memorizza nella cache e quindi tenta di aggiornarle durante un'altra richiesta quando stanno per scadere. I client creati dalla stessa unità condividono una cache. [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_client_1_1_client_configuration.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/struct_aws_1_1_client_1_1_client_configuration.html)

# CMake parametri per la costruzione del AWS SDK per C\$1\$1
<a name="cmake-params"></a>

Usa i [CMake](https://cmake.org/)parametri elencati in questa sezione per personalizzare la modalità di compilazione del tuo SDK.

*Puoi impostare queste opzioni con gli strumenti della CMake GUI o la riga di comando usando -D.* Ad esempio:

```
cmake -DENABLE_UNITY_BUILD=ON -DREGENERATE_CLIENTS=1
```

## CMake Variabili e opzioni generali
<a name="cmake-general-options"></a>

Di seguito sono riportate le **`cmake`**variabili e le opzioni generali che influiscono sul processo di compilazione del codice sorgente SDK. 

**Nota**  
Utilizzate questi parametri quando create il codice sorgente SDK per l'SDK for C\$1\$1 stesso.

**Topics**
+ [ADD\$1CUSTOM\$1CLIENTS](#cmake-add-custom-clients)
+ [AUTORUN\$1UNIT\$1TESTS](#cmake-AUTORUN_UNIT_TESTS)
+ [AWS\$1AUTORUN\$1LD\$1LIBRARY\$1PATH](#cmake-AWS_AUTORUN_LD_LIBRARY_PATH)
+ [AWS\$1SDK\$1AVVERTENZE\$1SONO\$1ERRORI](#cmake-AWS_SDK_WARNINGS_ARE_ERRORS)
+ [AWS\$1USE\$1CRYPTO\$1SHARED\$1LIBS](#cmake-use-crypto)
+ [AWS\$1TEST\$1REGIONE](#cmake-AWS_TEST_REGION)
+ [BUILD\$1BENCHMARKS](#cmake-BUILD_BENCHMARKS)
+ [BUILD\$1DEPS](#cmake-BUILD_DEPS)
+ [BUILD\$1ONLY](#cmake-build-only)
+ [BUILD\$1OPTEL](#cmake-BUILD_OPTEL)
+ [BUILD\$1SHARED\$1LIBS](#cmake-build-shared-libs)
+ [BYPASS\$1DEFAULT\$1PROXY](#cmake-BYPASS_DEFAULT_PROXY)
+ [CPP\$1STANDARD](#cmake-cpp-standard)
+ [CURL\$1INCLUDE\$1DIR](#cmake-curl-include-dir)
+ [CURL\$1LIBRARY](#cmake-curl-library)
+ [GESTIONE DELLA MEMORIA PERSONALIZZATA](#cmake-custom-memory-management)
+ [IMDSV1DISABILITA\$1INTERNAL\$1 \$1CHIAMATE](#cmake-DISABLE_INTERNAL_IMDSV1_CALLS)
+ [ABILITARE\$1ADDRESS\$1SANITIZER](#cmake-ENABLE_ADDRESS_SANITIZER)
+ [ABILITARE\$1CURL\$1LOGGING](#cmake-enable-curl-logging)
+ [ABILITARE\$1HTTP\$1CLIENT\$1TESTING](#cmake-ENABLE_HTTP_CLIENT_TESTING)
+ [ABILITA\$1RTTI](#cmake-enable-rtti)
+ [ABILITARE\$1TEST](#cmake-enable-testing)
+ [ABILITA\$1UNITY\$1BUILD](#cmake-enable-unity-build)
+ [ABILITARE\$1VIRTUAL\$1OPERATIONS](#cmake-virtual-op)
+ [ENABLE\$1ZLIB\$1REQUEST\$1COMPRESSION](#cmake-ENABLE_ZLIB_REQUEST_COMPRESSION)
+ [FORCE\$1CURL](#cmake-force-curl)
+ [FORCE\$1SHARED\$1CRT](#cmake-force-shared-crt)
+ [G](#cmake-g)
+ [MINIMIZE\$1SIZE](#cmake-minimize-size)
+ [NO\$1CRITTOGRAFIA](#cmake-no-encryption)
+ [NO\$1HTTP\$1CLIENT](#cmake-no-http-client)
+ [REGENERATE\$1CLIENTS](#cmake-regenerate-clients)
+ [REGENERATE\$1DEFAULTS](#cmake-regenerate-defaults)
+ [SIMPLE\$1INSTALL](#cmake-simple-install)
+ [TARGET\$1ARCH](#cmake-target-arch)
+ [USA CRT\$1HTTP\$1CLIENT](#cmake-USE_CRT_HTTP_CLIENT)
+ [USE\$1IXML\$1HTTP\$1REQUEST\$12](#cmake-USE_IXML_HTTP_REQUEST_2)
+ [USE\$1OPENSSL](#cmake-use-openssl)
+ [USE\$1TLS\$1V1\$12](#cmake-USE_TLS_V1_2)
+ [USE\$1TLS\$1V1\$13](#cmake-USE_TLS_V1_3)

### ADD\$1CUSTOM\$1CLIENTS
<a name="cmake-add-custom-clients"></a>

Crea qualsiasi client arbitrario in base alla definizione dell'API. Inserisci la tua definizione nella `code-generation/api-definitions` cartella, quindi passa questo argomento a. **`cmake`** La fase di **`cmake`**configurazione genera il client e lo include come sottodirectory nella build. Ciò è particolarmente utile per generare un client C\$1\$1 per l'utilizzo di uno dei servizi [API Gateway](https://aws.amazon.com/api-gateway). Esempio:

```
-DADD_CUSTOM_CLIENTS="serviceName=myCustomService,version=2015-12-21;serviceName=someOtherService,version=2015-08-15"
```

**Nota**  
[Per utilizzare il `ADD_CUSTOM_CLIENTS` parametro, devi avere [Python 2.7](https://www.python.org/downloads/), Java ([JDK 1.8\$1](http://openjdk.java.net/install/)) e Maven installati e nel tuo.](https://maven.apache.org/) `PATH`

### AUTORUN\$1UNIT\$1TESTS
<a name="cmake-AUTORUN_UNIT_TESTS"></a>

Se`ON`, esegui i test unitari automaticamente dopo la creazione.

Valori  
 *ATTIVATO* \$1 *DISATTIVATO* 

Predefinita  
 *ACCESO* 

### AWS\$1AUTORUN\$1LD\$1LIBRARY\$1PATH
<a name="cmake-AWS_AUTORUN_LD_LIBRARY_PATH"></a>

Il percorso da aggiungere a LD\$1LIBRARY\$1PATH per i test unitari eseguiti automaticamente. CMake Imposta questo percorso se sono necessarie librerie di runtime personalizzate per le dipendenze sostituite.

Valori  
 *Stringa.* 

Predefinita  
 *N/D* 

### AWS\$1SDK\$1AVVERTENZE\$1SONO\$1ERRORI
<a name="cmake-AWS_SDK_WARNINGS_ARE_ERRORS"></a>

Se`ON`, considera gli avvisi del compilatore come errori. Prova ad attivarlo `OFF` se osservi errori su un compilatore nuovo o non comune.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### AWS\$1USE\$1CRYPTO\$1SHARED\$1LIBS
<a name="cmake-use-crypto"></a>

Forza l'uso di una libreria crittografica FindCrypto condivisa, se trovata. Attivala invece `OFF` per usare [BUILD\$1SHARED\$1LIBS](#cmake-build-shared-libs) l'impostazione.

Valori  
 *ATTIVATO* \$1 *DISATTIVATO* 

Predefinita  
 *SPENTO* 

### AWS\$1TEST\$1REGIONE
<a name="cmake-AWS_TEST_REGION"></a>

 Regione AWS Da usare per i test di integrazione.

Valori  
 *Stringa.* 

Predefinita  
 *N/D* 

### BUILD\$1BENCHMARKS
<a name="cmake-BUILD_BENCHMARKS"></a>

Se`ON`, crea l'eseguibile del benchmark.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### BUILD\$1DEPS
<a name="cmake-BUILD_DEPS"></a>

Se`ON`, crea dipendenze di terze parti.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### BUILD\$1ONLY
<a name="cmake-build-only"></a>

Crea solo i client che desideri utilizzare. Se impostato su un SDK di alto livello come *BUILD\$1ONLY* risolve tutte le `aws-cpp-sdk-transfer` dipendenze dei client di basso livello. Inoltre, crea test di integrazione e unitari relativi ai progetti selezionati, se esistono. Si tratta di un argomento a elenco, con valori separati da caratteri punto e virgola ()`;`. Esempio:

```
-DBUILD_ONLY="s3;cognito-identity"
```

**Nota**  
*Il modulo SDK principale viene *sempre* creato`aws-sdk-cpp-core`, indipendentemente dal valore del parametro BUILD\$1ONLY.*

### BUILD\$1OPTEL
<a name="cmake-BUILD_OPTEL"></a>

If`ON`, crea l'implementazione telemetrica aperta del tracciamento.

Valori  
 **ATTIVATO* \$1 DISATTIVATO* 

Predefinita  
 *SPENTO* 

### BUILD\$1SHARED\$1LIBS
<a name="cmake-build-shared-libs"></a>

Un'opzione integrata CMake , riesposta qui per motivi di visibilità. Se`ON`, crea librerie condivise; in caso contrario, crea solo librerie statiche.

**Nota**  
Per collegarti dinamicamente all'SDK, devi definire il `USE_IMPORT_EXPORT` simbolo per tutti gli obiettivi di build utilizzando l'SDK.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### BYPASS\$1DEFAULT\$1PROXY
<a name="cmake-BYPASS_DEFAULT_PROXY"></a>

Se`ON`, ignora le impostazioni proxy predefinite della macchina quando usi 2. IXml HttpRequest

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### CPP\$1STANDARD
<a name="cmake-cpp-standard"></a>

Specifica uno standard C\$1\$1 personalizzato da utilizzare con le basi di codice C\$1\$1 14 e 17.

Valori  
 *11 \$1 14* **\$1 17** 

Predefinita  
 *11* 

### CURL\$1INCLUDE\$1DIR
<a name="cmake-curl-include-dir"></a>

Il percorso di curl include la cartella contenente le intestazioni. `libcurl`

Valori  
 *Percorso della stringa alla directory selezionata`include`. Ad esempio,`D:/path/to/dir/with/curl/include`.* 

Predefinita  
 *N/D* 

### CURL\$1LIBRARY
<a name="cmake-curl-library"></a>

Percorso del file della libreria curl a cui collegarsi. Questa libreria può essere una libreria statica o una libreria di importazione, a seconda delle esigenze dell'applicazione.

Valori  
 *Percorso della stringa al file della libreria curl. Ad esempio,`D:/path/to/static/libcur/file/ie/libcurl.lib.a`.* 

Predefinita  
 *N/D* 

### GESTIONE DELLA MEMORIA PERSONALIZZATA
<a name="cmake-custom-memory-management"></a>

Per utilizzare un gestore di memoria personalizzato, imposta il valore su. `1` È possibile installare un allocatore personalizzato in modo che tutti i tipi STL utilizzino l'interfaccia di allocazione personalizzata. Se imposti il valore`0`, potresti comunque voler utilizzare i tipi di modello STL per facilitare la sicurezza delle DLL in Windows.

*Se il collegamento statico è attivo`ON`, la gestione della memoria personalizzata è predefinita su off ().* `0` Se il collegamento dinamico è attivo`ON`, la gestione della memoria personalizzata è predefinita su *on* (`1`) ed evita l'allocazione e la deallocazione tra DLL.

**Nota**  
Per evitare errori di mancata corrispondenza dei linker, è necessario utilizzare lo stesso valore (o) in tutto il sistema di compilazione. `0` `1`

Per installare il proprio gestore di memoria per gestire le allocazioni effettuate dall'SDK, è necessario impostare `-DCUSTOM_MEMORY_MANAGEMENT` e definire `USE_AWS_MEMORY_MANAGEMENT` per tutti gli obiettivi di build che dipendono dall'SDK.

### IMDSV1DISABILITA\$1INTERNAL\$1 \$1CHIAMATE
<a name="cmake-DISABLE_INTERNAL_IMDSV1_CALLS"></a>

[In caso contrario`ON`, non vengono effettuate chiamate interne all'API V1 dell'Instance Metadata Service.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) Se`OFF`, IMDSv2 le chiamate torneranno a essere utilizzate IMDSv1 se la IMDSv2 chiamata fallisce. Per ulteriori informazioni su IMDSv1 e IMDSv2, consulta [Use the Instance Metadata Service per accedere ai metadati dell'istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) nella *Amazon EC2* User Guide.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### ABILITARE\$1ADDRESS\$1SANITIZER
<a name="cmake-ENABLE_ADDRESS_SANITIZER"></a>

Se`ON`, attiva Address Sanitizer per gcc o clang.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### ABILITARE\$1CURL\$1LOGGING
<a name="cmake-enable-curl-logging"></a>

Se`ON`, reindirizza il log interno di curl al logger SDK.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### ABILITARE\$1HTTP\$1CLIENT\$1TESTING
<a name="cmake-ENABLE_HTTP_CLIENT_TESTING"></a>

Se`ON`, crea ed esegui le suite di test dei client HTTP corrispondenti.

Valori  
 *ATTIVATO* \$1 *DISATTIVATO* 

Predefinita  
 *SPENTO* 

### ABILITA\$1RTTI
<a name="cmake-enable-rtti"></a>

Controlla se l'SDK è progettato per abilitare le informazioni sul tipo di runtime (RTTI).

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### ABILITARE\$1TEST
<a name="cmake-enable-testing"></a>

Controlla se i progetti di unit test e di integrazione vengono creati durante la compilazione dell'SDK.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### ABILITA\$1UNITY\$1BUILD
<a name="cmake-enable-unity-build"></a>

Se`ON`, la maggior parte delle librerie SDK sono create come un unico file generato. `.cpp` Ciò può ridurre significativamente le dimensioni della libreria statica e accelerare i tempi di compilazione.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### ABILITARE\$1VIRTUAL\$1OPERATIONS
<a name="cmake-virtual-op"></a>

Questo parametro di solito funziona insieme alla generazione di codice. `REGENERATE_CLIENTS` 

Se `ENABLE_VIRTUAL_OPERATIONS` è `ON` ed `REGENERATE_CLIENTS` è`ON`, le funzioni relative al funzionamento nei client di servizio verranno contrassegnate come. `virtual`

Se `ENABLE_VIRTUAL_OPERATIONS` è `OFF` ed `REGENERATE_CLIENTS` è`ON`, `virtual` non verrà aggiunto alle funzioni operative e le classi client di servizio verranno contrassegnate come. `final`

In caso `ENABLE_VIRTUAL_OPERATIONS` `OFF` affermativo, l'SDK aggiungerà `-ffunction-sections` e `-fdata-sections` compilerà anche i flag per gcc e clang durante la compilazione.

[Per ulteriori informazioni, consulta Parameters on. CMake ](https://github.com/aws/aws-sdk-cpp/blob/main/docs/CMake_Parameters.md#enable_virtual_operations) GitHub 

Valori  
 *ATTIVATO* \$1 *DISATTIVATO* 

Predefinita  
 *ACCESO* 

### ENABLE\$1ZLIB\$1REQUEST\$1COMPRESSION
<a name="cmake-ENABLE_ZLIB_REQUEST_COMPRESSION"></a>

Per i servizi che lo supportano, il contenuto della richiesta verrà compresso. Attiva per impostazione predefinita se la dipendenza è disponibile.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### FORCE\$1CURL
<a name="cmake-force-curl"></a>

Solo per Windows. If`ON`, impone l'utilizzo del client curl anziché del provider di trasferimento dati [WinHTTP](https://msdn.microsoft.com/en-us/library/windows/desktop/aa382925%28v=vs.85%29.aspx) predefinito.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### FORCE\$1SHARED\$1CRT
<a name="cmake-force-shared-crt"></a>

Se`ON`, l'SDK si collega al runtime C in *modo dinamico*; in caso contrario, utilizza l'impostazione *BUILD\$1SHARED\$1LIBS* (a volte necessaria per la compatibilità con le versioni precedenti dell'SDK).

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### G
<a name="cmake-g"></a>

Genera elementi di compilazione, come soluzioni Visual Studio e progetti Xcode.

Ad esempio, su Windows:

```
-G "Visual Studio 12 Win64"
```

Per ulteriori informazioni, consulta la CMake documentazione della piattaforma in uso.

### MINIMIZE\$1SIZE
<a name="cmake-minimize-size"></a>

[Un superset di ENABLE\$1UNITY\$1BUILD.](#cmake-enable-unity-build) Se`ON`, questa opzione attiva ENABLE\$1UNITY\$1BUILD e impostazioni aggiuntive di riduzione delle dimensioni *binarie*.

Valori  
 **ATTIVATO* \$1 DISATTIVATO* 

Predefinita  
 *SPENTO* 

### NO\$1CRITTOGRAFIA
<a name="cmake-no-encryption"></a>

If`ON`, impedisce che l'implementazione crittografica predefinita specifica della piattaforma venga incorporata nella libreria. *Attiva questa opzione per inserire la tua implementazione crittografica.*

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### NO\$1HTTP\$1CLIENT
<a name="cmake-no-http-client"></a>

Se`ON`, impedisce che il client HTTP predefinito specifico della piattaforma venga integrato nella libreria. *Se attivo, sarà necessario fornire l'implementazione del client HTTP specifica per la piattaforma.*

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### REGENERATE\$1CLIENTS
<a name="cmake-regenerate-clients"></a>

Se`ON`, questo parametro elimina tutto il codice generato e genera le directory dei client dalla cartella. `code-generation/api-definitions` Esempio:

```
-DREGENERATE_CLIENTS=1
```

**Nota**  
[Per utilizzare il `REGENERATE_CLIENTS` parametro, devi avere [Python 2.7](https://www.python.org/downloads/), Java ([JDK 1.8\$1](http://openjdk.java.net/install/)) e Maven installati e nel tuo.](https://maven.apache.org/) `PATH`

### REGENERATE\$1DEFAULTS
<a name="cmake-regenerate-defaults"></a>

Se`ON`, questo parametro elimina tutto il codice predefinito generato e lo genera nuovamente dalla cartella. `code-generation/defaults` Esempio:

```
-DREGENERATE_DEFAULTS=1
```

**Nota**  
[Per utilizzare il `REGENERATE_DEFAULTS` parametro, devi avere [Python 2.7](https://www.python.org/downloads/), Java ([JDK 1.8\$1](http://openjdk.java.net/install/)) e Maven installati e nel tuo.](https://maven.apache.org/) `PATH`

### SIMPLE\$1INSTALL
<a name="cmake-simple-install"></a>

Se`ON`, il processo di installazione non inserisce le directory intermedie specifiche della piattaforma sotto e. `bin/` `lib/` Attiva `OFF` se devi creare versioni multipiattaforma in un'unica directory di installazione.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### TARGET\$1ARCH
<a name="cmake-target-arch"></a>

Per eseguire la compilazione incrociata o la creazione per una piattaforma mobile, devi specificare la piattaforma di destinazione. Per impostazione predefinita, la build rileva il sistema operativo host e crea per il sistema operativo rilevato.

**Nota**  
Quando *TARGET\$1ARCH* è *ANDROID*, sono disponibili opzioni aggiuntive. Vedi [ CMake Variabili e opzioni Android](#cmake-android-variables).

Valori  
 *WINDOWS* \$1 *LINUX* \$1 *APPLE* \$1 *ANDROID* 

### USA CRT\$1HTTP\$1CLIENT
<a name="cmake-USE_CRT_HTTP_CLIENT"></a>

Se`ON`, usa il client HTTP Common Runtime e i sistemi legacy come libcurl non sono WinHttp compilati o inclusi.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### USE\$1IXML\$1HTTP\$1REQUEST\$12
<a name="cmake-USE_IXML_HTTP_REQUEST_2"></a>

Solo per Windows. Se`ON`, utilizzate l'oggetto com IXml HttpRequest 2 per lo stack HTTP.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### USE\$1OPENSSL
<a name="cmake-use-openssl"></a>

Se`ON`, l'SDK crea utilizzando OpenSSL; in caso contrario, utilizza. [https://github.com/awslabs/aws-lc](https://github.com/awslabs/aws-lc) `AWS-LC`è una libreria crittografica generica gestita dal team di crittografia e dai relativi clienti. AWS AWS `OFF`La rotazione del parametro si installa `AWS-LC` in sostituzione di OpenSSL nella directory predefinita del sistema. Non utilizzare se nel sistema è già presente un'installazione OpenSSL.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### USE\$1TLS\$1V1\$12
<a name="cmake-USE_TLS_V1_2"></a>

Se`ON`, il client HTTP applica TLS 1.2.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### USE\$1TLS\$1V1\$13
<a name="cmake-USE_TLS_V1_3"></a>

Se`ON`, il client HTTP applica TLS 1.3.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

## CMake Variabili e opzioni Android
<a name="cmake-android-variables"></a>

*Utilizza le seguenti variabili quando crei una build Android dell'SDK (quando [TARGET\$1ARCH](#cmake-target-arch) è impostato su ANDROID).*

**Topics**
+ [ANDROID\$1ABI](#cmake-android-abi)
+ [ANDROID\$1BUILD\$1CURL](#cmake-ANDROID_BUILD_CURL)
+ [ANDROID\$1BUILD\$1OPENSSL](#cmake-ANDROID_BUILD_OPENSSL)
+ [ANDROID\$1BUILD\$1ZLIB](#cmake-ANDROID_BUILD_ZLIB)
+ [ANDROID\$1NATIVE\$1 API\$1LEVEL](#cmake-android-native-api-level)
+ [ANDROID\$1STL](#cmake-android-stl)
+ [NOME\$1TOOLCHAIN\$1ANDROIDE](#cmake-android-toolchain-name)
+ [DISABILITARE\$1ANDROID\$1STANDALONE\$1BUILD](#cmake-disable-android-standalone-build)
+ [NDK\$1DIR](#cmake-ndk-dir)

### ANDROID\$1ABI
<a name="cmake-android-abi"></a>

Solo Android. Controlla per quale Application Binary Interface (ABI) il codice di output.

**Nota**  
Al momento non tutti i valori ABI Android validi sono supportati.

Valori  
 *arm64* ****\$1 *armeabi-v7a* \$1 x86\$164 \$1 x86 \$1 mips64 \$1 mips**** 

Predefinita  
 *armeabi-v7a* 

### ANDROID\$1BUILD\$1CURL
<a name="cmake-ANDROID_BUILD_CURL"></a>

Solo per Android. Se`ON`, costruisci anche curl. 

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### ANDROID\$1BUILD\$1OPENSSL
<a name="cmake-ANDROID_BUILD_OPENSSL"></a>

Solo per Android. Se`ON`, crea anche OpenSSL.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### ANDROID\$1BUILD\$1ZLIB
<a name="cmake-ANDROID_BUILD_ZLIB"></a>

Solo per Android. Se`ON`, crea anche Zlib.

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *ACCESO* 

### ANDROID\$1NATIVE\$1 API\$1LEVEL
<a name="cmake-android-native-api-level"></a>

Solo Android. Controlla il livello di API su cui si basa l'SDK. Se imposti [ANDROID\$1STL su gnustl](#cmake-android-stl)*, puoi scegliere qualsiasi livello* di API. *Se usi *libc\$1\$1*, devi usare un livello API di almeno 21.*

Predefinita  
Varia in base alla scelta STL.

### ANDROID\$1STL
<a name="cmake-android-stl"></a>

Solo per Android. Controlla il tipo di libreria standard C\$1\$1 utilizzato dall'SDK.

**Importante**  
*Se si utilizzano le `gnustl` opzioni, possono verificarsi problemi di prestazioni all'interno dell'SDK; consigliamo vivamente di utilizzare libc\$1\$1\$1shared o *libc\$1\$1\$1static*.*

Valori  
 **libc\$1\$1\$1shared** **\$1* libc\$1\$1\$1static \$1 gnustl\$1shared \$1 gnustl\$1static* 

Predefinita  
 *libc\$1\$1\$1condiviso* 

### NOME\$1TOOLCHAIN\$1ANDROIDE
<a name="cmake-android-toolchain-name"></a>

Solo per Android. Controlla quale compilatore viene utilizzato per creare l'SDK.

**Nota**  
Poiché GCC è obsoleto da Android NDK, consigliamo di utilizzare il valore predefinito.

Predefinita  
 *standalone-clang* 

### DISABILITARE\$1ANDROID\$1STANDALONE\$1BUILD
<a name="cmake-disable-android-standalone-build"></a>

Solo per Android. Per impostazione predefinita, le build Android utilizzano una toolchain autonoma basata su clang costruita tramite script NDK. *Per utilizzare la tua toolchain, attiva questa opzione.*

Valori  
 **ATTIVATO \$1 DISATTIVATO** 

Predefinita  
 *SPENTO* 

### NDK\$1DIR
<a name="cmake-ndk-dir"></a>

Solo per Android. Specifica un percorso di override in cui il sistema di build dovrebbe trovare l'NDK Android. Per impostazione predefinita, il sistema di compilazione controlla le variabili di ambiente (`ANDROID_NDK`) se questa variabile non è impostata.

# Configurazione e utilizzo della registrazione nell' AWS SDK for C\$1\$1
<a name="logging"></a>

 AWS SDK per C\$1\$1 Include una registrazione configurabile che genera un record delle azioni eseguite dall'SDK durante l'esecuzione. Per abilitare la registrazione, imposta `LogLevel` of sulla verbosità appropriata `SDKOptions` per la tua applicazione.

```
    Aws::SDKOptions options;
    options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
```

Sono disponibili sette livelli di verbosità tra cui scegliere. Il valore predefinito è `Off` e non verrà generato alcun registro. `Trace`genererà il massimo livello di dettaglio e `Fatal` genererà il minor numero di messaggi che riportano solo condizioni di errore irreversibili.

Una volta abilitata la registrazione nell'applicazione, l'SDK genererà i file di registro nella directory eseguibile seguendo lo schema di denominazione predefinito di. `aws_sdk_<date>.log` Il file di registro generato dall'opzione di denominazione del prefisso si ripete una volta all'ora per consentire l'archiviazione o l'eliminazione dei file di registro.

Le versioni successive dell'SDK dipendono sempre più dalle librerie Common Runtime (CRT) sottostanti AWS . Queste librerie forniscono funzionalità comuni e operazioni di base tra. SDKs Per impostazione predefinita, tutti i messaggi di registro delle librerie CRT verranno reindirizzati all'SDK for C\$1\$1. Il livello di registro e il sistema di registrazione specificati per l'SDK for C\$1\$1 si applicano anche al CRT. 

Nell'esempio precedente, il CRT erediterà `LogLevel::Info` e registrerà anche i messaggi a livello dello `Info` stesso file.

È possibile controllare in modo indipendente la registrazione per le librerie CRT, reindirizzandone l'output in un file di registro separato o impostando un livello di registro diverso per i messaggi dal CRT. Spesso può essere utile ridurre la verbosità delle librerie CRT in modo che non sovraccarichino i log. Ad esempio, il livello di registro per il *solo* output CRT può essere impostato come segue: `Warn`

```
options.loggingOptions.crt_logger_create_fn =
    [](){ return Aws::MakeShared<Aws::Utils::Logging::DefaultCRTLogSystem>("CRTLogSystem", Aws::Utils::Logging::LogLevel::Warn); };
```

Utilizzando facoltativamente il metodo`InitializeAWSLogging`, è possibile controllare il livello di verbosità e l'output del registro di. `DefaultLogSystem` È possibile configurare il prefisso del nome del file di registro o reindirizzare l'output su uno stream anziché su un file. 

```
Aws::Utils::Logging::InitializeAWSLogging(
    Aws::MakeShared<Aws::Utils::Logging::DefaultLogSystem>(
        "RunUnitTests", Aws::Utils::Logging::LogLevel::Trace, "aws_sdk_"));
```

In alternativa, invece di utilizzare il`DefaultLogSystem`, è possibile utilizzare questo metodo anche per fornire un'implementazione di registrazione personalizzata.

```
InitializeAWSLogging(Aws::MakeShared<CustomLoggingSystem>());
```

Se chiami method`InitializeAWSLogging`, libera risorse alla fine del programma `ShutdownAWSLogging` chiamando.

```
Aws::Utils::Logging::ShutdownAWSLogging();
```

 **Esempio di test di integrazione con registrazione** 

```
#include <aws/external/gtest.h>

#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/core/utils/logging/DefaultLogSystem.h>
#include <aws/core/utils/logging/AWSLogging.h>

#include <iostream>

int main(int argc, char** argv)
{
    Aws::Utils::Logging::InitializeAWSLogging(
        Aws::MakeShared<Aws::Utils::Logging::DefaultLogSystem>(
            "RunUnitTests", Aws::Utils::Logging::LogLevel::Trace, "aws_sdk_"));
    ::testing::InitGoogleTest(&argc, argv);
    int exitCode = RUN_ALL_TESTS();
    Aws::Utils::Logging::ShutdownAWSLogging();
    return exitCode;
}
```

 **Esempio di sottoclasse di registrazione `Aws::Utils::Logging::DefaultLogSystem` personalizzata** 

 Il codice seguente mostra come sottoclassare la `Aws::Utils::Logging::DefaultLogSystem` classe, che fa parte di. AWS SDK per C\$1\$1 Questo esempio sostituisce la funzione `ProcessFormattedStatement` virtuale per personalizzare la registrazione. 

 `Aws::Utils::Logging::DefaultLogSystem`è una delle numerose classi di AWS SDK per C\$1\$1 quella `Aws::Utils::Logging::LogSystemInterface` sottoclasse per la registrazione personalizzata. 

```
class LogSystemOverride : public Aws::Utils::Logging::DefaultLogSystem {
public:
    explicit LogSystemOverride(Aws::Utils::Logging::LogLevel logLevel,
                               const Aws::String &logPrefix)
            : DefaultLogSystem(logLevel, logPrefix), mLogToStreamBuf(false) {}

    const Aws::Utils::Stream::SimpleStreamBuf &GetStreamBuf() const {
        return mStreamBuf;
    }

    void setLogToStreamBuf(bool logToStreamBuf) {
        mLogToStreamBuf = logToStreamBuf;
    }

protected:

    void ProcessFormattedStatement(Aws::String &&statement) override {
        if (mLogToStreamBuf) {
            std::lock_guard<std::mutex> lock(mStreamMutex);
            mStreamBuf.sputn(statement.c_str(), statement.length());
        }

        DefaultLogSystem::ProcessFormattedStatement(std::move(statement));
    }

private:
    Aws::Utils::Stream::SimpleStreamBuf mStreamBuf;
    // Use a mutex when writing to the buffer because
    // ProcessFormattedStatement can be called from multiple threads.
    std::mutex mStreamMutex;
    std::atomic<bool> mLogToStreamBuf;
};
```

```
int main(int argc, char **argv) {
    Aws::SDKOptions options;
    options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Trace;
    auto logSystemOverride = Aws::MakeShared<LogSystemOverride>("AllocationTag",
                                                                options.loggingOptions.logLevel,
                                                                options.loggingOptions.defaultLogPrefix);
    options.loggingOptions.logger_create_fn = [logSystemOverride]() {
        return logSystemOverride;
    };

    Aws::InitAPI(options);  // Call Aws::InitAPI only once in an application.
    {
        Aws::Client::ClientConfiguration clientConfig;
        // Optional: Set to the AWS Region (overrides config file).
        // clientConfig.region = "us-east-1";

        Aws::S3::S3Client s3Client(clientConfig);

        logSystemOverride->setLogToStreamBuf(true);
        auto outcome = s3Client.ListBuckets();
        if (!outcome.IsSuccess()) {
            std::cerr << "ListBuckets error: " <<
                      outcome.GetError().GetExceptionName() << " " <<
                      outcome.GetError().GetMessage() << std::endl;
        }

        logSystemOverride->setLogToStreamBuf(false);

        std::cout << "Log for ListBuckets" << std::endl;
        std::cout << logSystemOverride->GetStreamBuf().str() << std::endl;
    }

    Aws::ShutdownAPI(options);

    return 0;
}
```

Vedi l'[esempio completo](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sdk-customization/override_default_logger.cpp) su. GitHub

# Sovrascrivere il client HTTP in AWS SDK per C\$1\$1
<a name="overriding-http-client"></a>

Il client HTTP predefinito per Windows è [WinHTTP](https://msdn.microsoft.com/en-us/library/windows/desktop/aa382925%28v=vs.85%29.aspx). Il client HTTP predefinito per tutte le altre piattaforme è [curl](https://curl.haxx.se/). 

Facoltativamente, puoi sovrascrivere l'impostazione predefinita del client HTTP creando un client personalizzato da passare `HttpClientFactory` al costruttore di qualsiasi client di servizio. Per sovrascrivere il client HTTP, l'SDK deve essere creato con il supporto curl. Il supporto Curl è integrato di default in Linux e macOS, ma sono necessari passaggi aggiuntivi per creare su Windows. Per ulteriori informazioni sulla creazione dell'SDK su Windows con supporto curl, consulta. [Creazione di AWS SDK per C\$1\$1 su Windows](setup-windows.md)

# Controllo degli iostreams utilizzati da `HttpClient` e nel `AWSClient` AWS SDK per C\$1\$1
<a name="configuring-iostreams"></a>

Per impostazione predefinita, tutte le risposte utilizzano un flusso di input supportato da un`stringbuf`. Se necessario, puoi sovrascrivere il comportamento predefinito. Ad esempio, se utilizzi Amazon S3 `GetObject` e non desideri caricare l'intero file in memoria, puoi usare `IOStreamFactory` in `AmazonWebServiceRequest` per passare un lambda per creare un flusso di file.

 **Esempio di richiesta di flusso di file** 

```
 //! Use a custom response stream when downloading an object from an Amazon Simple
//! Storage Service (Amazon S3) bucket.
/*!
  \param bucketName: The Amazon S3 bucket name.
  \param objectKey: The object key.
  \param filePath: File path for custom response stream.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */

bool AwsDoc::SdkCustomization::customResponseStream(const Aws::String &bucketName,
                                                    const Aws::String &objectKey,
                                                    const Aws::String &filePath,
                                                    const Aws::Client::ClientConfiguration &clientConfiguration) {

    Aws::S3::S3Client s3_client(clientConfiguration);

    Aws::S3::Model::GetObjectRequest getObjectRequest;
    getObjectRequest.WithBucket(bucketName).WithKey(objectKey);

    getObjectRequest.SetResponseStreamFactory([filePath]() {
            return Aws::New<Aws::FStream>(
                    "FStreamAllocationTag", filePath, std::ios_base::out);
    });

    Aws::S3::Model::GetObjectOutcome getObjectOutcome = s3_client.GetObject(
            getObjectRequest);

    if (getObjectOutcome.IsSuccess()) {
        std::cout << "Successfully retrieved object to file " << filePath << std::endl;
    }
    else {
        std::cerr << "Error getting object. "
                  << getObjectOutcome.GetError().GetMessage() << std::endl;
    }

    return getObjectOutcome.IsSuccess();
}
```

**Nota**  
 C'è altro da fare GitHub. Trovate l'esempio completo nel [AWS Code Examples Repository.](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sdk-customization#code-examples) 

# Utilizzo di una libreria libcrypto personalizzata in AWS SDK per C\$1\$1
<a name="libcrypto"></a>

 Per impostazione predefinita, AWS SDK per C\$1\$1 utilizza la libreria crittografica di sistema predefinita per la sicurezza del livello di trasporto. Tuttavia, l'SDK for C\$1\$1 può essere configurato opzionalmente per utilizzare una libreria libcrypto diversa quando si crea l'SDK dal codice sorgente. Ciò significa funzionalmente che tutte le operazioni crittografiche verranno dirottate verso un'implementazione personalizzata di OpenSSL. Ad esempio, potreste voler utilizzare la [https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)libreria in [modalità FIPS per ottenere uno standard FIPS](https://aws.amazon.com/blogs/security/aws-lc-is-now-fips-140-3-certified/) nella vostra applicazione.

## Come creare una libcrypto personalizzata nell'SDK for C\$1\$1
<a name="howToBuildLibcrypto"></a>

### Passaggio 1: crea o ottieni la tua libreria libcrypto
<a name="buildObtainLibCrypto"></a>

[https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)Questo è un esempio di libreria libcrypto alternativa, ma qualsiasi distribuzione di OpenSSL o equivalente a OpenSSL funzionerebbe. 

L'SDK for C\$1\$1 e la sua dipendenza CRT usano entrambi libcrypto per le loro funzioni crittografiche ed entrambi devono gestire le dipendenze allo stesso modo. L'SDK for C\$1\$1 dipende da due diversi client HTTP a seconda che la richiesta utilizzi la funzionalità dell'SDK. `CRT S3` Il CRT dipende in particolare da [s2n](https://github.com/aws/s2n-tls), un'implementazione TLS inizializzata all'avvio. Sia l'SDK che il team s2n dispongono di un parametro cmake per forzare l'uso di una libreria libcrypto condivisa indipendentemente dal valore di. [BUILD\$1SHARED\$1LIBS](cmake-params.md#cmake-build-shared-libs) In genere, si desidera che il client HTTP CRT e il normale client HTTP utilizzino lo stesso libcrypto. In questo caso, ciò significherebbe che entrambi fanno riferimento a OpenSSL nell'albero delle dipendenze. L'SDK lo fornisce tramite [AWS\$1USE\$1CRYPTO\$1SHARED\$1LIBS](cmake-params.md#cmake-use-crypto) e s2n (per le chiamate basate su CRT) lo fornisce tramite. [https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39](https://github.com/aws/s2n-tls/blob/20010e6b75a09ab5a0fc69a86265d3cc4c103b91/CMakeLists.txt#L39) La risoluzione delle dipendenze è la stessa tra queste due librerie e in genere sono impostate per corrispondere, sebbene sia possibile impostarle esplicitamente in modo che siano diverse.

Ad esempio, per utilizzarla `AWS-LC` come libreria libcrypto, dovresti crearla come segue:

```
git clone --depth 1 -b fips-2022-11-02 https://github.com/aws/aws-lc && \
    cd aws-lc && \
    mkdir build && \
    cd build && \
    cmake -G Ninja \
        -DCMAKE_INSTALL_LIBDIR=lib \
        -DCMAKE_INSTALL_PREFIX=/lc-install .. && \
    cmake --build . && \
    cmake --install . && \
    rm -rf ./* && \
    cmake -G Ninja \
        -DBUILD_SHARED_LIBS=ON \
        -DCMAKE_INSTALL_LIBDIR=lib \
        -DCMAKE_INSTALL_PREFIX=/lc-install .. && \
    cmake --build . && \
    cmake --install .
```

### Passaggio 2: crea curl dal codice sorgente o usa una distribuzione curl con la tua libreria libcrypto
<a name="BuildCurlWithLibCrypto"></a>

L'SDK for C\$1\$1 richiede che sul sistema sia installato un client HTTP che verrà utilizzato per effettuare richieste HTTP. Il client HTTP deve essere creato con libcrypto che intendi utilizzare. Il client HTTP è responsabile delle operazioni TLS e, pertanto, utilizza la libreria libcrypto.

 Nell'esempio seguente, la libreria curl viene ricostruita utilizzando una versione installata di. `AWS-LC`

```
git clone --depth 1 -b curl-8_5_0 https://github.com/curl/curl && \
    cd curl && \
    autoreconf -fi && \
    mkdir build && \
    cd build && \
    ../configure \
        --enable-warnings \
        --enable-werror \
        --with-openssl=/lc-install \
        --prefix=/curl-install && \
    make && \
    make install
```

### Passaggio 3: Costruisci l'SDK usando le librerie libcrypto e curl
<a name="BuildUsingLibcryptoCurl"></a>

L'SDK for C\$1\$1 ora può essere creato utilizzando gli artefatti libcrypto e curl creati in precedenza. Questa build dell'SDK utilizzerà la libreria libcrypto personalizzata per tutte le funzionalità crittografiche.

```
git clone --depth 1 --recurse-submodules https://github.com/aws/aws-sdk-cpp \
    cd aws-sdk-cpp && \
    mkdir build && \
    cd build && \
    cmake -G Ninja \
        -DCMAKE_PREFIX_PATH="/curl-install;/lc-install;" \
        -DBUILD_ONLY="s3" \
        -DCMAKE_INSTALL_PREFIX=/sdk-install \
        -DAUTORUN_UNIT_TESTS=OFF .. && \
    cmake --build . && \
    cmake --install .
```

## Riunire tutto in un'immagine docker
<a name="dockerImageForLibcrypto"></a>

Il seguente file Docker di esempio mostra come implementare questi passaggi nell'ambiente Amazon Linux 2023.

```
        
# User AL2023 Base image
FROM public.ecr.aws/amazonlinux/amazonlinux:2023

# Install Dev Tools
RUN yum groupinstall -y "Development Tools"
RUN yum install -y cmake3 ninja-build

# Build and install AWS-LC on the fips branch both statically and dynamically.
RUN git clone --depth 1 -b fips-2022-11-02 https://github.com/aws/aws-lc && \\
    cd aws-lc && \\
    mkdir build && \\
    cd build && \\
    cmake -G Ninja \\
        -DCMAKE_INSTALL_LIBDIR=lib \\
        -DCMAKE_INSTALL_PREFIX=/lc-install .. && \\
    cmake --build . && \\
    cmake --install . && \\
    rm -rf ./* && \\
    cmake -G Ninja \\
        -DBUILD_SHARED_LIBS=ON \\
        -DCMAKE_INSTALL_LIBDIR=lib \\
        -DCMAKE_INSTALL_PREFIX=/lc-install .. && \\
    cmake --build . && \\
    cmake --install .

# Build and install curl targeting AWS-LC as openssl
RUN git clone --depth 1 -b curl-8_5_0 https://github.com/curl/curl && \\
    cd curl && \\
    autoreconf -fi && \\
    mkdir build && \\
    cd build && \\
    ../configure \\
        --enable-warnings \\
        --enable-werror \\
        --with-openssl=/lc-install \\
        --prefix=/curl-install && \\
    make && \\
    make install

# Build and install SDK using the Curl and AWS-LC targets previously built
RUN git clone --depth 1 --recurse-submodules https://github.com/aws/aws-sdk-cpp \\
    cd aws-sdk-cpp && \\
    mkdir build && \\
    cd build && \\
    cmake -G Ninja \\
        -DCMAKE_PREFIX_PATH="/curl-install;/lc-install;" \\
        -DBUILD_ONLY="s3" \\
        -DCMAKE_INSTALL_PREFIX=/sdk-install \\
        -DAUTORUN_UNIT_TESTS=OFF .. && \\
    cmake --build . && \\
    cmake --install .
```