

 AWS Cloud9 non è più disponibile per i nuovi clienti. I clienti esistenti di AWS Cloud9 possono continuare a utilizzare il servizio come di consueto. [Ulteriori informazioni](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

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

# Tutorial C\$1\$1 per AWS Cloud9
<a name="sample-cplusplus"></a>

Questo tutorial consente di eseguire codice C\$1\$1 in un ambiente di AWS Cloud9 sviluppo. Il codice utilizza anche risorse fornite da [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/welcome.html), una libreria open source modularizzata multipiattaforma che puoi usare per connetterti ad Amazon Web Services.

Seguire questo tutorial e creare questo esempio potrebbe comportare addebiti sul tuo AWS account. Questi includono possibili addebiti per servizi come Amazon EC2 e Amazon S3. Per ulteriori informazioni, consulta [Prezzi di Amazon EC2](https://aws.amazon.com/ec2/pricing/) e [Prezzi di Amazon S3](https://aws.amazon.com/s3/pricing/).

**Topics**
+ [Prerequisiti](#sample-cplusplus-prereqs)
+ [Fase 1: installare g\$1\$1 e i pacchetti di sviluppo richiesti](#sample-cplusplus-install)
+ [Passaggio 2: installazione CMake](#install-cmake)
+ [Fase 3: ottenere e costruire SDK per C\$1\$1](#install-cmake)
+ [Passaggio 4: Creare file C\$1\$1 e Lists CMake](#sample-cplusplus-sdk-code)
+ [Fase 5: costruire ed eseguire il codice C\$1\$1](#build-and-run-cpp)
+ [Fase 6: pulizia](#sample-cplusplus-clean-up)

## Prerequisiti
<a name="sample-cplusplus-prereqs"></a>

Prima di usare questo esempio, assicurati che la configurazione soddisfi i seguenti requisiti:
+ **È necessario disporre di un ambiente di sviluppo AWS Cloud9 EC2 esistente.** Nell'esempio si presume che tu disponga già di un ambiente EC2 connesso a un'istanza Amazon EC2 in cui viene eseguito Amazon Linux o Ubuntu Server. Se disponi di un altro tipo di ambiente o sistema operativo, potrebbe essere necessario adattare le istruzioni di questo esempio per configurare gli strumenti correlati. Per ulteriori informazioni, consulta [Creare un ambiente in AWS Cloud9](create-environment.md).
+ **L' AWS Cloud9 IDE per l'ambiente esistente è già aperto.** Quando apri un ambiente, AWS Cloud9 apre l'IDE per quell'ambiente nel tuo browser web. Per ulteriori informazioni, consulta [Aprire un ambiente in AWS Cloud9](open-environment.md).

## Fase 1: installare g\$1\$1 e i pacchetti di sviluppo richiesti
<a name="sample-cplusplus-install"></a>

Per costruire ed eseguire un'applicazione C \$1\$1, è necessaria un'utilità come `g++`, che è un compilatore C \$1\$1 fornito da [GNU Complier Collection (GCC)](https://gcc.gnu.org/).

Devi inoltre aggiungere i file di intestazione (pacchetti `-dev`) per `libcurl`, `libopenssl`, `libuuid`, `zlib` e, facoltativamente, `libpulse`per il supporto di Amazon Polly. 

Il processo di installazione degli strumenti di sviluppo varia leggermente a seconda che tu stia utilizzando un'istanza Amazon Linux/Amazon Linux 2 o un'istanza Ubuntu.

------
#### [ Amazon Linux-based systems ]

Puoi verificare se l'hai già `gcc` installato eseguendo il seguente comando nel AWS Cloud9 terminale:

```
g++ --version
```

Se `g++` non è installato, puoi farlo facilmente con parte del gruppo di pacchetti chiamato "Strumenti di sviluppo". Questi strumenti vengono aggiunti a un'istanza con il comando `yum groupinstall`:

```
sudo yum groupinstall "Development Tools"
```

Esegui `g++ --version` ancora una volta per confermare che il compilatore è installato.

Ora installa i pacchetti per le librerie richieste usando il programma di gestione dei pacchetti del sistema: 

```
sudo yum install libcurl-devel openssl-devel libuuid-devel pulseaudio-libs-devel
```

------
#### [ Ubuntu-based systems ]

Puoi verificare se l'hai già `gcc` installato eseguendo il seguente comando nel AWS Cloud9 terminale:

```
g++ --version
```

Se gcc non è installato, puoi farlo su un sistema basato su Ubuntu. eseguendo i seguenti comandi:

```
sudo apt update
sudo apt install build-essential
sudo apt-get install manpages-dev
```

Esegui `g++ --version` ancora una volta per confermare che il compilatore è installato.

Ora installa i pacchetti per le librerie richieste usando il programma di gestione dei pacchetti del sistema: 

```
sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev zlib1g-dev libpulse-dev
```

------

## Passaggio 2: installazione CMake
<a name="install-cmake"></a>

 Devi installare lo strumento `cmake`, che automatizza il processo di costruzione di file eseguibili dal codice sorgente. 

1. Nella finestra del terminale IDE, esegui il comando seguente per ottenere l'archivio richiesto:

   ```
   wget https://cmake.org/files/v3.18/cmake-3.18.0.tar.gz
   ```

1. Estrai i file dall'archivio e accedi alla directory che contiene i file decompressi:

   ```
   tar xzf cmake-3.18.0.tar.gz
   cd cmake-3.18.0
   ```

1. Quindi, esegui uno script di bootstrap e installa `cmake` eseguendo i comandi seguenti:

   ```
   ./bootstrap
   make
   sudo make install
   ```

1. Conferma di aver installato lo strumento eseguendo il comando seguente:

   ```
   cmake --version
   ```

## Fase 3: ottenere e costruire SDK per C\$1\$1
<a name="install-cmake"></a>

Per configurare l' AWS SDK per C\$1\$1, puoi creare l'SDK direttamente dal codice sorgente o scaricare le librerie utilizzando un gestore di pacchetti. Puoi trovare dettagli sulle opzioni disponibili in [Guida introduttiva all'uso dell' AWS SDK for](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/getting-started.html) C\$1\$1 *AWS SDK per C\$1\$1 nella* Guida per gli sviluppatori. 

Questo esempio illustra l'utilizzo di `git` per clonare il codice sorgente SDK e `cmake` per costruire l'SDK per C\$1\$1.

1. Clona il repository remoto e ottieni tutti i sottomoduli git in modo ricorsivo per l'ambiente AWS Cloud9 eseguendo i comandi seguenti nel terminale:

   ```
   git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp
   ```

1. Passa alla nuova `aws-sdk-cpp` directory, crea una sottodirectory in cui creare l' AWS SDK for C\$1\$1, quindi vai a quella:

   ```
   cd aws-sdk-cpp
   mkdir sdk_build
   cd sdk_build
   ```

1. 
**Nota**  
Per risparmiare tempo, in questa fase si costruisce solo la sezione Amazon S3 di AWS SDK per C\$1\$1. Se desideri costruire l'SDK completo, ometti `-DBUILD_ONLY=s3` dal comando `cmake`.  
Il completamento dell'SDK per C\$1\$1 può richiedere più di un'ora, in base alle risorse di calcolo disponibili per l'istanza Amazon EC2 o i server.

   Utilizza `cmake` per costruire la sezione Amazon S3 dell'SDK per C\$1\$1 nella directory `sdk_build` eseguendo il comando seguente:

   ```
   cmake .. -DBUILD_ONLY=s3
   ```

1. Esegui il comando `make install` in modo l'SDK costruito sia accessibile:

   ```
   sudo make install
   cd ..
   ```

## Passaggio 4: Creare file C\$1\$1 e Lists CMake
<a name="sample-cplusplus-sdk-code"></a>

In questa fase si crea un file `C++` che permette agli utenti del progetto di interagire con i bucket Amazon S3.

Puoi anche creare un file `CMakeLists.txt` che fornisce istruzioni utilizzate da `cmake` per costruire la libreria C\$1\$1.

1. Nell' AWS Cloud9 IDE, create un file con questo contenuto e salvate il file con il nome `s3-demo.cpp` nella radice (`/`) del vostro ambiente.

   ```
   #include <iostream>
   #include <aws/core/Aws.h>
   #include <aws/s3/S3Client.h>
   #include <aws/s3/model/Bucket.h>
   #include <aws/s3/model/CreateBucketConfiguration.h>
   #include <aws/s3/model/CreateBucketRequest.h>
   #include <aws/s3/model/DeleteBucketRequest.h>
   
   // Look for a bucket among all currently available Amazon S3 buckets.
   bool FindTheBucket(const Aws::S3::S3Client &s3Client,
                      const Aws::String &bucketName) {
   
       Aws::S3::Model::ListBucketsOutcome outcome = s3Client.ListBuckets();
   
       if (outcome.IsSuccess()) {
   
           std::cout << "Looking for a bucket named '" << bucketName << "'..."
                     << std::endl << std::endl;
   
           Aws::Vector<Aws::S3::Model::Bucket> bucket_list =
                   outcome.GetResult().GetBuckets();
   
           for (Aws::S3::Model::Bucket const &bucket: bucket_list) {
               if (bucket.GetName() == bucketName) {
                   std::cout << "Found the bucket." << std::endl << std::endl;
   
                   return true;
               }
           }
   
           std::cout << "Could not find the bucket." << std::endl << std::endl;
       } else {
           std::cerr << "listBuckets error: "
                     << outcome.GetError().GetMessage() << std::endl;
       }
   
       return outcome.IsSuccess();
   }
   
   // Create an Amazon S3 bucket.
   bool CreateTheBucket(const Aws::S3::S3Client &s3Client,
                        const Aws::String &bucketName,
                        const Aws::String &region) {
   
       std::cout << "Creating a bucket named '"
                 << bucketName << "'..." << std::endl << std::endl;
   
       Aws::S3::Model::CreateBucketRequest request;
       request.SetBucket(bucketName);
   
       if (region != "us-east-1") {
           Aws::S3::Model::CreateBucketConfiguration createBucketConfig;
           createBucketConfig.SetLocationConstraint(
                   Aws::S3::Model::BucketLocationConstraintMapper::GetBucketLocationConstraintForName(
                           region));
           request.SetCreateBucketConfiguration(createBucketConfig);
       }
   
       Aws::S3::Model::CreateBucketOutcome outcome =
               s3Client.CreateBucket(request);
   
       if (outcome.IsSuccess()) {
           std::cout << "Bucket created." << std::endl << std::endl;
       } else {
           std::cerr << "createBucket error: "
                     << outcome.GetError().GetMessage() << std::endl;
       }
   
       return outcome.IsSuccess();
   }
   
   // Delete an existing Amazon S3 bucket.
   bool DeleteTheBucket(const Aws::S3::S3Client &s3Client,
                        const Aws::String &bucketName) {
   
       std::cout << "Deleting the bucket named '"
                 << bucketName << "'..." << std::endl << std::endl;
   
       Aws::S3::Model::DeleteBucketRequest request;
       request.SetBucket(bucketName);
   
       Aws::S3::Model::DeleteBucketOutcome outcome =
               s3Client.DeleteBucket(request);
   
       if (outcome.IsSuccess()) {
           std::cout << "Bucket deleted." << std::endl << std::endl;
       } else {
           std::cerr << "deleteBucket error: "
                     << outcome.GetError().GetMessage() << std::endl;
       }
   
       return outcome.IsSuccess();
   }
   
   #ifndef EXCLUDE_MAIN_FUNCTION
   // Create an S3 bucket and then delete it.
   // Before and after creating the bucket, and again after deleting the bucket,
   // try to determine whether that bucket still exists. 
   int main(int argc, char *argv[]) {
   
       if (argc < 3) {
           std::cout << "Usage: s3-demo <bucket name> <AWS Region>" << std::endl
                     << "Example: s3-demo my-bucket us-east-1" << std::endl;
           return 1;
       }
   
       Aws::SDKOptions options;
       Aws::InitAPI(options);
       {
           Aws::String bucketName = argv[1];
           Aws::String region = argv[2];
   
           Aws::Client::ClientConfiguration config;
   
           config.region = region;
   
           Aws::S3::S3Client s3Client(config);
   
           if (!FindTheBucket(s3Client, bucketName)) {
               return 1;
           }
   
           if (!CreateTheBucket(s3Client, bucketName, region)) {
               return 1;
           }
   
           if (!FindTheBucket(s3Client, bucketName)) {
               return 1;
           }
   
           if (!DeleteTheBucket(s3Client, bucketName)) {
               return 1;
           }
   
           if (!FindTheBucket(s3Client, bucketName)) {
               return 1;
           }
       }
       Aws::ShutdownAPI(options);
   
       return 0;
   }
   #endif  // EXCLUDE_MAIN_FUNCTION
   ```

1. Crea un secondo file con questo contenuto e salvalo con il nome `CMakeLists.txt` nella radice (`/`) dell'ambiente. Questo file ti consente di compilare il tuo codice in un file eseguibile.

   ```
   # A minimal CMakeLists.txt file for the AWS SDK for C++.
   
   # The minimum version of CMake that will work.
   cmake_minimum_required(VERSION 2.8)
   
   # The project name.
   project(s3-demo)
   
   # Locate the AWS SDK for C++ package.
   set(AWSSDK_ROOT_DIR, "/usr/local/")
   set(BUILD_SHARED_LIBS ON)
   find_package(AWSSDK REQUIRED COMPONENTS s3)
   
   # The executable name and its source files.
   add_executable(s3-demo s3-demo.cpp)
   
   # The libraries used by your executable.
   target_link_libraries(s3-demo ${AWSSDK_LINK_LIBRARIES})
   ```

## Fase 5: costruire ed eseguire il codice C\$1\$1
<a name="build-and-run-cpp"></a>

1. Nella directory principale dell'ambiente in cui hai salvato `s3-demo.cpp` e `CMakeLists.txt`, esegui `cmake` per costruire il progetto:

   ```
   cmake . 
   make
   ```

1. Ora puoi eseguire il programma dalla riga di comando. Nel comando seguente, sostituisci `my-unique-bucket-name` con un nome univoco per il bucket Amazon S3 e, se necessario, sostituisci `us-east-1` con l'identificatore di un'altre regione AWS in cui desideri creare un bucket.

   ```
   ./s3-demo my-unique-bucket-name us-east-1
   ```

   Se il comando viene eseguito correttamente, verrà visualizzato un output simile al seguente: 

   ```
   Looking for a bucket named 'my-unique-bucket-name'...
   
   Could not find the bucket.
   
   Creating a bucket named 'my-unique-bucket-name'...
   
   Bucket created.
   
   Looking for a bucket named 'my-unique-bucket-name'...
   
   Found the bucket.
   
   Deleting the bucket named 'my-unique-bucket-name'...
   
   Bucket deleted.
   
   Looking for a bucket named 'my-unique-bucket-name'...
   
   Could not find the bucket.
   ```

## Fase 6: pulizia
<a name="sample-cplusplus-clean-up"></a>

Per evitare addebiti continui AWS sul tuo account dopo aver finito con questo esempio, elimina l'ambiente. Per istruzioni, consulta [Eliminazione di un ambiente in AWS Cloud9](delete-environment.md).