

 AWS Cloud9 ya no está disponible para nuevos clientes. Los clientes existentes de AWS Cloud9 pueden seguir utilizando el servicio con normalidad. [Más información](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Este tutorial le permite ejecutar código C\$1\$1 en un entorno de AWS Cloud9 desarrollo. El código también utiliza los recursos proporcionados por el [AWS SDK para C\$1\$1](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/welcome.html), una biblioteca modular, multiplataforma y de código abierto que puede utilizar para conectarse a Amazon Web Services.

Si sigue este tutorial y crea este ejemplo, es posible que se le cobren cargos a su AWS cuenta. Entre estos se incluyen posibles cargos por servicios como Amazon EC2 y Amazon S3. Para obtener más información, consulte [Precios de Amazon EC2](https://aws.amazon.com/ec2/pricing/) y [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/).

**Topics**
+ [Requisitos previos](#sample-cplusplus-prereqs)
+ [Paso 1: Instalar g\$1\$1 y los paquetes de desarrollo necesarios](#sample-cplusplus-install)
+ [Paso 2: Instalar CMake](#install-cmake)
+ [Paso 3: Obtener y compilar el SDK para C\$1\$1](#install-cmake)
+ [Paso 4: Crea archivos de C\$1\$1 y CMake Listas](#sample-cplusplus-sdk-code)
+ [Paso 5: Compilar y ejecutar el código de C\$1\$1](#build-and-run-cpp)
+ [Paso 6: limpiar](#sample-cplusplus-clean-up)

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

Antes de utilizar este ejemplo, asegúrese de que su configuración cumpla los siguientes requisitos:
+ **Debe tener un entorno de desarrollo AWS Cloud9 EC2 existente.** En este ejemplo, se da por hecho que ya tiene un entorno de EC2 que está conectado a una instancia de Amazon EC2 que ejecuta Amazon Linux o Ubuntu Server. Si tiene otro tipo de entorno o sistema operativo, es posible que tenga que adaptar las instrucciones de este ejemplo para configurar herramientas relacionadas. Para obtener más información, consulte [Crear un entorno en AWS Cloud9](create-environment.md).
+ **Ya tiene abierto el AWS Cloud9 IDE del entorno existente.** Al abrir un entorno, AWS Cloud9 abre el IDE de ese entorno en el navegador web. Para obtener más información, consulte [Abrir un entorno en AWS Cloud9](open-environment.md).

## Paso 1: Instalar g\$1\$1 y los paquetes de desarrollo necesarios
<a name="sample-cplusplus-install"></a>

Para compilar y ejecutar una aplicación de C\$1\$1, necesita una utilidad como `g++`, que sea un compilador de C\$1\$1 proporcionado por [GNU Complier Collection (GCC)](https://gcc.gnu.org/).

También tiene que agregar archivos de encabezado (paquetes `-dev`) para `libcurl`, `libopenssl`, `libuuid`, `zlib` y, de manera opcional, `libpulse` para obtener asistencia de Amazon Polly. 

El proceso de instalación de las herramientas de desarrollo varía ligeramente en función de si se utiliza una instancia de Amazon Linux/Amazon Linux 2 o una instancia de Ubuntu.

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

Puedes comprobar si ya lo has `gcc` instalado ejecutando el siguiente comando en la AWS Cloud9 terminal:

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

Si `g++` no está instalado, puede instalarlo fácilmente como parte del grupo de paquetes denominado “Herramientas de desarrollo”. Estas herramientas se agregan a una instancia con el comando `yum groupinstall`:

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

Ejecute `g++ --version` de nuevo para confirmar que se ha instalado el compilador.

Ahora instale los paquetes para las bibliotecas requeridas mediante el administrador de paquetes del sistema: 

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

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

Puede comprobar si ya lo ha `gcc` instalado ejecutando el siguiente comando en el AWS Cloud9 terminal:

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

Si GCC no está instalado, puede instalarlo en un sistema basado en Ubuntu mediante los siguientes comandos:

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

Ejecute `g++ --version` de nuevo para confirmar que se ha instalado el compilador.

Ahora instale los paquetes para las bibliotecas requeridas mediante el administrador de paquetes del sistema: 

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

------

## Paso 2: Instalar CMake
<a name="install-cmake"></a>

 Debe instalar la herramienta `cmake`, que automatiza el proceso de compilación de archivos ejecutables a partir del código fuente. 

1. En la ventana del terminal del IDE, ejecute el siguiente comando para obtener el archivo requerido:

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

1. Extraiga los archivos del archivo y vaya al directorio que contiene los archivos desempaquetados:

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

1. A continuación, ejecute un script de arranque y ejecute los comandos siguientes para instalar `cmake`:

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

1. Para confirmar que ha instalado la herramienta, ejecute el comando siguiente:

   ```
   cmake --version
   ```

## Paso 3: Obtener y compilar el SDK para C\$1\$1
<a name="install-cmake"></a>

Para configurar el AWS SDK para C\$1\$1, puedes compilarlo tú mismo directamente desde la fuente o descargar las bibliotecas mediante un administrador de paquetes. Encontrarás detalles sobre las opciones disponibles en [Cómo empezar a usar el AWS SDK para C\$1\$1](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/getting-started.html) en la *Guía para AWS SDK para C\$1\$1 desarrolladores*. 

En esta muestra se explica cómo usar `git` para clonar el código fuente del SDK y `cmake` para crear el SDK para C\$1\$1.

1. Clone el repositorio remoto y obtenga todos los submódulos de Git repetidamente para su entorno de AWS Cloud9 ejecutando el siguiente comando en el terminal:

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

1. Navega hasta el nuevo `aws-sdk-cpp` directorio, crea un subdirectorio en el que compilar el AWS SDK para C\$1\$1 y, a continuación, navega hasta ese directorio:

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

1. 
**nota**  
Para ahorrar tiempo, en este paso se crea solo la sección Amazon S3 del AWS SDK para C\$1\$1. Si desea crear el SDK completo, omita el fragmento `-DBUILD_ONLY=s3` del comando `cmake`.  
La creación del SDK para C\$1\$1 completo puede tardar más de una hora en completarse en función de los recursos informáticos disponibles para su instancia de Amazon EC2 o para su propio servidor.

   Use `cmake` para compilar la sección Amazon S3 del SDK para C\$1\$1 en el directorio `sdk_build` mediante la ejecución del siguiente comando:

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

1. A continuación, ejecute el comando `make install` para que se pueda acceder al SDK creado:

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

## Paso 4: Crea archivos de C\$1\$1 y CMake Listas
<a name="sample-cplusplus-sdk-code"></a>

En este paso va a crear un archivo de `C++` que permita a los usuarios del proyecto interactuar con los buckets de Amazon S3.

También puede crear un archivo `CMakeLists.txt` con instrucciones que `cmake` utiliza para crear su biblioteca de C\$1\$1.

1. En el AWS Cloud9 IDE, cree un archivo con este contenido y guárdelo con el nombre `s3-demo.cpp` en la raíz (`/`) de su entorno.

   ```
   #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. Cree un archivo con este contenido y guárdelo con el nombre `CMakeLists.txt` en la raíz (`/`) de su entorno. Este archivo le permite compilar el código en un archivo ejecutable.

   ```
   # 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})
   ```

## Paso 5: Compilar y ejecutar el código de C\$1\$1
<a name="build-and-run-cpp"></a>

1. En el directorio raíz de su entorno en el que ha guardado los archivos `s3-demo.cpp` y `CMakeLists.txt`, ejecute `cmake` para crear su proyecto:

   ```
   cmake . 
   make
   ```

1. Ahora puede ejecutar el programa desde la línea de comandos. En el siguiente comando, reemplace `my-unique-bucket-name` por un nombre único para el bucket de Amazon S3 y, si es necesario, reemplace `us-east-1` por el identificador de otra región de AWS en la que desee crear un bucket.

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

   Si el programa se ejecuta correctamente, se devolverá un resultado similar al siguiente: 

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

## Paso 6: limpiar
<a name="sample-cplusplus-clean-up"></a>

Para evitar que se hagan cargos continuos a su AWS cuenta una vez que haya terminado con este ejemplo, elimine el entorno. Para obtener instrucciones, consulte [Eliminar un entorno en AWS Cloud9](delete-environment.md).