AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de...

153
AWS SDK para .NET Developer Guide AWS SDK para .NET: Developer Guide Copyright © 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Transcript of AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de...

Page 1: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NETDeveloper Guide

AWS SDK para .NET: Developer GuideCopyright © 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Page 2: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer Guide

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any mannerthat is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks notowned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored byAmazon.

Page 3: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer Guide

Table of ContentsAWS SDK for .NET Developer Guide ................................................................................................... 1

Qué hay en el SDK .................................................................................................................... 1Cómo usar esta guía .................................................................................................................. 1Servicios admitidos e historial de revisiones ................................................................................... 2

Introducción a AWS SDK for .NET ........................................................................................................ 3Creación de una cuenta y credenciales de AWS ............................................................................. 3

Inscripción en una cuenta de AWS ....................................................................................... 3Crear un usuario de IAM ..................................................................................................... 3

Instalación del entorno de desarrollo de .NET ................................................................................. 4Obligatorio ......................................................................................................................... 4

Instalación de ensamblados de AWSSDK ...................................................................................... 5Instalación del AWS SDK for .NET ........................................................................................ 5Instalación de ensamblados de AWSSDK con NuGet ............................................................... 5

Iniciar un nuevo proyecto ............................................................................................................. 6Plataformas admitidas por el AWS SDK for .NET ............................................................................ 7

.NET Framework 4.5 ........................................................................................................... 7

.NET Framework 3.5 ........................................................................................................... 7

.NET Core ......................................................................................................................... 7Biblioteca de clases portable ................................................................................................ 7Soporte de Unity ................................................................................................................ 7Más información ................................................................................................................. 7

Programación con AWS SDK for .NET ................................................................................................... 8Configuración de su aplicación AWS SDK for .NET ......................................................................... 8

Configuración del AWS SDK for .NET con .NET Core .............................................................. 9Configuración de credenciales de AWS ................................................................................ 11Selección de regiones de AWS ........................................................................................... 20Configuración de otros parámetros de la aplicación ................................................................ 21Referencia de los archivos de configuración para el AWS SDK for .NET .................................... 27

API asincrónicas de Amazon Web Services para .NET ................................................................... 35API asincrónica para .NET Framework 4.5, la Tienda Windows y Windows Phone 8 .................... 35API asincrónica para .NET Framework 3.5 ............................................................................ 36

Reintentos y tiempos de espera .................................................................................................. 42Reintentos ....................................................................................................................... 42Tiempos de espera ........................................................................................................... 42Ejemplo ........................................................................................................................... 43

Migración de su código a la versión 3 del AWS SDK for .NET ........................................................ 43Acerca de las versiones del AWS SDK for .NET .................................................................... 43Rediseño de la arquitectura del SDK ................................................................................... 43Cambios bruscos .............................................................................................................. 44

Ejemplos de código ........................................................................................................................... 46Listado de recursos de AWS mediante AWS CloudFormation ......................................................... 46Autenticación de usuarios con Amazon Cognito ............................................................................. 47

Proveedor de credenciales de Amazon Cognito .................................................................... 47Ejemplos de biblioteca de extensiones CognitoAuthentication de Amazon .................................. 49

Uso de bases de datos NoSQL de Amazon DynamoDB ................................................................. 52Modelo de bajo nivel ......................................................................................................... 53Modelo de documento ....................................................................................................... 55Modelo de persistencia de objetos ...................................................................................... 57Más información ............................................................................................................... 58Uso de expresiones con Amazon DynamoDB y el AWS SDK for .NET ....................................... 59Compatibilidad de JSON en Amazon DynamoDB con el AWS SDK for .NET .............................. 68Administración del estado de la sesión de ASP.NET con Amazon DynamoDB ........................... 70

Implementación de aplicaciones mediante Amazon EC2 ................................................................. 73Ejemplos de instancias Amazon EC2 ................................................................................... 73

iii

Page 4: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer Guide

Ejemplos de instancias de subasta de Amazon EC2 ............................................................. 91Almacenamiento de datos de archivado utilizando Amazon Glacier ................................................... 96

Modelos de programación .................................................................................................. 96Administración de usuarios conAWS Identity and Access Management (IAM) ..................................... 99

Administración de alias de cuenta de IAM ........................................................................... 99IAM Gestión de usuarios ................................................................................................. 101Administración de las claves de acceso de IAM .................................................................. 104Uso de políticas de IAM .................................................................................................. 107Uso de certificados de servidor de IAM ............................................................................. 111Crear una lista de información de la cuenta de IAM .............................................................. 113Granting Access Using an IAM Role ................................................................................. 114

Uso de claves de AWS KMS con la AmazonS3EncryptionClient en el AWS SDK for .NET ................... 119Administración de recursos de sistema de nombres de dominio (DNS) utilizando Amazon Route 53 ...... 120Uso de almacenamiento de Internet de Amazon Simple Storage Service ......................................... 125Envío y recepción de notificaciones desde la nube con Amazon Simple Notification Service ................ 126Mensajería utilizando Amazon SQS ........................................................................................... 127

Creación de un cliente Amazon SQS ................................................................................ 127Creación de una cola de Amazon SQS ............................................................................. 128Constructing Amazon SQS Queue URLs ........................................................................... 129Envío de un mensaje a Amazon SQS ............................................................................... 129Envío de un lote de mensajes de Amazon SQS .................................................................. 130Recepción de un mensaje de una cola de Amazon SQS ...................................................... 131Eliminación de un mensaje de una cola de Amazon SQS ..................................................... 132Habilitar el sondeo largo en Amazon SQS ......................................................................... 132Uso de colas de Amazon SQS ........................................................................................ 134Uso de colas de mensajes fallidos de Amazon SQS ............................................................ 135

Monitorización de sus recursos de AWS utilizando Amazon CloudWatch ......................................... 136Descripción, creación y eliminación de alarmas en Amazon CloudWatch ................................. 136Uso de alarmas en Amazon CloudWatch ........................................................................... 138Obtención de métricas de Amazon CloudWatch .................................................................. 140Envío de eventos a eventos de Amazon CloudWatch ........................................................... 141Uso de filtros de suscripción en Amazon CloudWatch Logs .................................................. 145

Programación de AWS OpsWorks para trabajar con pilas y aplicaciones .......................................... 147Soporte de programación para servicios de AWS adicionales ......................................................... 147

Recursos adicionales ....................................................................................................................... 148Historial de revisión ......................................................................................................................... 149

iv

Page 5: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideQué hay en el SDK

AWS SDK for .NET Developer GuideEl AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET queaprovechen la rentabilidad, escalabilidad y fiabilidad de servicios de AWS como Amazon Simple StorageService (Amazon S3) y Amazon Elastic Compute Cloud (Amazon EC2). El SDK admite el desarrollo decualquier plataforma que admita .NET Framework 3.5 o posterior y puede desarrollar aplicaciones con elSDK mediante Visual Studio 2010 o posterior.

Temas• Qué hay en el SDK (p. 1)• Cómo usar esta guía (p. 1)• Servicios admitidos e historial de revisiones (p. 2)

Qué hay en el SDKEl AWS SDK for .NET incluye lo siguiente:

• La versión actual del AWS SDK for .NET• Todas las versiones principales anteriores del AWS SDK for .NET• Código de muestra que enseña a usar el AWS SDK for .NET con varios servicios de AWS

Para simplificar la instalación, AWS proporciona Herramientas de AWS para Windows, que es un paquetede instalación de Windows que incluye:

• El AWS SDK para .NET• Herramientas de AWS para Windows PowerShell (consulte la Guía del usuario de herramientas para

Windows PowerShell)• AWS Toolkit for Visual Studio (consulte la Guía del usuario de Toolkit para Visual Studio)

Como alternativa a la instalación de Herramientas de AWS para Windows, puede usar NuGet paradescargar ensamblados de servicio AWSSDK individuales para un proyecto de aplicación específico. Paraobtener más información, consulte Instalación de ensamblados de AWSSDK con NuGet (p. 5).

Note

Recomendamos el uso de Visual Studio Professional 2010 o posterior para implementar susaplicaciones.

Cómo usar esta guíaEn la Guía para desarrolladores de AWS SDK para .NET se describe cómo implementar aplicaciones paraAWS mediante el AWS SDK for .NET y se incluye lo siguiente:

Getting Started with the AWS SDK for .NET (p. 3)

Cómo instalar y configurar el AWS SDK for .NET. Si no ha usado el AWS SDK for .NET antes o tienedificultades con su configuración, debe comenzar aquí.

1

Page 6: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideServicios admitidos e historial de revisiones

Programación con AWS SDK para .NET (p. 8)

Los aspectos básicos de cómo implementar aplicaciones con el AWS SDK for .NET que se aplica atodos los servicios de AWS. En esta sección también se incluye información acerca de cómo migrarcódigo a la versión más reciente del AWS SDK for .NET y se describen las diferencias entre la últimaversión y esta.

Ejemplos de código (p. 46)

Un conjunto de tutoriales y ejemplos donde se muestra cómo usar el AWS SDK for .NET a fin de crearaplicaciones para servicios de AWS particulares.

Recursos adicionales (p. 148)

Más recursos fuera de esta guía que proporcionan información valiosa acerca de AWS y el AWS SDKfor .NET.

Un documento relacionado, AWS SDK for .NET API Reference, proporciona una descripción detallada decada espacio de nombres y clase.

Servicios admitidos e historial de revisionesEl AWS SDK for .NET admite la mayoría de los productos de infraestructura de AWS y más servicios seañaden con frecuencia. Para obtener una lista de los servicios de AWS compatibles con el SDK, consulteel archivo SDK README.

Para ver lo que ha cambiado en una versión especificada, consulte el registro de cambios del SDK.

2

Page 7: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideCreación de una cuenta y credenciales de AWS

Introducción a AWS SDK for .NETPara comenzar con el AWS SDK for .NET, complete las siguientes tareas:

Temas• Creación de una cuenta y credenciales de AWS (p. 3)• Instalación del entorno de desarrollo de .NET (p. 4)• Instalación de ensamblados de AWSSDK (p. 5)• Iniciar un nuevo proyecto (p. 6)• Plataformas admitidas por el AWS SDK for .NET (p. 7)

Creación de una cuenta y credenciales de AWSPara utilizar el AWS SDK for .NET para tener acceso a AWS, necesitará una cuenta de AWS ycredenciales de AWS. Para incrementar la seguridad de su cuenta de AWS, le recomendamos que utiliceun usuario de IAM para proporcionar credenciales de acceso en lugar de usar las credenciales de sucuenta raíz.

Note

Para obtener información general sobre los usuarios de IAM y por qué son importantes para laseguridad de su cuenta, consulte Introducción a la administración de identidades: los usuarios enla IAM User Guide.

Inscripción en una cuenta de AWSPara inscribirse en una cuenta de AWS

1. Abra http://aws.amazon.com/ y haga clic en Sign Up.2. Siga las instrucciones en pantalla. Parte del procedimiento de inscripción consiste en recibir una

llamada telefónica y escribir un PIN con el teclado del teléfono.

A continuación, cree un usuario de IAM y descargue (o copie) su clave de acceso secreta. Para utilizarel AWS SDK for .NET, debe disponer de un conjunto de credenciales de AWS válidas, que constande una clave de acceso y una clave secreta. Estas claves también se usan para firmar solicitudes deprogramación de los servicios web, para que AWS pueda comprobar que la solicitud proviene de unafuente autorizada. Al crear la cuenta puede obtener un conjunto de credenciales de la cuenta. Sinembargo, le recomendamos evitar el uso de dichas credenciales con el AWS SDK for .NET. En su lugar,cree uno o más usuarios de IAM y utilice dichas credenciales. Para las aplicaciones que se ejecutan eninstancias Amazon EC2, puede utilizar los roles de IAM para proporcionar credenciales temporales.

Crear un usuario de IAMPara crear un usuario de IAM

1. Vaya a la consola de IAM (es posible que tenga que iniciar sesión primero en AWS).2. Haga clic en Users en la barra lateral para ver los usuarios de IAM.3. Si no tiene ningún usuario de IAM configurado, haga clic en Create New Users para crear uno.

3

Page 8: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideInstalación del entorno de desarrollo de .NET

4. Seleccione el usuario de IAM en la lista que utilizará para obtener acceso a AWS.5. Abra la pestaña Security Credentials y haga clic en Create Access Key.

Note

Puede tener un máximo de dos claves de acceso activas para un determinado usuario deIAM. Si el usuario de IAM ya tiene dos claves de acceso, tendrá que eliminar una para podercrear una nueva clave.

6. En el cuadro de diálogo resultante, elija Download Credentials para descargar el archivo decredenciales en su equipo o haga clic en Show User Security Credentials para ver el ID de clave deacceso y la clave de acceso secreta del usuario de IAM (que puede copiar y pegar).

Important

No se puede obtener la clave de acceso secreta después de cerrar el cuadro de diálogo. Sinembargo, puede eliminar el ID de clave de acceso asociado y crear uno nuevo.

A continuación, debe definir sus credenciales en el archivo de credenciales compartidas de AWS o en elentorno.

El enfoque preferido para gestionar credenciales es crear un perfil para cada conjunto de credenciales enSDK Store. Puede crear y administrar perfiles con AWS Toolkit for Visual Studio, cmdlets de PowerShello mediante programación con el AWS SDK for .NET. Estas credenciales se cifran y almacenan porseparado sin vinculación a ningún proyecto. A continuación, puede hacer referencia al perfil por nombreen su aplicación y las credenciales asociadas se insertarán en el momento de la compilación. Con esteenfoque se asegura de que las credenciales no se expongan de forma involuntaria con su proyecto en unsitio público. Para obtener más información, consulte Configuración de AWS Toolkit for Visual Studio yConfiguración de credenciales de AWS (p. 11).

Para obtener más información sobre la administración de sus credenciales, consulte Prácticasrecomendadas para administrar las claves de acceso de AWS.

Para ver la actividad de la cuenta y administrar la cuenta en cualquier momento, vaya a http://aws.amazon.com y elija My Account/Console.

Instalación del entorno de desarrollo de .NETPara instalar el AWS SDK for .NET, debe tener lo siguiente instalado.

Obligatorio• Microsoft .NET Framework 3.5 o posterior• Microsoft Visual Studio 2010 o posterior

Note

Recomendamos el uso de Visual Studio Professional 2010 o posterior para implementar susaplicaciones.

El AWS SDK for .NET viene instalado en el AWS Toolkit for Visual Studio, un complemento queproporciona una interfaz de usuario para gestionar los recursos de AWS desde Visual Studio y queademás incluye Herramientas de AWS para Windows PowerShell. Para instalar el AWS SDK for .NET yAWS Toolkit for Visual Studio, consulte Configuración de AWS Toolkit for Visual Studio.

Para obtener más información, consulte Uso de AWS Toolkit for Visual Studio.

4

Page 9: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideInstalación de ensamblados de AWSSDK

Instalación de ensamblados de AWSSDKPuede instalar los ensamblados de AWSSDK instalando el AWS SDK for .NET o los ensamblados de AWScon NuGet.

Instalación del AWS SDK for .NETEl siguiente procedimiento describe cómo instalar el AWS SDK for .NET, que contiene el AWS SDKfor .NET, el AWS Toolkit for Visual Studio y el Herramientas para Windows PowerShell.

Note

El AWS SDK for .NET también está disponible en GitHub.

Para instalar el AWS SDK for .NET

1. Vaya a AWS SDK para .NET.2. En la sección Downloads, elija Download MSI Installer para descargar el instalador.3. Para comenzar la instalación, ejecute el instalador descargado y siga las instrucciones en pantalla.

Note

De forma predeterminada, el AWS SDK for .NET se instala en el directorio Archivos deprograma, que requiere privilegios de administrador. Para instalar el AWS SDK for .NET sinprivilegios de administrador, elija un directorio de instalación diferente.

4. (Opcional) Puede utilizar NuGet para instalar ensamblados de servicio y extensiones de AWSSDKpara el AWS SDK for .NET, que incluyen un proveedor de estado de sesión y un agente de escuchade registro de seguimiento. Para obtener más información, consulte Instalación de ensamblados deAWSSDK con NuGet (p. 5).

Instalación de ensamblados de AWSSDK con NuGetNuGet es un sistema de administración de paquetes de la plataforma .NET. NuGet le permite agregarensamblados de AWSSDK, así como las extensiones TraceListener y SessionProvider a la aplicación.

NuGet dispone siempre de las versiones más recientes de los ensamblados de AWSSDK y, además, lepermite instalar versiones anteriores. NuGet tiene en cuenta las dependencias entre los ensamblados einstala todos los ensamblados necesarios de forma automática. Los ensamblados instalados por NuGet sealmacenan en la solución en lugar de en una ubicación central, como el directorio Archivos de programa.De este modo podrá instalar versiones de ensamblados específicos de una aplicación determinada sin quese generen problemas de compatibilidad con otras aplicaciones. Para obtener más información acerca deNuGet, consulte la documentación de NuGet.

Si usa Visual Studio 2010 o posterior, NuGet se instala automáticamente. Si utiliza una versión anterior deVisual Studio, puede instalar NuGet desde Visual Studio Gallery on MSDN.

Puede usar NuGet desde el Explorador de soluciones o desde la Consola del Administrador de paquetes.

Paquetes AWSSDK de NuGetEl sitio web de NuGet proporciona una página para cada paquete disponible a través de NuGet. La páginade cada paquete incluye una línea de comando de ejemplo para instalar el paquete desde la Consola delAdministrador de paquetes. Cada página también incluye una lista de las versiones anteriores del paquetedisponibles en NuGet. Para obtener una lista de los paquetes de AWSSDK disponibles en NuGet, consulteAWSSDK Packages.

5

Page 10: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideIniciar un nuevo proyecto

Uso de NuGet desde el Explorador de solucionesPara utilizar NuGet desde el Explorador de soluciones

1. En el Explorador de soluciones, haga clic con el botón derecho del ratón sobre el proyecto y, acontinuación, elija Manage NuGet Packages en el menú contextual.

2. En el panel de la izquierda del cuadro de diálogo Manage NuGet Packages, elija Online. Puede utilizarel campo de búsqueda de la esquina superior derecha para buscar el paquete que desea instalar.

En la siguiente imagen se muestra el paquete del ensamblado AWSSDK - Core Runtime. Verá queNuGet es consciente de que este paquete tiene una dependencia con el paquete de ensambladosAWSSDK.Core. NuGet instala el paquete AWSSDK.Core automáticamente si no se ha instaladotodavía.

Uso de NuGet desde la Consola del administrador de paquetesPara utilizar NuGet desde la Consola del administrador de paquetes en VisualStudio

• Visual Studio 2010

En el menú Tools, elija Library Package Manager y, a continuación, haga clic en Package ManagerConsole.

• Visual Studio 2012 y posteriores

En el menú Tools, elija Nuget Package Manager y, a continuación, haga clic en Package ManagerConsole.

Puede instalar los ensamblados de AWSSDK que desee desde la Consola del administrador depaquetes utilizando el comando Install-Package . Por ejemplo, para instalar el ensambladoAWSSDK.AutoScaling utilice el siguiente comando.

PM> Install-Package AWSSDK.AutoScaling

NuGet también instala cualquier dependencia, como por ejemplo AWSSDK.Core.

Para instalar una versión previa de un paquete, utilice la opción -Version y especifique la versión delpaquete que desea. Por ejemplo, para instalar la versión 3.1.0.0 del ensamblado AWS SDK for .NET,utilice la siguiente línea de comando.

PM> Install-Package AWSSDK.Core -Version 3.1.0.0

Para obtener más información acerca de los comandos de la Consola del Administrador de paquetes,consulte Package Manager Console Commands (v1.3).

Iniciar un nuevo proyectoToolkit for Visual Studio incluye plantillas de proyecto de C# para una serie de servicios de AWS. La mejormanera de empezar a desarrollar una aplicación centrándose en los servicios de AWS es utilizar unode los ejemplos de Toolkit for Visual Studio basado en las plantillas. Para obtener una lista de ejemplosdisponibles, consulte Uso de AWS Services en Toolkit for Visual Studio.

6

Page 11: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuidePlataformas admitidas por el AWS SDK for .NET

Plataformas admitidas por el AWS SDK for .NETEl AWS SDK for .NET proporciona diferentes grupos de ensamblados para desarrolladores a fin deinteractuar con diversas plataformas. Sin embargo, no toda la funcionalidad del SDK es la misma encada una de estas plataformas. En este tema se describen las diferencias en cuanto a soporte de cadaplataforma.

.NET Framework 4.5Esta versión del AWS SDK for .NET se compila con .NET Framework 4.5 y se ejecuta en el tiempo deejecución de 4.0 de .NET. Los clientes de servicios de AWS admiten los patrones de llamada síncronos yasíncronos y usan las palabras clave async y await introducidas en C# 5.0.

.NET Framework 3.5Esta versión del AWS SDK for .NET se compila con .NET Framework 3.5 y se ejecuta en el tiempo deejecución de 2.0 o 4.0 de .NET. Los clientes de servicios de AWS admiten los patrones de llamadasíncronos y asíncronos y usan el patrón de inicio y finalización anterior.

Note

El AWS SDK for .NET no cumple con el Estándar de procesamiento de la información federal(FIPS, Federal Information Processing Standard) cuando lo usan aplicaciones generadascon la versión 2.0 del CLR. Para obtener detalles acerca de cómo puede sustituir unaimplementación compatible con FIPS en ese entorno, consulte CryptoConfig en el blog deMicrosoft y la clase HMACSHA256 del equipo de seguridad de CLR ( HMACSHA256Cng ) enSecurity.Cryptography.dll.

.NET CoreEl AWS SDK for .NET admite aplicaciones escritas para .NET Core. Los clientes de servicios de AWSsolo admiten patrones de llamada asíncronos en .NET Core. Esto también afecta a muchas de lasabstracciones de alto nivel basadas en clientes de servicios como TransferUtility de Amazon S3, quesolo admitirá llamadas asíncronas en el entorno de .NET Core. Para obtener detalles, consulte Configuringthe AWS SDK for .NET with .NET Core (p. 9).

Biblioteca de clases portableEl AWS SDK for .NET también contiene la implementación de una biblioteca de clases portable. Laimplementación de la biblioteca de clases portable puede dirigirse a varias plataformas, incluidas laplataforma universal de Windows (UWP) y Xamarin en iOS y Android. Consulte AWS Mobile SDKpara .NET y Xamarin para obtener más detalles. Los clientes de servicios de AWS solo admiten patronesde llamada asíncronos.

Soporte de UnityEl AWS SDK for .NET admite la generación de ensamblados para Unity.- Encontrará más información enUnity README.

Más información• Migrating Your Code to Version 3 of the AWS SDK for .NET (p. 43)

7

Page 12: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de su aplicación AWS SDK for .NET

Programación con AWS SDKfor .NET

En esta sección se proporciona información general sobre el desarrollo de software con AWS SDKfor .NET.

Para obtener información acerca del desarrollo de software para servicios de AWS específicos, consulteEjemplos de código (p. 46).

Temas• Configuración de su aplicación AWS SDK for .NET (p. 8)• API asincrónicas de Amazon Web Services para .NET (p. 35)• Reintentos y tiempos de espera (p. 42)• Migración de su código a la versión 3 del AWS SDK for .NET (p. 43)

Configuración de su aplicación AWS SDK for .NETPuede configurar su aplicación AWS SDK for .NET para especificar las credenciales de AWS, las opcionesde inicio de sesión, los puntos de enlace o el soporte de la versión 4 de Signature en Amazon S3.

La práctica recomendada para configurar una aplicación es utilizar el elemento <aws> en elarchivo App.config o Web.config del proyecto. El siguiente ejemplo especifica los parámetrosAWSRegion (p. 23) y AWSLogging (p. 22).

<configuration> <configSections> <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/> </configSections> <aws region="us-west-2"> <logging logTo="Log4Net"/> </aws></configuration>

Otra forma de configurar una aplicación es editar el elemento <appSettings> en el archivo App.configo Web.config del proyecto. El siguiente ejemplo especifica los parámetros AWSRegion (p. 23) yAWSLogging (p. 22).

<configuration> <appSettings> <add key="AWSRegion" value="us-west-2"/> <add key="AWSLogging" value="log4net"/> </appSettings></configuration>

Esta configuración solo es efectiva después de reconstruir la aplicación.

8

Page 13: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración del AWS SDK for .NET con .NET Core

Aunque puede configurar una aplicación del AWS SDK for .NET mediante programación definiendo losvalores de la propiedad en la clase AWSConfigs, le recomendamos que, en su lugar, utilice el elementoaws. El siguiente ejemplo especifica los parámetros AWSRegion (p. 23) y AWSLogging (p. 22):

AWSConfigs.AWSRegion = "us-west-2";AWSConfigs.Logging = LoggingOptions.Log4Net;

Los parámetros definidos mediante programación anulan cualquier valor especificado en un archivoApp.config o Web.config. Algunos valores de parámetro definidos mediante programación sonefectivos inmediatamente; otros lo son después de crear un nuevo objeto de cliente. Para obtener másinformación, consulte Configuring AWS Credentials (p. 11).

Temas• Configuración del AWS SDK for .NET con .NET Core (p. 9)• Configuración de credenciales de AWS (p. 11)• Selección de regiones de AWS (p. 20)• Configuración de otros parámetros de la aplicación (p. 21)• Referencia de los archivos de configuración para el AWS SDK for .NET (p. 27)

Configuración del AWS SDK for .NET con .NET CoreUno de los mayores cambios en .NET Core es la eliminación de ConfigurationManager y los archivosapp.config y web.config estándar usados ubicuamente con aplicaciones de .NET Framework yASP.NET. En el caso de las aplicaciones de .NET tradicionales, el AWS SDK for .NET usa este sistema deconfiguración para establecer aspectos como las credenciales y la región de AWS de modo que no tengaque hacerlo en el código.

El sistema de configuración de .NET Core permite cualquier tipo de origen de entrada de cualquierubicación. Asimismo, el objeto de configuración no es un singleton global como ConfigurationManageren las aplicaciones de .NET estándar, de modo que el AWS SDK for .NET no tiene acceso para leer laconfiguración a partir de él.

Note

Para obtener información general acerca del sistema de configuración de .NET Core, lea el temaConfiguration en la documentación de .NET Core.

Para facilitar el uso del AWS SDK for .NET con .NET Core, puede usar el paquete NuGetAWSSDK.Extensions.NETCore.Setup. Como muchas bibliotecas de .NET Core, añade métodos deextensión a la interfaz IConfiguration para que la obtención de la configuración de AWS sea fluida.

Uso de AWSSDK.Extensions.NETCore.SetupAl crear una aplicación MVC de ASP.NET Core en Visual Studio, el constructor de Startup.cs controlala configuración leyendo en diversos orígenes de entrada, mediante ConfigurationBuilder yestableciendo la propiedad Configuration en el objeto IConfiguration creado.

public Startup(IHostingEnvironment env){ var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build();

9

Page 14: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración del AWS SDK for .NET con .NET Core

}

Para usar el objeto Configuration a fin de obtener las opciones de AWS, primero añada el paqueteNuGet AWSSDK.Extensions.NETCore.Setup. A continuación, añada sus opciones al archivo deconfiguración. Tenga en cuenta que uno de los archivos añadidos a ConfigurationBuilder sellama $"appsettings.{env.EnvironmentName}.json". Si se fija en la pestaña para depuraciónde las propiedades de su proyecto, puede ver que este archivo se establece en Development.Esto funciona muy bien en las pruebas locales, ya que puede poner su configuración en el archivoappsettings.Development.json, que es de solo lectura durante las pruebas locales. Cuandoimplementa una instancia Amazon EC2 que tiene EnvironmentName establecido en Production, se hacecaso omiso a este archivo y el AWS SDK for .NET utiliza las credenciales y la región de IAM configuradaspara la instancia Amazon EC2.

En la configuración siguiente se muestra un ejemplo de los valores que puede añadir en el archivoappsettings.Development.json de su proyecto para proporcionar la configuración de AWS.

{ "AWS": { "Profile": "local-test-profile", "Region": "us-west-2" }}

Para obtener acceso a las opciones de AWS establecidas en el archivo en el código, llame al método deextensión GetAWSOptions añadido en IConfiguration. Para crear un cliente de servicio a partir deestas opciones, llame a CreateServiceClient. En el siguiente código de ejemplo se muestra cómocrear un cliente del servicio Amazon S3.

var options = Configuration.GetAWSOptions();IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();

Valores permitidos en el archivo appsettings

Los siguientes valores de configuración de la aplicación se pueden establecer en el archivoappsettings.Development.json. Los nombres de campos deben usar las mayúsculas y minúsculasde la forma que se muestra en la lista siguiente. Para obtener detalles acerca de esta configuración,consulte la clase AWS.Runtime.ClientConfg.

• Región• Perfil• ProfilesLocation• SignatureVersion• RegionEndpoint• UseHttp• ServiceURL• AuthenticationRegion• AuthenticationServiceName• MaxErrorRetry• LogResponse• BufferSize• ProgressUpdateInterval• ResignRetries• AllowAutoRedirect

10

Page 15: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

• LogMetrics• DisableLogging• UseDualstackEndpoint

Inserción de dependencias de ASP.NET CoreEl paquete NuGet AWSSDK.Extensions.NETCore.Setup también se integra con un nuevo sistema deinserción de dependencias en ASP.NET Core. El método ConfigureServices de Startup es donde seañaden los servicios MVC. Si la aplicación usa Entity Framework, también es donde se inicializa.

public void ConfigureServices(IServiceCollection services){ // Add framework services. services.AddMvc();}

Note

Información general acerca de la inserción de dependencias en .NET Core se encuentradisponible en el sitio de documentación de .NET Core.

El paquete NuGet AWSSDK.Extensions.NETCore.Setup añade nuevos métodos de extensión aIServiceCollection que puede usar para añadir servicios de AWS a la inserción de dependencias.En el siguiente código se muestra cómo añadir las opciones de AWS que se leen a partir deIConfiguration para añadir Amazon S3 y DynamoDB a nuestra lista de servicios.

public void ConfigureServices(IServiceCollection services){ // Add framework services. services.AddMvc();

services.AddDefaultAWSOptions(Configuration.GetAWSOptions()); services.AddAWSService<IAmazonS3>(); services.AddAWSService<IAmazonDynamoDB>();}

Ahora, si sus controladores MVC usan IAmazonS3 o IAmazonDynamoDB como parámetros en susconstructores, el sistema de inserción de dependencias pasa esos servicios.

public class HomeController : Controller{ IAmazonS3 S3Client { get; set; }

public HomeController(IAmazonS3 s3Client) { this.S3Client = s3Client; }

...

}

Configuración de credenciales de AWSDebe administrar sus credenciales de AWS de forma segura y evitar prácticas que puedan exponerlas alpúblico de manera no intencionada. En este tema, describimos cómo configurar las credenciales de AWSde su aplicación de modo que sigan siendo seguras.

11

Page 16: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

• No use las credenciales raíz de su cuenta para obtener acceso a sus recursos de AWS. Estascredenciales proporcionan acceso ilimitado a la cuenta y son difíciles de revocar.

• No ponga claves de acceso literales en su aplicación, incluido el archivo App.config o Web.configdel proyecto. Si lo hace, puede crear un riesgo de exposición accidental de sus credenciales si, porejemplo, carga el proyecto en un repositorio público.

Note

Suponemos que ha creado una cuenta de AWS y tiene acceso a sus credenciales. Si aún no lotiene, consulte Create an AWS Account and Credentials (p. 3).

A continuación, se indican directrices generales para administrar credenciales de forma segura:

• Cree usuarios de IAM y utilice sus credenciales de usuario de IAM en lugar de su usuario raíz de AWS.Las credenciales de usuario de IAM son más fáciles de revocar si se filtran. Puede aplicar una política acada usuario IAM que limite al usuario a un conjunto específico de recursos y acciones.

• Durante el desarrollo de aplicaciones, el enfoque preferido para administrar credenciales es poner unperfil para cada conjunto de credenciales de usuario de IAM en SDK Store. También puede usar unarchivo de credenciales de texto no cifrado para almacenar perfiles con credenciales. A continuación,puede hacer referencia a un perfil específico mediante programación en lugar de almacenar lascredenciales en los archivos del proyecto. Para limitar el riesgo de exponer credenciales de manera nointencionada, debe almacenar SDK Store o el archivo de credenciales fuera de los archivos del proyecto.

• Use Roles de IAM para tareas para las tareas de Amazon Elastic Container Service (Amazon ECS).• Use roles de IAM para aplicaciones que se ejecutan en instancias Amazon EC2.• Use credenciales temporales o variables de entorno para aplicaciones disponibles para los usuarios que

se encuentran fuera de su organización.

En los siguientes temas se describe cómo administrar credenciales para una aplicación AWS SDKfor .NET. Para obtener una descripción de cómo administrar de forma segura las credenciales de AWS,consulte Prácticas recomendadas para administrar las claves de acceso de AWS.

Uso de SDK StoreDurante el desarrollo de su aplicación AWS SDK for .NET, añada un perfil a SDK Store para cadaconjunto de credenciales que desee usar en su aplicación. Esto impide la exposición accidental de suscredenciales de AWS. SDK Store se encuentra en la carpeta C:\Users\<username>\AppData\Local\AWSToolkit en el archivo RegisteredAccounts.json. SDK Store proporciona los siguientesbeneficios:

• SDK Store puede contener varios perfiles de cualquier número de cuentas.• Las credenciales de SDK Store se cifran y SDK Store reside en el directorio de inicio del usuario. Esto

limita el riesgo de exposición accidental de sus credenciales.• Puede hacer referencia al perfil por nombre en su aplicación y se hace referencia a las credenciales

asociadas en tiempo de ejecución. Sus archivos de origen nunca contienen las credenciales.• Si incluye un perfil llamado default, el AWS SDK for .NET usa ese perfil. Lo mismo sucede si no

proporciona otro nombre de perfil o si no se encuentra el nombre especificado.• SDK Store también proporciona credenciales a Herramientas de AWS para Windows PowerShell y AWS

Toolkit for Visual Studio.

Note

Los perfiles de SDK Store son específicos de un usuario determinado de un host concreto. Nopueden copiarse en otros hosts ni en otros usuarios. Por este motivo, no puede usar perfiles de

12

Page 17: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

SDK Store en aplicaciones de producción. Para obtener más información, consulte Credential andProfile Resolution (p. 17).

Puede administrar los perfiles en SDK Store de varias maneras.

• Use la interfaz de usuario gráfica (GUI) en AWS Toolkit for Visual Studio para administrar perfiles. Paraobtener más información acerca de cómo añadir credenciales a SDK Store mediante la GUI, consulteEspecificación de credenciales en AWS Toolkit for Visual Studio.

• Puede administrar sus perfiles en la línea de comandos mediante el cmdlet Set-AWSCredentialsde Herramientas de AWS para Windows PowerShell. Para obtener más información, consulte Uso decredenciales de AWS.

• Puede crear y administrar sus perfiles mediante programación con la claseAmazon.Runtime.CredentialManagement.CredentialProfile.

En los siguientes ejemplos se muestra cómo crear un perfil básico y un perfil SAML, y cómo añadirlos aSDK Store mediante el método RegisterProfile.

Crear un perfil y guardarlo en el archivo de credenciales de .NET

Cree un objeto Amazon.Runtime.CredentialManagement.CredentialProfileOptionsy establezca sus propiedades AccessKey y SecretKey. Cree un objetoAmazon.Runtime.CredentialManagement.CredentialProfile. Proporcione el nombre del perfil y el objetoCredentialProfileOptions creado. De forma opcional, establezca la propiedad Region para el perfil.Cree una instancia de un objeto NetSDKCredentialsFile y llame al método RegisterProfile para registrar elperfil.

var options = new CredentialProfileOptions{ AccessKey = "access_key", SecretKey = "secret_key"};var profile = new Amazon.Runtime.CredentialManagement.CredentialProfile("basic_profile", options);profile.Region = RegionEndpoint.USWest1;var netSDKFile = new NetSDKCredentialsFile();netSDKFile.RegisterProfile(profile);

El método RegisterProfile se usa para registrar un nuevo perfil. Normalmente, su aplicación llama aeste método solo una vez para cada perfil.

Crear un SAMLEndpoint y un perfil asociado y guardarlo en el archivo decredenciales de .NET

Cree un objeto Amazon.Runtime.CredentialManagement.SAMLEndpoint.Proporcione el nombre y los parámetros URI del punto de enlace. Cree unobjeto Amazon.Runtime.CredentialManagement.SAMLEndpointManager. Llameal método RegisterEndpoint para registrar el punto de enlace. Cree un objetoAmazon.Runtime.CredentialManagement.CredentialProfileOptions y establezca sus propiedadesEndpointName y RoleArn. Cree un objeto Amazon.Runtime.CredentialManagement.CredentialProfiley proporcione el nombre del perfil y el objeto CredentialProfileOptions creado. De forma opcional,establezca la propiedad Region para el perfil. Cree una instancia de un objeto NetSDKCredentialsFile yllame al método RegisterProfile para registrar el perfil.

var endpoint = new SAMLEndpoint("endpoint1", new Uri("https://some_saml_endpoint"), SAMLAuthenticationType.Kerberos);var endpointManager = new SAMLEndpointManager();endpointManager.RegisterEndpoint(endpoint);

13

Page 18: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

options = new CredentialProfileOptions{ EndpointName = "endpoint1", RoleArn = "arn:aws:iam::999999999999:role/some-role"};profile = new CredentialProfile("federated_profile", options);netSDKFile = new NetSDKCredentialsFile();netSDKFile.RegisterProfile(profile);

Uso de un archivo de credencialesTambién puede almacenar perfiles en un archivo de credenciales compartidas. Los otros AWS SDK, laAWS CLI y Herramientas de AWS para Windows PowerShell pueden usar este archivo. Para reducir elriesgo de exposición accidental de credenciales, almacene el archivo de credenciales fuera de cualquierarchivo del proyecto, normalmente de la carpeta de inicio del usuario. Tenga en cuenta que los perfiles delos archivos de credenciales se almacenan en texto no cifrado.

El usuario puede administrar los perfiles del archivo de credenciales compartidas de dos formas:

• Puede usar un editor de texto. El archivo se llama credentials y la ubicación predeterminada estáen la carpeta de inicio del usuario. Por ejemplo, si su nombre de usuario es awsuser, el archivo decredenciales sería C:\users\awsuser\.aws\credentials.

A continuación se muestra un ejemplo de un perfil en el archivo de credenciales.

[{profile_name}] aws_access_key_id = {accessKey} aws_secret_access_key = {secretKey}

For more information, see `Best Practices for Managing AWS Access Keys <http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html>`_.

Note

Si incluye un perfil llamado default, el AWS SDK for .NET usa ese perfil de formapredeterminada si no encuentra el perfil especificado.Puede almacenar el archivo de credenciales que contiene los perfiles en una ubicación de suelección, como C:\aws_service_credentials\credentials. A continuación, especifiquede forma explícita la ruta de archivo en el atributo AWSProfilesLocation del archivoApp.config o Web.config de su proyecto. Para obtener más información, consulte Specifyinga Profile (p. 18).

• Puede administrar mediante programación el archivo de credenciales con las clases en el espacio denombres Amazon.Runtime.CredentialManagement.

Crear un perfil y guardarlo en el archivo de credenciales compartidas

Cree un objeto Amazon.Runtime.CredentialManagement.CredentialProfileOptionsy establezca sus propiedades AccessKey y SecretKey. Cree un objetoAmazon.Runtime.CredentialManagement.CredentialProfile. Proporcione el nombre del perfil y el objetoCredentialProfileOptions creado. De forma opcional, establezca la propiedad Region para el perfil.Cree una instancia para un objeto Amazon.Runtime.CredentialManagement.SharedCredentialsFile y llameal método RegisterProfile para registrar el perfil.

options = new CredentialProfileOptions

14

Page 19: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

{ AccessKey = "access_key", SecretKey = "secret_key"};profile = new CredentialProfile("shared_profile", options);profile.Region = RegionEndpoint.USWest1;var sharedFile = new SharedCredentialsFile();sharedFile.RegisterProfile(profile);

El método RegisterProfile se usa para registrar un nuevo perfil. Normalmente, su aplicación llamará aeste método solo una vez para cada perfil.

Crear un perfil de origen y un perfil "assume role" asociado y guardarlo en elarchivo de credenciales

Cree un objeto Amazon.Runtime.CredentialManagement.CredentialProfileOptions para elperfil de origen y establezca sus propiedades AccessKey y SecretKey. Cree un objetoAmazon.Runtime.CredentialManagement.CredentialProfile. Proporcione el nombre delperfil y el objeto CredentialProfileOptions creado. Cree una instancia para un objetoAmazon.Runtime.CredentialManagement.SharedCredentialsFile y llame al método RegisterProfile pararegistrar el perfil. Cree otro objeto Amazon.Runtime.CredentialManagement.CredentialProfileOptions parael perfil de rol asumido y establezca las propiedades SourceProfile y RoleArn para el perfil. Creeun objeto Amazon.Runtime.CredentialManagement.CredentialProfile para el rol asumido. Proporcione elnombre del perfil y el objeto CredentialProfileOptions creado.

// Create the source profile and save it to the shared credentials filevar sourceProfileOptions = new CredentialProfileOptions{ AccessKey = "access_key", SecretKey = "secret_key"};var sourceProfile = new CredentialProfile("source_profile", sourceProfileOptions);sharedFile = new SharedCredentialsFile();sharedFile.RegisterProfile(sourceProfile);

// Create the assume role profile and save it to the shared credentials filevar assumeRoleProfileOptions = new CredentialProfileOptions{ SourceProfile = "source_profile", RoleArn = "arn:aws:iam::999999999999:role/some-role"};var assumeRoleProfile = new CredentialProfile("assume_role_profile", assumeRoleProfileOptions);sharedFile.RegisterProfile(assumeRoleProfile);

Actualizar un perfil existente en el archivo de credenciales compartidas

Cree un objeto Amazon.Runtime.CredentialManagement.SharedCredentialsFile. Establezca laspropiedades Region, AccessKey y SecretKey para el perfil. Llame al método TryGetProfile. Si el perfilexiste, use una instancia Amazon.Runtime.CredentialManagement.SharedCredentialsFile para llamar almétodo RegisterProfile para registrar el perfil actualizado.

sharedFile = new SharedCredentialsFile();CredentialProfile basicProfile;if (sharedFile.TryGetProfile("basicProfile", out basicProfile)){ basicProfile.Region = RegionEndpoint.USEast1; basicProfile.Options.AccessKey = "different_access_key"; basicProfile.Options.SecretKey = "different_secret_key";

15

Page 20: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

sharedFile.RegisterProfile(basicProfile);}

Obtención de acceso a las credenciales y perfiles de unaaplicaciónPuede encontrar las credenciales y perfiles fácilmente en el archivo de credencialesde .NET o en el archivo de credenciales compartidas mediante la claseAmazon.Runtime.CredentialManagement.CredentialProfileStoreChain. Este es el modo en que el SDKde .NET busca las credenciales y perfiles. La clase CredentialProfileStoreChain realiza lacomprobación automáticamente en ambos archivos de credenciales.

Puede obtener credenciales o perfiles mediante los métodos TryGetAWSCredentials oTryGetProfile methods. La propiedad ProfilesLocation determina el comportamiento deCredentialsProfileChain, como se indica a continuación:

1. Si ProfilesLocation no es nulo y no está vacío, busque el archivo de credenciales compartidas en la rutade disco de la propiedad ProfilesLocation.

2. Si ProfilesLocation es nulo o está vacío y la plataforma admite el archivo de credencialesde .NET, busque el archivo de credenciales de .NET. Si no se encuentra el perfil, busque el archivo decredenciales compartidas en la ubicación predeterminada.

3. Si ProfilesLocation es nulo o está vacío y la plataforma no admite el archivo de credencialesde .NET, busque el archivo de credenciales compartidas en la ubicación predeterminada.

Obtenga credenciales en el archivo de credenciales del SDK o el archivo decredenciales compartidas de la ubicación predeterminada.

Cree un objeto CredentialProfileStoreChain y un objeto Amazon.Runtime.AWSCredentials. Llameal método TryGetAWSCredentials. Proporcione el nombre de perfil y el objeto AWSCredentials en elque se van a devolver las credenciales.

var chain = new CredentialProfileStoreChain();AWSCredentials awsCredentials;if (chain.TryGetAWSCredentials("basic_profile", out awsCredentials)){ // use awsCredentials}

Obtener un perfil en el archivo de credenciales del SDK o el archivo decredenciales compartidas de la ubicación predeterminada

Cree un objeto CredentialProfileStoreChain y un objetoAmazon.Runtime.CredentialManagement.CredentialProfile. Llame al método TryGetProfile yproporcione el nombre de perfil y el objeto CredentialProfile en el que se van a devolver lascredenciales.

var chain = new CredentialProfileStoreChain();CredentialProfile basicProfile;if (chain.TryGetProfile("basic_profile", out basicProfile)){ // Use basicProfile}

16

Page 21: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

Obtener AWSCredentials en un archivo en el formato de archivo de credencialescompartidas en una ubicación del archivo

Cree un objeto CredentialProfileStoreChain y proporcione la ruta al archivo de credenciales. Creeun objeto AWSCredentials. Llame al método TryGetAWSCredentials. Proporcione el nombre de perfily el objeto AWSCredentials en el que se van a devolver las credenciales.

var chain = new CredentialProfileStoreChain("c:\\Users\\sdkuser\\customCredentialsFile.ini");AWSCredentials awsCredentials;if (chain.TryGetAWSCredentials("basic_profile", out awsCredentials)){ // Use awsCredentials}

Cómo crear una clase AmazonS3Client Using the SharedCredentialsFile

Puede crear un objeto AmazonS3Client que use las credenciales para un perfil específico mediante laclase Amazon.Runtime.CredentialManagement.SharedCredentialsFile. El AWS SDK for .NET carga lascredenciales incluidas en el perfil automáticamente. Podría hacer esto si desea usar un perfil específicopara un cliente determinado distinto del profile especificado en App.Config.

CredentialProfile basicProfile;AWSCredentials awsCredentials;var sharedFile = new SharedCredentialsFile();if (sharedFile.TryGetProfile("basic_profile", out basicProfile) && AWSCredentialsFactory.TryGetAWSCredentials(basicProfile, sharedFile, out awsCredentials)){ using (var client = new AmazonS3Client(awsCredentials, basicProfile.Region)) { var response = client.ListBuckets(); }}

Si desea usar el perfil predeterminado y que el AWS SDK for .NET utilice automáticamente suscredenciales predeterminadas para crear el objeto de cliente, use el siguiente código.

using (var client = new AmazonS3Client(RegionEndpoint.US-West2)){ var response = client.ListBuckets();}

Credential and Profile ResolutionEl AWS SDK for .NET busca credenciales en el siguiente orden y usa el primer conjunto disponible para laaplicación actual.

1. La configuración de cliente, o bien aquello explícitamente establecido en el cliente de servicio de AWS.2. BasicAWSCredentials que se crean a partir de los valores AWSAccessKey y AWSSecretKey

AppConfig, si están disponibles.3. Un perfil de credenciales con el nombre especificado por un valor en AWSConfigs.AWSProfileName

(establecido explícitamente o en AppConfig).4. El perfil de credenciales default.5. SessionAWSCredentials que se crean a partir de las variables de entorno AWS_ACCESS_KEY_ID,

AWS_SECRET_ACCESS_KEY y AWS_SESSION_TOKEN, si no están todas vacías.

17

Page 22: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

6. BasicAWSCredentials que se crean a partir de las variables de entorno AWS_ACCESS_KEY_ID yAWS_SECRET_ACCESS_KEY, si no están ambas vacías.

7. Roles de IAM para tareas de Amazon EC2 Container Service (Amazon ECS).8. Metadatos de la instancia EC2.

Los perfiles de SDK Store son específicos de un usuario determinado de un host concreto. No puedecopiarlos en otros hosts ni en otros usuarios. Por este motivo, no puede volver a usar los perfiles de SDKStore que se encuentran en su equipo de desarrollo de otros hosts o equipos de desarrollador. Si suaplicación se ejecuta en una instancia Amazon EC2, use un rol de IAM como se describe en Using IAMRoles for EC2 Instances with the AWS SDK for .NET (p. 114). De lo contrario, almacene sus credencialesen un archivo de credenciales al que su aplicación web tenga acceso en el servidor.

Resolución del perfilCon dos tipos de archivo de credenciales diferentes, es importante entender cómo configurarel AWS SDK for .NET y Herramientas de AWS para Windows PowerShell para usarlos.AWSConfigs.AWSProfilesLocation (establecido explícitamente o en AppConfig) controlacómo el AWS SDK for .NET encuentra perfiles de credenciales. El argumento de línea de comando -ProfileLocation controla cómo Herramientas de AWS para Windows PowerShell encuentra un perfil. Acontinuación se indica cómo funciona la configuración en ambos casos.

Valor de ubicación del perfil Comportamiento de resolución del perfil

null (no establecido) o vacío En primer lugar, busque en el archivo decredenciales de .NET un perfil con el nombreespecificado. Si no está ahí, busque en %HOME%\.aws\credentials. Si no está ahí, busque en%HOME%\.aws\config.

La ruta a un archivo en el formato del archivo decredenciales compartidas

Busque solo en el archivo especificado el perfil conel nombre especificado.

Especificación de un perfilLos perfiles son la mejor forma de usar credenciales en una aplicación AWS SDK for .NET. No tiene queespecificar dónde se almacena el perfil. Solo tiene que hacer referencia al perfil por nombre. El AWS SDKfor .NET recupera las credenciales correspondientes, como se describe en la sección anterior.

La mejor forma de especificar un perfil es definir un valor AWSProfileName en la sección appSettingsdel archivo App.config o Web.config de su aplicación. Las credenciales asociadas se incorporan a laaplicación durante el proceso de compilación.

En el siguiente ejemplo se especifica un perfil llamado development.

<configuration> <appSettings> <add key="AWSProfileName" value="development"/> </appSettings></configuration>

Este ejemplo supone que el perfil existe en SDK Store o en un archivo de credenciales de la ubicaciónpredeterminada.

Si sus perfiles se almacenan en un archivo de credenciales de otra ubicación, especifique la ubicaciónañadiendo un AWSProfilesLocation valor de atributo en el elemento <appSettings>. En el siguienteejemplo se especifica C:\aws_service_credentials\credentials como archivo de credenciales.

18

Page 23: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de credenciales de AWS

<configuration> <appSettings> <add key="AWSProfileName" value="development"/> <add key="AWSProfilesLocation" value="C:\aws_service_credentials\credentials"/> </appSettings></configuration>

La forma alternativa descartada de especificar un perfil se muestra a continuación para ofrecer unadescripción completa, pero no lo recomendamos.

<configuration> <configSections> <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/> </configSections> <aws profileName="development" profilesLocation="C:\aws_service_credentials\credentials"/></configuration>

<configuration> <configSections> <section name="aws" type="Amazon.AWSSection,AWSSDK.Core"/> </configSections> <aws profileName="development" profilesLocation="C:\aws_service_credentials\credentials"/></configuration>

Uso de credenciales de la cuenta de usuario federado

Las aplicaciones que usan el AWS SDK for .NET (AWSSDK.Core versión 3.1.6.0 y posterior) pueden usarcuentas de usuario federado a través de Active Directory Federation Services (AD FS) para obtener accesoa servicios web de AWS mediante Security Assertion Markup Language (SAML).

La compatibilidad del acceso federado significa que los usuarios pueden autenticarse mediante su ActiveDirectory. Las credenciales temporales se conceden al usuario automáticamente. Estas credencialestemporales, que son válidas durante una hora, se usan cuando su aplicación invoca servicios web deAWS. El SDK gestiona la administración de las credenciales temporales. Para las cuentas de usuariounidas a un dominio, si su aplicación realiza una llamada, pero las credenciales han caducado, el usuariovuelve a autenticarse automáticamente y se conceden credenciales actualizadas (para las cuentas que nounidas a un dominio, se le pide al usuario que escriba las credenciales antes de la segunda autenticación).

Para usar este soporte en su aplicación de .NET, primero debe configurar el perfil de rol mediante uncmdlet de PowerShell. Para obtener información sobre cómo, consulte las herramientas de AWS paraWindows PowerShell.

Después de configurar el perfil de rol, haga referencia al perfil del archivo app.config/web.config de suaplicación con la clave AWSProfileName de la misma forma que haría con otros perfiles de credenciales.

El ensamblado de SDK Security Token Service (AWSSDK.SecurityToken.dll), que se carga en tiempode ejecución, proporciona la compatibilidad con SAML para obtener las credenciales de AWS. Asegúresede que este ensamblado está disponible para su aplicación en tiempo de ejecución.

Especificación de roles o credenciales temporales

Para las aplicaciones que se ejecutan en las instancias Amazon EC2, el modo más seguro de administrarcredenciales es usar roles de IAM, como se describe en Using IAM Roles for EC2 Instances with the AWSSDK for .NET (p. 114).

Para los escenarios de aplicación en los que el software ejecutable está disponible para los usuariosexternos a su organización, recomendamos que diseñe el software para usar credenciales de seguridad

19

Page 24: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideSelección de regiones de AWS

temporales. Además de proporcionar acceso restringido a los recursos de AWS, estas credenciales tienenla ventaja de caducar después de un período de tiempo especificado. Para obtener más información sobrecómo usar credenciales de seguridad temporales, consulte lo siguiente:

• Uso de tokens de seguridad para conceder acceso temporal a sus recursos de AWS• Authenticating Users of AWS Mobile Applications with a Token Vending Machine.

Aunque el título del segundo artículo hace referencia de forma específica a las aplicaciones móviles, elartículo contiene información que es útil para cualquier aplicación de AWS implementada fuera de suorganización.

Uso de credenciales de proxy

Si su software se comunica con AWS a través de un proxy, puede especificar las credenciales para elproxy mediante la propiedad ProxyCredentials en la clase AmazonS3Config para el servicio. Porejemplo, para Amazon S3 podría usar código similar al siguiente, donde {my-username} y {my-password}son el nombre de usuario y la contraseña del proxy especificados en un objeto NetworkCredential.

AmazonS3Config config = new AmazonS3Config();config.ProxyCredentials = new NetworkCredential("my-username", "my-password");

Las versiones anteriores del SDK usaban ProxyUsername y ProxyPassword, pero estas propiedadesestán obsoletas.

Selección de regiones de AWSLas regiones de AWS le permiten acceder a servicios de AWS que se ubican físicamente en una regióngeográfica determinada. Esto puede ser útil para evitar redundancias y para que sus datos y aplicacionesse ejecuten cerca del lugar desde donde accederá a ellos usted y sus usuarios. Puede especificar unaregión al crear el cliente de servicio de AWS utilizando la clase RegionEndpoint.

A continuación se presenta un ejemplo que crea una instancia de un cliente Amazon EC2 en una regiónespecífica.

AmazonEC2Client ec2Client = new AmazonEC2Client(RegionEndpoint.USEast1);

Las regiones están aisladas unas de otras. Por ejemplo, no puede acceder a los recursos de US East (N.Virginia) si utiliza la región UE (Irlanda). Si el código necesita acceder a múltiples regiones de AWS, lerecomendamos que cree un cliente separado para cada región.

Para utilizar servicios en la región de China (Pekín), debe disponer de una cuenta y de credencialesespecíficas de la región de China (Pekín). Las cuentas y las credenciales de otras regiones de AWS nofuncionarán en la región de China (Pekín). De igual modo, las cuentas y las credenciales de la regiónde China (Pekín) no funcionarán en otras regiones de AWS. Para obtener más información acerca delos puntos de enlace y los protocolos disponibles en la región de China (Pekín), consulte China (Beijing)Region.

Los nuevos servicios de AWS se pueden lanzar inicialmente en algunas regiones y ser compatibles másadelante en otras regiones. En estos casos, no es necesario instalar el último SDK para acceder a lasnuevas regiones. Puede especificar las regiones que se han agregado recientemente para cada cliente ode forma global.

Para cada clienteCree el punto de enlace de la nueva región mediante GetBySystemName:

20

Page 25: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de otros parámetros de la aplicación

var newRegion = RegionEndpoint.GetBySystemName("us-west-new");using (var ec2Client = new AmazonEC2Client(newRegion)){ // Make a request to EC2 using ec2Client}

También puede utilizar la propiedad ServiceURL de la clase de configuración del cliente de servicio paraespecificar la región. Esta técnica funciona incluso si el punto de enlace de la región no sigue el patrón depunto de enlace de la región habitual.

var ec2ClientConfig = new AmazonEC2Config{ // Specify the endpoint explicitly ServiceURL = "https://ec2.us-west-new.amazonaws.com"};

using (var ec2Client = new AmazonEC2Client(newRegion)){ // Make a request to EC2 using ec2Client}

De forma globalPuede configurar la región globalmente de tres maneras.

Puede fijar la propiedad AWSConfigs.AWSRegion,

AWSConfigs.AWSRegion = "us-west-new";using (var ec2Client = new AmazonEC2Client()){ // Make request to Amazon EC2 using ec2Client}

Puede establecer la clave AWSRegion en la sección appSettings del archivo app.config.

<configuration> <appSettings> <add key="AWSRegion" value="us-west-2"/> </appSettings></configuration>

Puede especificar el atributo region en la sección aws tal como se describe en AWSRegion.

<aws region="us-west-2"/>

Para ver la lista actual de todas las regiones y puntos de enlace compatibles para cada servicio de AWS,consulte Regiones y puntos de enlace en la Amazon Web Services General Reference.

Configuración de otros parámetros de la aplicaciónAdemás de configurar las credenciales (p. 11), puede configurar otros parámetros de la aplicación:

• AWSLogging (p. 22)• AWSLogMetrics (p. 23)• AWSRegion (p. 23)

21

Page 26: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de otros parámetros de la aplicación

• AWSResponseLogging (p. 23)• AWS.DynamoDBContext.TableNamePrefix (p. 24)• AWS.S3.UseSignatureVersion4 (p. 24)• AWSEndpointDefinition (p. 25)• AWS Service-Generated Endpoints (p. 25)

Estos parámetros se pueden configurar en el archivo App.config o Web.config de la aplicación.Aunque también puede configurarlos en la API del AWS SDK for .NET, le recomendamos que utilice elarchivo .config de la aplicación. Aquí se describen ambos enfoques.

Para obtener más información sobre el uso del elemento <aws> tal como se describe más adelante,consulte Configuration Files Reference for AWS SDK for .NET (p. 27).

AWSLoggingConfigura la manera en que el SDK debe registrar los eventos, si es que debe hacerlo. Por ejemplo, elenfoque recomendado es utilizar el elemento <logging>, que es un elemento secundario del elemento<aws>:

<aws> <logging logTo="Log4Net"/></aws>

Otra opción:

<add key="AWSLogging" value="log4net"/>

Los valores posibles son:

None

Desactivación del registro de eventos. Esta es la opción predeterminada.log4net

Registro mediante log4net.SystemDiagnostics

Registro mediante la clase System.Diagnostics.

Puede definir diferentes valores para el atributo logTo, separado por comas. El siguiente ejemplo definelos registros log4net y System.Diagnostics en el archivo .config:

<logging logTo="Log4Net, SystemDiagnostics"/>

Otra opción:

<add key="AWSLogging" value="log4net, SystemDiagnostics"/>

De forma alternativa, al utilizar la API del AWS SDK for .NET, combine los valores de la enumeraciónLoggingOptions y defina la propiedad AWSConfigs.Logging:

AWSConfigs.Logging = LoggingOptions.Log4Net | LoggingOptions.SystemDiagnostics;

22

Page 27: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de otros parámetros de la aplicación

Los cambios en esta configuración solo son efectivos para las instancias del cliente de AWS nuevas.

AWSLogMetricsEspecifica si el SDK debería o no registrar métricas de desempeño. Para definir la configuración deregistro de las métricas en el archivo .config, defina el valor del atributo logMetrics en el elemento<logging>, que es un elemento secundario del elemento <aws>:

<aws> <logging logMetrics="true"/></aws>

De forma alternativa, defina la clave AWSLogMetrics en la sección <appSettings>:

<add key="AWSLogMetrics" value="true">

De forma alternativa, para definir el registro de las métricas con la API del AWS SDK for .NET, defina lapropiedad AWSConfigs.LogMetrics:

AWSConfigs.LogMetrics = true;

Esta opción configura la propiedad LogMetrics de forma predeterminada para todos los clientes yconfiguraciones. Los cambios en esta configuración solo son efectivos para las instancias del cliente deAWS nuevas.

AWSRegionConfigura la región de AWS predeterminada para clientes que no han especificado una región de formaexplícita. Para definir la región en el archivo .config, le recomendamos especificar el valor del atributoregion en el elemento aws:

<aws region="us-west-2"/>

De forma alternativa, defina la clave AWSRegion en la sección <appSettings>:

<add key="AWSRegion" value="us-west-2"/>

De forma alternativa, para definir la región con la API del AWS SDK for .NET, defina la propiedadAWSConfigs.AWSRegion:

AWSConfigs.AWSRegion = "us-west-2";

Para obtener más información acerca de cómo crear un cliente de AWS para una región específica,consulte AWS Region Selection (p. 20). Los cambios en esta configuración solo son efectivos para lasinstancias del cliente de AWS nuevas.

AWSResponseLoggingSe configura cuando el SDK debería registrar respuestas del servicio. Los valores posibles son:

Never

No registrar nunca respuestas del servicio. Esta es la opción predeterminada.

23

Page 28: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de otros parámetros de la aplicación

Always

Registrar siempre respuestas del servicio.OnError

Registrar solo respuestas del servicio cuando se produzcan errores.

Para definir la configuración del registro de servicios en el archivo .config, le recomendamos que definael valor del atributo logResponses en el elemento <logging>, que es un elemento secundario delelemento <aws>:

<aws> <logging logResponses="OnError"/></aws>

De forma alternativa, defina la clave AWSResponseLogging en la sección <appSettings>:

<add key="AWSResponseLogging" value="OnError"/>

De forma alternativa, para definir el registro de servicios con la API de AWS SDK for .NET,defina la propiedad AWSConfigs.ResponseLogging con uno de los valores de la enumeraciónResponseLoggingOption:

AWSConfigs.ResponseLogging = ResponseLoggingOption.OnError;

Los cambios en esta configuración surtirán efecto de inmediato.

AWS.DynamoDBContext.TableNamePrefixConfigura el TableNamePrefix predeterminado. Se utilizará DynamoDBContext si no se ha configuradomanualmente.

Para definir el prefijo del nombre de tabla en el archivo .config, le recomendamos definir el valor delatributo tableNamePrefix en el elemento <dynamoDBContext>, que es un elemento secundario delelemento <dynamoDB>, que a su vez es un elemento secundario del elemento <aws>:

<dynamoDBContext tableNamePrefix="Test-"/>

De forma alternativa, defina la clave AWS.DynamoDBContext.TableNamePrefix en la sección<appSettings>:

<add key="AWS.DynamoDBContext.TableNamePrefix" value="Test-"/>

De forma alternativa, para definir el prefijo del nombre de tabla con la API del AWS SDK for .NET, defina lapropiedad AWSConfigs.DynamoDBContextTableNamePrefix:

AWSConfigs.DynamoDBContextTableNamePrefix = "Test-";

Los cambios en esta configuración solo serán efectivos en las instancias DynamoDBContextConfig yDynamoDBContext creadas recientemente.

AWS.S3.UseSignatureVersion4Configura si el cliente Amazon S3 debería utilizar o no la versión 4 de Signature con solicitudes.

24

Page 29: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de otros parámetros de la aplicación

Para definir la versión 4 de Signature para Amazon S3 en el archivo .config, le recomendamos quedefina el valor del atributo useSignatureVersion4 del elemento <s3>, que es un elemento secundariodel elemento <aws>:

<aws> <s3 useSignatureVersion4="true"/></aws>

De forma alternativa, defina la clave AWS.S3.UseSignatureVersion4 como true en la sección<appSettings>:

<add key="AWS.S3.UseSignatureVersion4" value="true"/>

De forma alternativa, para definir la versión 4 de Signature con la API del AWS SDK for .NET, defina lapropiedad AWSConfigs.S3UseSignatureVersion4 como true:

AWSConfigs.S3UseSignatureVersion4 = true;

De forma predeterminada, esta configuración es false, pero la versión 4 de Signature puede utilizarse deforma predeterminada en algunos casos o en algunas regiones. Si la configuración es true, se utilizarála versión 4 de Signature para todas las solicitudes. Los cambios en esta configuración solo son efectivospara las instancias del cliente Amazon S3 nuevas.

AWSEndpointDefinitionConfigura si el SDK debería utilizar un archivo de configuración personalizado que define las regiones y lospuntos de enlace.

Para definir el archivo de definición del punto de enlace en el archivo .config, le recomendamosconfigurar el valor del atributo endpointDefinition en el elemento <aws>.

<aws endpointDefinition="c:\config\endpoints.json"/>

De forma alternativa, puede definir la clave AWSEndpointDefinition en la sección <appSettings>:

<add key="AWSEndpointDefinition" value="c:\config\endpoints.json"/>

De forma alternativa, para definir el archivo de definición del punto de enlace con la API del AWS SDKfor .NET, defina la propiedad AWSConfigs.EndpointDefinition:

AWSConfigs.EndpointDefinition = @"c:\config\endpoints.json";

Si no se proporciona ningún nombre de archivo, no se utilizará el archivo de configuración personalizado.Los cambios en esta configuración solo son efectivos para las instancias del cliente de AWS nuevas. Elarchivo endpoint.json está disponible en https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/endpoints.json.

AWS Service-Generated EndpointsAlgunos servicios de AWS generan sus propios puntos de enlace en lugar de consumir un punto de enlacede región. Los clientes de estos servicios consumen una URL de servicio específica de dicho servicio y susrecursos. Dos ejemplos de estos servicios son Amazon CloudSearch y AWS IoT. Los siguientes ejemplosmuestran cómo puede obtener los puntos de enlace para dichos servicios.

25

Page 30: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConfiguración de otros parámetros de la aplicación

Ejemplo de puntos de enlace de Amazon CloudSearchEl cliente de Amazon CloudSearch se utiliza para acceder al servicio de configuración deAmazon CloudSearch. Debe utilizar el servicio de configuración de Amazon CloudSearchpara crear, configurar y administrar los dominios de búsqueda. Para crear un dominio debúsqueda, cree un objeto CreateDomainRequest y proporcione la propiedad DomainName.Cree un objeto AmazonCloudSearchClient mediante el objeto de la solicitud. Llame al métodoCreateDomain. El objeto CreateDomainResponse devuelto por la llamada contiene una propiedadDomainStatus que incluye ambos puntos de enlace DocService y SearchService. Cree unobjeto AmazonCloudSearchDomainConfig y utilícelo para inicializar las instancias DocService ySearchService de la clase AmazonCloudSearchDomainClient.

// Create domain and retrieve DocService and SearchService endpointsDomainStatus domainStatus;using (var searchClient = new AmazonCloudSearchClient()){ var request = new CreateDomainRequest { DomainName = "testdomain" }; domainStatus = searchClient.CreateDomain(request).DomainStatus; Console.WriteLine(domainStatus.DomainName + " created");}

// Test the DocService endpointvar docServiceConfig = new AmazonCloudSearchDomainConfig{ ServiceURL = "https://" + domainStatus.DocService.Endpoint};using (var domainDocService = new AmazonCloudSearchDomainClient(docServiceConfig)){ Console.WriteLine("Amazon CloudSearchDomain DocService client instantiated using the DocService endpoint"); Console.WriteLine("DocService endpoint = " + domainStatus.DocService.Endpoint);

using (var docStream = new FileStream(@"C:\doc_source\XMLFile4.xml", FileMode.Open)) { var upload = new UploadDocumentsRequest { ContentType = ContentType.ApplicationXml, Documents = docStream }; domainDocService.UploadDocuments(upload); }}

// Test the SearchService endpointvar searchServiceConfig = new AmazonCloudSearchDomainConfig{ ServiceURL = "https://" + domainStatus.SearchService.Endpoint};using (var domainSearchService = new AmazonCloudSearchDomainClient(searchServiceConfig)){ Console.WriteLine("Amazon CloudSearchDomain SearchService client instantiated using the SearchService endpoint"); Console.WriteLine("SearchService endpoint = " + domainStatus.SearchService.Endpoint);

var searchReq = new SearchRequest { Query = "Gambardella", Sort = "_score desc", QueryParser = QueryParser.Simple }; var searchResp = domainSearchService.Search(searchReq);

26

Page 31: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReferencia de los archivos de

configuración para el AWS SDK for .NET

}

Ejemplo de puntos de enlace de AWS IoT

Para obtener el punto de enlace para AWS IoT, cree un objeto AmazonIoTClient y llame al métodoDescribeEndPoint. El objeto DescribeEndPointResponse devuelto contiene la EndpointAddress. Creeun objeto AmazonIotDataConfig, defina la propiedad ServiceURL y utilice el objeto para crear unainstancia de la clase AmazonIotDataClient.

string iotEndpointAddress;using (var iotClient = new AmazonIoTClient()){ var endPointResponse = iotClient.DescribeEndpoint(); iotEndpointAddress = endPointResponse.EndpointAddress;}

var ioTdocServiceConfig = new AmazonIotDataConfig{ ServiceURL = "https://" + iotEndpointAddress};using (var dataClient = new AmazonIotDataClient(ioTdocServiceConfig)){ Console.WriteLine("AWS IoTData client instantiated using the endpoint from the IotClient");}nstantiated using the endpoint from the IoT client");

Referencia de los archivos de configuración para elAWS SDK for .NETPuede usar un archivo App.config o Web.config del proyecto de .NET para especificar laconfiguración de AWS, como credenciales de AWS, opciones de registro, puntos de enlace de serviciode AWS y regiones de AWS, así como algunos ajustes de servicios de AWS, como Amazon DynamoDB,Amazon EC2 y Amazon S3. En la siguiente información se describe cómo dar formato correctamente a unarchivo App.config o Web.config para especificar estos tipos de configuración.

Note

Aunque puede continuar usando el elemento <appSettings> en un archivo App.config oWeb.config para especificar la configuración de AWS, recomendamos que use los elementos<configSections> y <aws> como se describe posteriormente en este tema. Para obtenermás información acerca del elemento <appSettings>, consulte los ejemplos del elemento<appSettings> en Configuring Your AWS SDK for .NET Application (p. 8).

Note

Aunque puede continuar usando las siguientes propiedades de la clase AWSConfigs en unarchivo de código para especificar la configuración de AWS, las siguientes propiedades están endesuso y es posible que no se admitan en versiones futuras:

• DynamoDBContextTableNamePrefix

• EC2UseSignatureVersion4

• LoggingOptions

• LogMetrics

• ResponseLoggingOption

• S3UseSignatureVersion4

27

Page 32: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReferencia de los archivos de

configuración para el AWS SDK for .NET

En general, recomendamos que, en lugar de usar propiedades de la clase AWSConfigs enun archivo de código para especificar la configuración de AWS, debe usar los elementos<configSections> y <aws> en un archivo App.config o Web.config para especificarla configuración de AWS, como se describe posteriormente en este tema. Para obtener másinformación acerca de las propiedades anteriores, consulte los AWSConfigs ejemplos de códigoen Configuring Your AWS SDK for .NET Application (p. 8).

Temas• Declaración de una sección de configuración de AWS (p. 28)• Elementos permitidos (p. 28)• Referencia de elementos (p. 29)

Declaración de una sección de configuración de AWSPuede especificar la configuración de AWS en un archivo App.config o Web.config desde el elemento<aws>. Antes de que pueda empezar a usar el elemento <aws>, debe crear un elemento <section> (quees un elemento secundario del elemento <configSections>) y establecer su atributo name en aws y suatributo type en Amazon.AWSSection, AWSSDK.Core, como se muestra en el siguiente ejemplo:

<?xml version="1.0"?><configuration> ... <configSections> <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/> </configSections> <aws> <!-- Add your desired AWS settings declarations here. --> </aws> ...</configuration>

El editor de Visual Studio no proporciona relleno de código automático (IntelliSense) para el elemento<aws> o sus elementos secundarios.

Para ayudarle a crear una versión con formato correcto del elemento <aws>, llame al métodoAmazon.AWSConfigs.GenerateConfigTemplate. De este modo se devuelve una versión canónicadel elemento <aws> como una cadena bien escrita, que puede adaptar a sus necesidades. En lassiguientes secciones se describen los atributos y elementos secundarios del elemento <aws>.

Elementos permitidosA continuación se muestra una lista de las relaciones lógicas entre los elementos permitidos en unasección de configuración de AWS. Puede generar la versión más reciente de esta lista llamando al métodoAmazon.AWSConfigs.GenerateConfigTemplate, que devuelve una versión canónica del elemento<aws> como una cadena que puede adaptar a sus necesidades.

<aws endpointDefinition="string value" region="string value" profileName="string value" profilesLocation="string value"> <logging logTo="None, Log4Net, SystemDiagnostics" logResponses="Never | OnError | Always" logMetrics="true | false" logMetricsFormat="Standard | JSON" logMetricsCustomFormatter="NameSpace.Class, Assembly" /> <dynamoDB

28

Page 33: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReferencia de los archivos de

configuración para el AWS SDK for .NET

conversionSchema="V1 | V2"> <dynamoDBContext tableNamePrefix="string value"> <tableAliases> <alias fromTable="string value" toTable="string value" /> </tableAliases> <map type="NameSpace.Class, Assembly" targetTable="string value"> <property name="string value" attribute="string value" ignore="true | false" version="true | false" converter="NameSpace.Class, Assembly" /> </map> </dynamoDBContext> </dynamoDB> <s3 useSignatureVersion4="true | false" /> <ec2 useSignatureVersion4="true | false" /> <proxy host="string value" port="1234" username="string value" password="string value" /></aws>

Referencia de elementosA continuación se muestra una lista de los elementos permitidos en una sección de configuración de AWS.Para cada elemento, se listan sus atributos y elementos principales y secundarios permitidos.

Temas• alias (p. 29)• aws (p. 30)• dynamoDB (p. 31)• dynamoDBContext (p. 31)• ec2 (p. 31)• registro (p. 32)• map (p. 33)• property (p. 34)• proxy (p. 34)• s3 (p. 35)

alias

El elemento <alias> representa un solo elemento de una colección de uno o varios mapeos ala tabla y desde la tabla que especifica una tabla distinta de una configurada para un tipo. Esteelemento se asigna a una instancia de la clase Amazon.Util.TableAlias a partir de la propiedadAmazon.AWSConfigs.DynamoDBConfig.Context.TableAliases en el AWS SDK for .NET. Lareasignación se lleva a cabo antes de la aplicación de un prefijo de nombre de tabla.

Este elemento puede incluir los siguientes atributos:

29

Page 34: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReferencia de los archivos de

configuración para el AWS SDK for .NET

fromTable

La parte desde la tabla del mapeo a la tabla y desde la tabla. Este atributo se asigna a la propiedadAmazon.Util.TableAlias.FromTable en el AWS SDK for .NET.

toTable

La parte a la tabla de la asignación a la tabla y desde la tabla. Este atributo se asigna a la propiedadAmazon.Util.TableAlias.ToTable en el AWS SDK for .NET.

El elemento principal del elemento <alias> es el elemento <tableAliases>.

El elemento <alias> no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento <alias> en uso:

<alias fromTable="Studio" toTable="Studios" />

aws

El elemento <aws> representa el elemento superior en una sección de configuración de AWS. Esteelemento puede incluir los siguientes atributos:

endpointDefinition

La ruta absoluta a un archivo de configuración personalizado que define las regiones ylos puntos de enlace de AWS que se van a usar. Este atributo se asigna a la propiedadAmazon.AWSConfigs.EndpointDefinition en el AWS SDK for .NET.

profileName

El nombre de perfil de las credenciales de AWS almacenadas que se usarán para realizar llamadasa servicios. Este atributo se asigna a la propiedad Amazon.AWSConfigs.AWSProfileName en elAWS SDK for .NET.

profilesLocation

La ruta absoluta a la ubicación del archivo de credenciales compartidas con otros AWSSDK. De forma predeterminada, el archivo de credenciales se almacena en el directorio.aws del directorio de inicio del usuario actual. Este atributo se asigna a la propiedadAmazon.AWSConfigs.AWSProfilesLocation en el AWS SDK for .NET.

region

ID de región de AWS predeterminado para clientes que no han especificado una región de formaexplícita. Este atributo se asigna a la propiedad Amazon.AWSConfigs.AWSRegion en el AWS SDKfor .NET.

El elemento <aws> no tiene elemento principal.

El elemento <aws> puede incluir los siguientes elementos secundarios:

• <dynamoDB>

• <ec2>

• <logging>

• <proxy>

• <s3>

30

Page 35: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReferencia de los archivos de

configuración para el AWS SDK for .NET

A continuación, mostramos un ejemplo del elemento <aws> en uso:

<aws endpointDefinition="C:\Configs\endpoints.xml" region="us-west-2" profileName="development" profilesLocation="C:\Configs"> <!-- ... --></aws>

dynamoDBEl elemento <dynamoDB> representa una colección de ajustes de Amazon DynamoDB. Este elementopuede incluir el atributo conversionSchema, que representa la versión que se va a usar para la conversiónentre objetos de .NET y DynamoDB. Los valores permitidos son V1 y V2. Este atributo se asigna a laclase Amazon.DynamoDBv2.DynamoDBEntryConversion en el AWS SDK for .NET. Para obtener másinformación, consulte Serie DynamoDB: esquemas de conversión.

El elemento principal del elemento <dynamoDB> es el elemento <aws>.

El elemento <dynamoDB> puede incluir el elemento secundario <dynamoDBContext>.

A continuación, mostramos un ejemplo del elemento <dynamoDB> en uso:

<dynamoDB conversionSchema="V2"> <!-- ... --></dynamoDB>

dynamoDBContextEl elemento <dynamoDBContext> representa una colección de ajustes específicos del contexto deAmazon DynamoDB. Este elemento puede incluir el atributo tableNamePrefix, que representa el prefijo denombre de tabla predeterminado que usará el contexto de DynamoDB si no se configura manualmente.Este atributo se asigna a la propiedad Amazon.Util.DynamoDBContextConfig.TableNamePrefix apartir de la propiedad Amazon.AWSConfigs.DynamoDBConfig.Context.TableNamePrefix del AWSSDK for .NET. Para obtener más información, consulte Enhancements to the DynamoDB SDK.

El elemento principal del elemento <dynamoDBContext> es el elemento <dynamoDB>.

El elemento <dynamoDBContext> puede incluir los siguientes elementos secundarios:

• <alias> (una o varias instancias)• <map> (una o varias instancias)

A continuación, mostramos un ejemplo del elemento <dynamoDBContext> en uso:

<dynamoDBContext tableNamePrefix="Test-"> <!-- ... --></dynamoDBContext>

ec2El elemento <ec2> representa una colección de ajustes de Amazon EC2. El elemento puedeincluir el atributo useSignatureVersion4, que especifica si la versión 4 de Signature se usarápara todas las solicitudes (true) o no (false, el valor predeterminado). Este atributo se asigna a

31

Page 36: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReferencia de los archivos de

configuración para el AWS SDK for .NET

la propiedad Amazon.Util.EC2Config.UseSignatureVersion4 a partir de la propiedadAmazon.AWSConfigs.EC2Config.UseSignatureVersion4 del AWS SDK for .NET.

El elemento principal del elemento <ec2> es el elemento.

El elemento <ec2> no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento <ec2> en uso:

<ec2 useSignatureVersion4="true" />

registroEl elemento <logging> representa una colección de ajustes para el registro de respuestas y el registro demétricas de desempeño. Este elemento puede incluir los siguientes atributos:

logMetrics

Si las métricas de desempeño se van a registrar para todos los clientes yconfiguraciones (true); de lo contrario, false. Este atributo se asigna a la propiedadAmazon.Util.LoggingConfig.LogMetrics a partir de la propiedadAmazon.AWSConfigs.LoggingConfig.LogMetrics del AWS SDK for .NET.

logMetricsCustomFormatter

Tipo de datos y nombre del ensamblado de un formateador personalizado para registrar métricas. Esteatributo se asigna a la propiedad Amazon.Util.LoggingConfig.LogMetricsCustomFormattera partir de la propiedad Amazon.AWSConfigs.LoggingConfig.LogMetricsCustomFormatterdel AWS SDK for .NET.

logMetricsFormat

Formato en que se presentan las métricas de registro (se asigna a la propiedadAmazon.Util.LoggingConfig.LogMetricsFormat a partir de la propiedadAmazon.AWSConfigs.LoggingConfig.LogMetricsFormat del AWS SDK for .NET).

Entre los valores permitidos se incluyen:JSON

Utilizar el formato JSON.Standard

Utilizar el formato predeterminado.logResponses

Cuándo se deben registrar respuestas del servicio (se asigna a la propiedadAmazon.Util.LoggingConfig.LogResponses a partir de la propiedadAmazon.AWSConfigs.LoggingConfig.LogResponses en el AWS SDK for .NET).

Entre los valores permitidos se incluyen:Always

Registrar siempre respuestas del servicio.Never

No registrar nunca respuestas del servicio.OnError

Registrar solo respuestas del servicio cuando haya errores.

32

Page 37: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReferencia de los archivos de

configuración para el AWS SDK for .NET

logTo

Dónde se deben registrar (se asigna a la propiedad LogTo a partir de la propiedadAmazon.AWSConfigs.LoggingConfig.LogTo en el AWS SDK for .NET).

Los valores permitidos incluyen una o varias de estas opciones:Log4Net

Registrarse en log4net.None

Deshabilitar el registro.SystemDiagnostics

Registrarse en System.Diagnostics.

El elemento principal del elemento <logging> es el elemento <aws>.

El elemento <logging> no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento <logging> en uso:

<logging logTo="SystemDiagnostics" logResponses="OnError" logMetrics="true" logMetricsFormat="JSON" logMetricsCustomFormatter="MyLib.Util.MyMetricsFormatter, MyLib" />

map

El elemento <map> representa un solo elemento de una colección de mapeos de tipo a tabla de tiposde .NET a tablas de DynamoDB (se asigna a una instancia de la clase TypeMapping a partir de lapropiedad Amazon.AWSConfigs.DynamoDBConfig.Context.TypeMappings en el AWS SDKfor .NET). Para obtener más información, consulte Enhancements to the DynamoDB SDK.

Este elemento puede incluir los siguientes atributos:

targetTable

Tabla de DynamoDB a la que se aplica el mapeo. Este atributo se asigna a la propiedadAmazon.Util.TypeMapping.TargetTable en el AWS SDK for .NET.

type

Tipo y nombre del ensamblado al que se aplica el mapeo. Este atributo se asigna a la propiedadAmazon.Util.TypeMapping.Type en el AWS SDK for .NET.

El elemento principal del elemento <map> es el elemento <dynamoDBContext>.

El elemento <map> puede incluir una o varias instancias del elemento secundario <property>.

A continuación, mostramos un ejemplo del elemento <map> en uso:

<map type="SampleApp.Models.Movie, SampleDLL" targetTable="Movies"> <!-- ... -->

33

Page 38: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReferencia de los archivos de

configuración para el AWS SDK for .NET

</map>

propertyEl elemento <property> representa una propiedad DynamoDB. (Este elemento se asigna a una instanciade la clase Amazon.Util.PropertyConfig a partir del método AddProperty en el AWS SDK for .NET) Paraobtener más información, consulte Enhancements to the DynamoDB SDK y DynamoDB Attributes.

Este elemento puede incluir los siguientes atributos:

attribute

Nombre de un atributo para la propiedad, como el nombre de una clave de rango. Este atributo seasigna a la propiedad Amazon.Util.PropertyConfig.Attribute en el AWS SDK for .NET.

converter

Tipo de convertidor que se debe usar para esta propiedad. Este atributo se asigna a la propiedadAmazon.Util.PropertyConfig.Converter en el AWS SDK for .NET.

ignore

Si debe hacerse caso omiso de la propiedad asociada (true); de lo contrario, false. Este atributo seasigna a la propiedad Amazon.Util.PropertyConfig.Ignore en el AWS SDK for .NET.

name

El nombre de la propiedad. Este atributo se asigna a la propiedadAmazon.Util.PropertyConfig.Name en el AWS SDK for .NET.

version

Si esta propiedad debe almacenar el número de versión del elemento (true); de lo contrario, false.Este atributo se asigna a la propiedad Amazon.Util.PropertyConfig.Version en el AWS SDKfor .NET.

El elemento principal del elemento <property> es el elemento <map>.

El elemento <property> no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento <property> en uso:

<property name="Rating" converter="SampleApp.Models.RatingConverter, SampleDLL" />

proxyEl elemento <proxy> representa los ajustes para configurar un proxy a fin de que el AWS SDK for .NET louse. Este elemento puede incluir los siguientes atributos:

host

Nombre de host o dirección IP del servidor proxy. Estos atributos se asignana la propiedad Amazon.Util.ProxyConfig.Host a partir de la propiedadAmazon.AWSConfigs.ProxyConfig.Host del AWS SDK for .NET.

password

Contraseña para autenticarse con el servidor proxy. Estos atributos se asignan ala propiedad Amazon.Util.ProxyConfig.Password a partir de la propiedadAmazon.AWSConfigs.ProxyConfig.Password del AWS SDK for .NET.

34

Page 39: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAPI asincrónicas de Amazon Web Services para .NET

puerto

Número de puerto del proxy. Estos atributos se asignan a la propiedadAmazon.Util.ProxyConfig.Port a partir de la propiedadAmazon.AWSConfigs.ProxyConfig.Port del AWS SDK for .NET.

nombre de usuario

Nombre de usuario para autenticarse con el servidor proxy. Estos atributos se asignana la propiedad Amazon.Util.ProxyConfig.Username a partir de la propiedadAmazon.AWSConfigs.ProxyConfig.Username del AWS SDK for .NET.

El elemento principal del elemento <proxy> es el elemento <aws>.

El elemento <proxy> no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento <proxy> en uso:

<proxy host="192.0.2.0" port="1234" username="My-Username-Here" password="My-Password-Here" />

s3

El elemento <s3> representa una colección de ajustes de Amazon S3. El elemento puede incluirel atributo useSignatureVersion4, que especifica si la versión 4 de Signature se usará para todaslas solicitudes (true) o no (false, el valor predeterminado). Este atributo se asigna a la propiedadAmazon.AWSConfigs.S3Config.UseSignatureVersion4 en el AWS SDK for .NET.

El elemento principal del elemento <s3> es el elemento <aws>.

El elemento <s3> no contiene ningún elemento secundario.

A continuación, mostramos un ejemplo del elemento <s3> en uso:

<s3 useSignatureVersion4="true" />

API asincrónicas de Amazon Web Servicespara .NET

API asincrónica para .NET Framework 4.5, la TiendaWindows y Windows Phone 8El AWS SDK for .NET usa el nuevo patrón asincrónico basado en tareas para .NET Framework versión4.5, la Tienda Windows y Windows Phone 8. Puede utilizar las palabras clave async y await paraejecutar y administrar operaciones asincrónicas para todos los productos de AWS sin bloquearlos.

Para saber más acerca de los patrones asincrónicos basados en tareas, consulte Task-basedAsynchronous Pattern (TAP) en MSDN.

35

Page 40: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAPI asincrónica para .NET Framework 3.5

API asincrónica para .NET Framework 3.5El AWS SDK for .NET es compatible con versiones asincrónicas de la mayoría de llamadas a métodosexpuestas por las clases del cliente .NET. Los métodos asíncronos le permiten llamar a los servicios deAWS sin disponer del bloque de código en la respuesta del servicio. Por ejemplo, puede crear una solicitudpara escribir datos en Amazon S3 o DynamoDB y, a continuación, permitir que su código siga haciendootro trabajo mientras AWS procesa las solicitudes.

Sintaxis de los métodos de solicitudes asincrónicasUna solicitud asincrónica a un servicio de AWS se compone de dos fases. La primera fase consiste enllamar al método Begin para la solicitud. Este método inicia la operación asincrónica. El método Endcorrespondiente recupera la respuesta del servicio y también proporciona una oportunidad para gestionarexcepciones que hayan podido producirse durante la operación.

Note

No es necesario llamar al método End. Suponiendo que no surjan errores, la operaciónasincrónica se completará tanto si llama como si no llama al método End.

Sintaxis del método BeginAdemás de tomar un parámetro del objeto de la solicitud, como PutItemRequest, los métodos Beginasincrónicos toman dos parámetros adicionales: una función de devolución de llamada y un objeto deestado. En vez de devolver un objeto de respuesta del servicio, los métodos Begin devuelven un resultadodel tipo IAsyncResult. Para ver la definición de dicho tipo, consulte la documentación de MSDN.

Método sincrónico

PutItemResponse PutItem( PutItemRequest putItemRequest)

Método asincrónico

IAsyncResult BeginPutItem( GetSessionTokenRequest getSessionTokenRequest, {AsyncCallback callback}, {Object state})

Devolución de llamada AsyncCallback

La función de devolución de llamada se llama al completarse la operación asincrónica. Al llamar a lafunción, esta recibe un único parámetro del tipo IAsyncResult. La función de devolución de llamada tiene lasiguiente firma.

void Callback(IAsyncResult asyncResult)

Estado del objeto

El tercer parámetro, state, es un objeto definido por el usuario disponible para la función dedevolución de llamada como la propiedad AsyncState del parámetro asyncResult, es decir,asyncResult.AsyncState.

Patrones de llamada

• Transferir una función de devolución de llamada y un objeto de estado.• Transferir una función de devolución de llamada y un valor nulo para el objeto de estado.

36

Page 41: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAPI asincrónica para .NET Framework 3.5

• Transferir valores nulos para la función de devolución de llamada y para el objeto de estado.

En este tema se añade un ejemplo de cada uno de estos patrones.

Uso de IAsyncResult.AsyncWaitHandle

En algunas circunstancias, es posible que el código que llama al método Begin deba activar otro métodoque llama para esperar a que se complete la operación asincrónica. En estos casos, puede transferirel método que ha devuelto WaitHandle mediante la propiedad IAsyncResult.AsyncWaitHandledel valor devuelto IAsyncResult. Ahora, el método podrá esperar a que se complete la operaciónasincrónica llamando a WaitOne en este WaitHandle.

EjemplosEn todos los ejemplos que siguen se presupone que se utiliza el siguiente código de inicialización.

public static void TestPutObjectAsync(){ // Create a client AmazonS3Client client = new AmazonS3Client();

PutObjectResponse response; IAsyncResult asyncResult;

// // Create a PutObject request // // You will need to use your own bucket name below in order // to run this sample code. // PutObjectRequest request = new PutObjectRequest { BucketName = "{PUT YOUR OWN EXISTING BUCKET NAME HERE}", Key = "Item", ContentBody = "This is sample content..." };

// // additional example code //}

Ninguna devolución de llamada especificada

El siguiente código de ejemplo llama a BeginPutObject, realiza algo de trabajo y luego llama aEndPutObject para recuperar la respuesta del servicio. La llamada a EndPutObject se engloba en unbloque try para captar cualquier excepción que pueda surgir durante la operación.

asyncResult = client.BeginPutObject(request, null, null);while ( ! asyncResult.IsCompleted ) { // // Do some work here //}try { response = client.EndPutObject(asyncResult);}catch (AmazonS3Exception s3Exception) { // // Code to process exception

37

Page 42: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAPI asincrónica para .NET Framework 3.5

//}

Devolución de llamada simpleEn este ejemplo se presupone que se ha definido la siguiente función de devolución de llamada.

public static void SimpleCallback(IAsyncResult asyncResult){ Console.WriteLine("Finished PutObject operation with simple callback");}

La siguiente línea de código llama a BeginPutObject y especifica la función de devolución de llamadaanterior. La función de devolución de llamada se llama al completarse la operación PutObject. Lallamada a BeginPutObject especifica null para el parámetro state porque la función de devoluciónde llamada simple no accede a la propiedad AsyncState del parámetro asyncResult. Ni el código dellamada ni la función de devolución de llamada llaman a EndPutObject. Por ello, la respuesta del serviciose rechaza de forma efectiva y se ignora cualquier excepción que se produzca durante la operación.

asyncResult = client.BeginPutObject(request, SimpleCallback, null);

Devolución de llamada con el clienteEn este ejemplo se presupone que se ha definido la siguiente función de devolución de llamada.

public static void CallbackWithClient(IAsyncResult asyncResult){ try { AmazonS3Client s3Client = (AmazonS3Client) asyncResult.AsyncState; PutObjectResponse response = s3Client.EndPutObject(asyncResult); Console.WriteLine("Finished PutObject operation with client callback"); } catch (AmazonS3Exception s3Exception) { // // Code to process exception // }}

La siguiente línea de código llama a BeginPutObject y especifica la función de devolución de llamadaanterior. La función de devolución de llamada se llama al completarse la operación PutObject. En esteejemplo, la llamada a BeginPutObject especifica el objeto del cliente Amazon S3 para el parámetrostate. La función de devolución de llamada usa el cliente para llamar al método EndPutObject pararecuperar la respuesta del servidor. Dado que cualquier excepción que se produzca durante la operaciónse recibirá cuando la devolución de llamada llame a EndPutObject, esta llamada se coloca en un bloquetry.

asyncResult = client.BeginPutObject(request, CallbackWithClient, client);

Devolución de llamada con el objeto de estadoEn este ejemplo se presupone que se han definido la siguiente clase y función de devolución de llamada.

class ClientState{ AmazonS3Client client; DateTime startTime;

38

Page 43: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAPI asincrónica para .NET Framework 3.5

public AmazonS3Client Client { get { return client; } set { client = value; } }

public DateTime Start { get { return startTime; } set { startTime = value; } }}

public static void CallbackWithState(IAsyncResult asyncResult){ try { ClientState state = asyncResult.AsyncState as ClientState; AmazonS3Client s3Client = (AmazonS3Client)state.Client; PutObjectResponse response = state.Client.EndPutObject(asyncResult); Console.WriteLine("Finished PutObject. Elapsed time: {0}", (DateTime.Now - state.Start).ToString()); } catch (AmazonS3Exception s3Exception) { // // Code to process exception // }}

La siguiente línea de código llama a BeginPutObject y especifica la función de devolución de llamadaanterior. La función de devolución de llamada se llama al completarse la operación PutObject. En esteejemplo, la llamada a BeginPutObject especifica, para el parámetro state, una instancia de la claseClientState definida previamente. Esta clase integra el cliente Amazon S3, así como la hora en quese llama a BeginPutObject. La función de devolución de llamada usa el objeto del cliente Amazon S3para llamar al método EndPutObject para recuperar la respuesta del servidor. La devolución de llamadatambién extrae la hora de inicio de la operación y la utiliza para imprimir la hora en que se completó laoperación asincrónica.

Como en los ejemplos anteriores, dado que cualquier excepción que se produzca durante la operación serecibirá cuando se llame a EndPutObject, esta llamada se coloca en un bloque try.

asyncResult = client.BeginPutObject( request, CallbackWithState, new ClientState { Client = client, Start = DateTime.Now } );

Ejemplo completoEl siguiente ejemplo de código presenta los patrones que puede utilizar para llamar a métodos de solicitudasincrónicos.

using System;using System.Collections.Generic;using System.Diagnostics;using System.IO;using System.Text;using System.Threading;

using Amazon;using Amazon.Runtime;using Amazon.S3;

39

Page 44: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAPI asincrónica para .NET Framework 3.5

using Amazon.S3.Model;

namespace async_aws_net{ class ClientState { AmazonS3Client client; DateTime startTime;

public AmazonS3Client Client { get { return client; } set { client = value; } }

public DateTime Start { get { return startTime; } set { startTime = value; } } }

class Program { public static void Main(string[] args) { TestPutObjectAsync(); }

public static void SimpleCallback(IAsyncResult asyncResult) { Console.WriteLine("Finished PutObject operation with simple callback"); Console.Write("\n\n"); }

public static void CallbackWithClient(IAsyncResult asyncResult) { try { AmazonS3Client s3Client = (AmazonS3Client) asyncResult.AsyncState; PutObjectResponse response = s3Client.EndPutObject(asyncResult); Console.WriteLine("Finished PutObject operation with client callback"); Console.WriteLine("Service Response:"); Console.WriteLine("-----------------"); Console.WriteLine(response); Console.Write("\n\n"); } catch (AmazonS3Exception s3Exception) { // // Code to process exception // } }

public static void CallbackWithState(IAsyncResult asyncResult) { try { ClientState state = asyncResult.AsyncState as ClientState; AmazonS3Client s3Client = (AmazonS3Client)state.Client; PutObjectResponse response = state.Client.EndPutObject(asyncResult); Console.WriteLine( "Finished PutObject operation with state callback that started at {0}", (DateTime.Now - state.Start).ToString() + state.Start); Console.WriteLine("Service Response:"); Console.WriteLine("-----------------"); Console.WriteLine(response); Console.Write("\n\n");

40

Page 45: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAPI asincrónica para .NET Framework 3.5

} catch (AmazonS3Exception s3Exception) { // // Code to process exception // } }

public static void TestPutObjectAsync() { // Create a client AmazonS3Client client = new AmazonS3Client();

PutObjectResponse response; IAsyncResult asyncResult;

// // Create a PutObject request // // You will need to change the BucketName below in order to run this // sample code. // PutObjectRequest request = new PutObjectRequest { BucketName = "PUT-YOUR-OWN-EXISTING-BUCKET-NAME-HERE", Key = "Item", ContentBody = "This is sample content..." };

response = client.PutObject(request); Console.WriteLine("Finished PutObject operation for {0}.", request.Key); Console.WriteLine("Service Response:"); Console.WriteLine("-----------------"); Console.WriteLine("{0}", response); Console.Write("\n\n");

request.Key = "Item1"; asyncResult = client.BeginPutObject(request, null, null); while ( ! asyncResult.IsCompleted ) { // // Do some work here // } try { response = client.EndPutObject(asyncResult); } catch (AmazonS3Exception s3Exception) { // // Code to process exception // }

Console.WriteLine("Finished Async PutObject operation for {0}.", request.Key ); Console.WriteLine("Service Response:"); Console.WriteLine("-----------------"); Console.WriteLine(response); Console.Write("\n\n");

request.Key = "Item2"; asyncResult = client.BeginPutObject(request, SimpleCallback, null);

request.Key = "Item3"; asyncResult = client.BeginPutObject(request, CallbackWithClient, client);

request.Key = "Item4"; asyncResult = client.BeginPutObject(request, CallbackWithState,

41

Page 46: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideReintentos y tiempos de espera

new ClientState { Client = client, Start = DateTime.Now } );

Thread.Sleep( TimeSpan.FromSeconds(5) ); } }}

Véase también• Getting Started with the AWS SDK for .NET (p. 3)• Programación con AWS SDK para .NET (p. 8)

Reintentos y tiempos de esperaEl AWS SDK for .NET le permite configurar el número de reintentos y los valores de tiempo de espera delas solicitudes HTTP a los servicios de AWS. Si los valores predeterminados de los reintentos y los tiemposde espera no son adecuados para su aplicación, puede ajustarlos para sus requisitos específicos, pero esimportante comprender cómo afectará hacer esto al comportamiento de su aplicación.

Para determinar qué valores usar para los reintentos y los tiempos de espera, tenga en cuenta lo siguiente:

• ¿Cómo deben responder el AWS SDK for .NET y su aplicación cuando la conectividad de red sedegrade o no se pueda tener acceso a un servicio de AWS? ¿Desea que la llamada fracase rápidamenteo es adecuado que la llamada se siga reintentando en su nombre?

• ¿Es su aplicación una aplicación o sitio web que se orienta a los usuarios y que debe tener capacidad derespuesta, o se trata de una tarea de procesamiento en segundo plano con una mayor tolerancia de laslatencias más elevadas?

• ¿Se implementa la aplicación en una red de confianza con baja latencia, o se implementa en unaubicación remota con una conectividad poco fiable?

ReintentosEl AWS SDK for .NET reintentará solicitudes con errores producidos por la limitación controlada dellado del servidor o por conexiones perdidas. Puede usar la propiedad MaxErrorRetry de la claseClientConfig para especificar el número de reintentos en el nivel de cliente del servicio. el AWS SDKfor .NET reintentará la operación la cantidad especificada de veces antes de que se produzca el error yde que se lance una excepción. De forma predeterminada, la propiedad MaxErrorRetry se estableceen 4, salvo para la clase AmazonDynamoDBConfig, que pasa de forma predeterminada a 10 reintentos.Cuando se produce un reintento, aumenta la latencia de su solicitud. Debe configurar sus reintentos segúnlos límites de su aplicación para la latencia de solicitudes total y las tasas de error.

Tiempos de esperaEl AWS SDK for .NET le permite configurar los valores de tiempo de espera de la solicitud o de tiempode espera de lectura/escritura del socket en el nivel de cliente del servicio. Estos valores se especificanen las propiedades Timeout y ReadWriteTimeout de la clase ClientConfig, respectivamente. Estosvalores se pasan como las propiedades Timeout y ReadWriteTimeout de los objetos HttpWebRequestcreados por el objeto de cliente de servicio de AWS. De forma predeterminada, el valor Timeout es de100 segundos y el valor ReadWriteTimeout es de 300 segundos.

Cuando su red tiene una elevada latencia o existen condiciones que hacen que se reintente una operación,el uso de valores de tiempo de espera largo y un elevado número de reintentos pueden hacer que algunasoperaciones del SDK parezcan no tener capacidad de respuesta.

42

Page 47: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplo

Note

La versión del AWS SDK for .NET que tiene como objetivo la biblioteca de clases portable (PCL)usa la clase HttpClient en lugar de la clase HttpWebRequest y admite únicamente la propiedadTimeout.

A continuación, se indican las excepciones sobre los valores de tiempo de espera predeterminados. Estosvalores se invalidan al establecer de forma explícita los valores de tiempo de espera.

• Timeout y ReadWriteTimeout se establecen en los valores máximos si el método al que sellama carga una secuencia, como AmazonS3Client.PutObject(), AmazonS3Client.UploadPart(),AmazonGlacierClient.UploadArchive() etc.

• La versión del AWS SDK for .NET que tiene como objetivo .NET Framework 4.5 estableceTimeout y ReadWriteTimeout en los valores máximos de todos los objetos AmazonS3Client yAmazonGlacierClient.

• La versión del AWS SDK for .NET que tiene como objetivo la biblioteca de clases portable (PCL)establece Timeout en el valor máximo de todos los objetos AmazonS3Client y AmazonGlacierClient.

EjemploEn el siguiente ejemplo se muestra cómo especificar un máximo de 2 reintentos, un tiempo de espera de10 segundos y un tiempo de espera de lectura/escritura de 10 segundos de un objeto AmazonS3Client.

var client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // Default value is 100 seconds ReadWriteTimeout = TimeSpan.FromSeconds(10), // Default value is 300 seconds MaxErrorRetry = 2 // Default value is 4 retries });

Migración de su código a la versión 3 del AWS SDKfor .NET

En este tema se describen los cambios en la versión 3 del AWS SDK for .NET y cómo migrar su código aesta versión del SDK.

Acerca de las versiones del AWS SDK for .NETEl AWS SDK for .NET, lanzado originalmente en noviembre de 2009 se diseñó para .NET Framework 2.0.Desde entonces, .NET se ha mejorado con .NET Framework 4.0 y .NET Framework 4.5, y se han añadidonuevas plataformas de destino: WinRT y Windows Phone.

AWS SDK for .NET versión 2 se actualizó para beneficiarse de las nuevas características de laplataforma .NET y centrarse en WinRT y Windows Phone.

AWS SDK for .NET versión 3 se actualizó para que los ensamblados sean modulares.

Rediseño de la arquitectura del SDKToda la versión 3 del AWS SDK for .NET se ha rediseñado para que sea modular. Ahora cada serviciose implementa en su propio ensamblado, en lugar de en un ensamblado global. Ya no es necesario

43

Page 48: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideCambios bruscos

que añada todo el AWS SDK for .NET en su aplicación. Ahora puede añadir ensamblados solo para losservicios de AWS que utiliza su aplicación.

Cambios bruscosEn las siguientes secciones se describen cambios de la versión 3 del AWS SDK for .NET.

AWSClientFactory eliminadaSe ha eliminado la clase Amazon.AWSClientFactory. Ahora, para crear un cliente de servicio debeutilizar el constructor del cliente de servicio. Por ejemplo, para crear un AmazonEC2Client:

var ec2Client = new Amazon.EC2.AmazonEC2Client();

Amazon.Runtime.AssumeRoleAWSCredentials eliminadaSe ha eliminado la clase Amazon.Runtime.AssumeRoleAWSCredentials porque estabaen un espacio de nombres central pero era dependiente de AWS Security Token Servicey porque ya es obsoleta en el SDK desde hace un tiempo. En su lugar, utilice la claseAmazon.SecurityToken.AssumeRoleAWSCredentials.

Método SetACL eliminado de S3LinkLa clase S3Link forma parte del paquete Amazon.DynamoDBv2 y se utiliza para almacenar objetos enAmazon S3 que son referencias en un elemento de DynamoDB. Se trata de una característica útil, perono queríamos crear una dependencia de compilación en el paquete Amazon.S3 para DynamoDB. Enconsecuencia, hemos simplificado los métodos Amazon.S3 expuestos de la clase S3Link reemplazandoel método SetACL por el método MakeS3ObjectPublic. Para obtener más control sobre la lista decontrol de acceso (ACL) en el objeto, utilice el paquete Amazon.S3 directamente.

Eliminación de clases de resultado obsoletasPara la mayoría de servicios en el AWS SDK for .NET, las operaciones devuelven un objeto de respuestaque contiene metadatos para la operación, como el ID de la solicitud y un objeto de resultado. Disponerde una respuesta separada y de una clase de resultado era redundante y generaba más trabajo paralos desarrolladores. En la versión 2 del AWS SDK for .NET, incluimos toda la información de la clase deresultado en la clase de respuesta. También marcamos las clases de resultado como obsoletas para evitarque se utilizaran. En la versión 3 del AWS SDK for .NET, eliminamos estas clases de resultado obsoletaspara reducir el tamaño del SDK.

Cambios en la sección AWS ConfigSe puede realizar una configuración avanzada del AWS SDK for .NET mediante el archivo App.configo Web.config. Para ello puede utilizar una sección de configuración <aws>, como la que se muestra acontinuación, que hace referencia al nombre del ensamblado del SDK.

<configuration> <configSections> <section name="aws" type="Amazon.AWSSection, AWSSDK"/> </configSections> <aws region="us-west-2"> <logging logTo="Log4Net"/> </aws></configuration>

44

Page 49: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideCambios bruscos

En la versión 3 del AWS SDK for .NET, el ensamblado AWSSDK ya no existe. Hemos colocado elcódigo común en el ensamblado AWSSDK.Core. En consecuencia, deberá modificar las referencias alensamblado AWSSDK en su archivo App.config o Web.config por el ensamblado AWSSDK.Core, de lasiguiente manera.

<configuration> <configSections> <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/> </configSections> <aws region="us-west-2"> <logging logTo="Log4Net"/> </aws></configuration>

También puede manipular las opciones de configuración con la clase Amazon.AWSConfigs. En la versión3 del AWS SDK for .NET hemos trasladado las opciones de configuración de DynamoDB de la claseAmazon.AWSConfigs a la clase Amazon.AWSConfigsDynamoDB.

45

Page 50: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideListado de recursos de AWS mediante AWS CloudFormation

Ejemplos de códigoEn los siguientes ejemplos se muestra cómo usar el AWS SDK for .NET para trabajar con servicios deAWS individuales.

Ejemplos adicionales están disponibles en GitHub.

Antes de empezar, asegúrese de haber configurado el AWS SDK para .NET (p. 3) y revise Programacióncon AWS SDK para .NET (p. 8).

Temas• Listado de recursos de AWS mediante AWS CloudFormation (p. 46)• Autenticación de usuarios con Amazon Cognito (p. 47)• Uso de bases de datos NoSQL de Amazon DynamoDB (p. 52)• Implementación de aplicaciones mediante Amazon EC2 (p. 73)• Almacenamiento de datos de archivado utilizando Amazon Glacier (p. 96)• Administración de usuarios conAWS Identity and Access Management (IAM) (p. 99)• Uso de claves de AWS KMS con la AmazonS3EncryptionClient en el AWS SDK for .NET (p. 119)• Administración de recursos de sistema de nombres de dominio (DNS) utilizando Amazon

Route 53 (p. 120)• Uso de almacenamiento de Internet de Amazon Simple Storage Service (p. 125)• Envío y recepción de notificaciones desde la nube con Amazon Simple Notification Service (p. 126)• Mensajería utilizando Amazon SQS (p. 127)• Monitorización de sus recursos de AWS utilizando Amazon CloudWatch (p. 136)• Programación de AWS OpsWorks para trabajar con pilas y aplicaciones (p. 147)• Soporte de programación para servicios de AWS adicionales (p. 147)

Listado de recursos de AWS mediante AWSCloudFormation

El AWS SDK for .NET admite AWS CloudFormation, que crea y aprovisiona implementaciones deinfraestructura de AWS de forma predecible y repetida. Para obtener más información, consulte la Guía deintroducción a AWS CloudFormation.

En el siguiente ejemplo se muestra cómo usar las API de bajo nivel para enumerar recursos accesibles enAWS CloudFormation.

// using Amazon.CloudFormation;// using Amazon.CloudFormation.Model;

var client = new AmazonCloudFormationClient();var request = new DescribeStacksRequest();var response = client.DescribeStacks(request);

foreach (var stack in response.Stacks){ Console.WriteLine("Stack: {0}", stack.StackName);

46

Page 51: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAutenticación de usuarios con Amazon Cognito

Console.WriteLine(" Status: {0}", stack.StackStatus); Console.WriteLine(" Created: {0}", stack.CreationTime);

var ps = stack.Parameters;

if (ps.Any()) { Console.WriteLine(" Parameters:");

foreach (var p in ps) { Console.WriteLine(" {0} = {1}", p.ParameterKey, p.ParameterValue); }

} }

Para obtener información acerca de la referencia de la API relacionada, consulte Amazon.CloudFormationy Amazon.CloudFormation.Model en AWS SDK for .NET API Reference.

Autenticación de usuarios con Amazon CognitoCon Identidad de Amazon Cognito puede crear identidades exclusivas para los usuarios y autenticarlospara un acceso seguro a los recursos de AWS, como Amazon S3 o Amazon DynamoDB. Identidadde Amazon Cognito es compatible con proveedores de identidades públicos tales como Amazon,Facebook, Twitter/Digits, Google o cualquier proveedor compatible con OpenID Connect, así como conidentidades sin autenticar. Amazon Cognito también es compatible con las identidades autenticadas por eldesarrollador, que le permiten registrar y autenticar usuarios mediante su propio proceso de autenticaciónbackend, sin dejar de usar Amazon Cognito Sync para sincronizar los datos de los usuarios y obteneracceso a los recursos de AWS.

Para obtener más información sobre Amazon Cognito, consulte la Guía para desarrolladores de AmazonCognito.

Los siguientes ejemplos de código muestran cómo utilizar fácilmente Identidad de Amazon Cognito. Elejemplo Proveedor de credenciales de Amazon Cognito muestra cómo crear y autenticar identidades deusuario. El ejemplo Biblioteca de extensiones CognitoAuthentication de Amazon muestra cómo utilizar labiblioteca de extensiones CognitoAuthentication para autenticar a grupos de usuarios de Amazon Cognito.

Temas• Proveedor de credenciales de Amazon Cognito (p. 47)• Ejemplos de biblioteca de extensiones CognitoAuthentication de Amazon (p. 49)

Proveedor de credenciales de Amazon CognitoAmazon.CognitoIdentity.CognitoAWSCredentials es un objeto de credenciales que usa AmazonCognito y AWS Security Token Service (AWS STS) para recuperar las credenciales con el fin de realizarllamadas de AWS.

El primer paso en la configuración de CognitoAWSCredentials es crear un “grupo de identidades”. Ungrupo de identidades es un almacén de información de identidades de usuarios que es específico de unacuenta determinada. La información se puede recuperar en plataformas, dispositivos y sistemas operativoscliente, de modo que si un usuario comienza a usar la aplicación en un teléfono y más tarde pasa a unatablet, la información de la aplicación persistente seguirá estando disponible para ese usuario. Puede crear

47

Page 52: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideProveedor de credenciales de Amazon Cognito

un nuevo grupo de identidades desde la consola de Amazon Cognito. Si usa la consola, esta también leproporcionará los demás datos que se requieren:

• Su número de cuenta: un número de 12 dígitos, por ejemplo, 123456789012, exclusivo de su cuenta.• El ARN de la función sin autenticación: la función que asumirán los usuarios que no se hayan

autenticado. Por ejemplo, esta función puede proporcionar permisos de solo lectura respecto a los datos.• El ARN de la función con autenticación: la función que asumirán los usuarios que se hayan autenticado.

Esta función puede proporcionar permisos más extensos respecto a los datos.

Configuración de CognitoAWSCredentialsEn el siguiente ejemplo de código se muestra cómo configurar CognitoAWSCredentials, que, acontinuación, puede usar para realizar una llamada a Amazon S3 como usuario sin autenticar. Estopermite realizar llamadas exigiendo tan solo una cantidad mínima de datos para autenticar el usuario.Los permisos de los usuarios se controlan mediante la función, lo que le permite configurar el acceso deacuerdo con sus necesidades.

CognitoAWSCredentials credentials = new CognitoAWSCredentials( accountId, // Account number identityPoolId, // Identity pool ID unAuthRoleArn, // Role for unauthenticated users null, // Role for authenticated users, not set region); using (var s3Client = new AmazonS3Client(credentials)) { s3Client.ListBuckets(); }

Uso de AWS como usuario sin autenticarEn el siguiente ejemplo de código se muestra cómo comenzar a usar AWS como usuario sin autenticar y, acontinuación, autenticarse a través de Facebook y actualizar las credenciales de modo que se usen las deFacebook. Con este enfoque, puede conceder capacidades diferentes a los usuarios autenticados a travésde la función con que se autentiquen. Por ejemplo, podría tener una aplicación de teléfono que permita alos usuarios ver contenido de forma anónima, pero que les permita publicarlo si inician sesión a través deuno o varios de los proveedores configurados.

CognitoAWSCredentials credentials = new CognitoAWSCredentials( accountId, identityPoolId, unAuthRoleArn, // Role for unauthenticated users authRoleArn, // Role for authenticated users region); using (var s3Client = new AmazonS3Client(credentials)) { // Initial use will be unauthenticated s3Client.ListBuckets();

// Authenticate user through Facebook string facebookToken = GetFacebookAuthToken();

// Add Facebook login to credentials. This clears the current AWS credentials // and retrieves new AWS credentials using the authenticated role. credentials.AddLogin("graph.facebook.com", facebookAccessToken);

// This call is performed with the authenticated role and credentials s3Client.ListBuckets(); }

48

Page 53: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de biblioteca de extensiones

CognitoAuthentication de Amazon

El objeto CognitoAWSCredentials proporciona más funcionalidad si cabe cuando seusa con el cliente AmazonCognitoSyncClient que forma parte de AWS SDK for .NET. Siusa tanto AmazonCognitoSyncClient como CognitoAWSCredentials, no es precisoespecificar las propiedades IdentityPoolId e IdentityId al realizar llamadas con elcliente AmazonCognitoSyncClient. Estas propiedades se rellenan automáticamente desdeCognitoAWSCredentials. Esto se ilustra en el siguiente ejemplo de código, además de un eventoque le envía una notificación siempre que la propiedad IdentityId de CognitoAWSCredentialscambia. La propiedad IdentityId puede cambiar en algunos casos; por ejemplo, cuando un usuario sinautenticar pasa a estar autenticado.

CognitoAWSCredentials credentials = GetCognitoAWSCredentials();

// Log identity changes credentials.IdentityChangedEvent += (sender, args) => { Console.WriteLine("Identity changed: [{0}] => [{1}]", args.OldIdentityId, args.NewIdentityId); };

using (var syncClient = new AmazonCognitoSyncClient(credentials)) { var result = syncClient.ListRecords(new ListRecordsRequest { DatasetName = datasetName // No need to specify these properties //IdentityId = "...", //IdentityPoolId = "..." }); }

Ejemplos de biblioteca de extensionesCognitoAuthentication de AmazonLa biblioteca de extensiones CognitoAuthentication simplifica el proceso de autenticación de grupos deusuarios de Amazon Cognito para los desarrolladores de .NET 4.5, .NET Core y Xamarin. La biblioteca sebasa en el API Amazon Cognito Identity Provider para crear y enviar llamadas al API de autenticación deusuarios. Puede obtener AWSSDK.Extensions.CognitoAuthentication en la galería NuGet.

Uso de la biblioteca de extensiones CognitoAuthenticationAmazon Cognito tiene algunos valores AuthFlow y ChallengeName integrados para el flujo deautenticación estándar para con el fin de validar el nombre de usuario y la contraseña medianteel protocolo Secure Remote Password (SRP). Para obtener más información acerca del flujo deautenticación, consulte Flujo de autenticación de los grupos de usuarios de Amazon Cognito.

En los siguientes ejemplos se requieren estas instrucciones using:

// Required for all examplesusing System;using Amazon;using Amazon.CognitoIdentity;using Amazon.CognitoIdentityProvider;using Amazon.Extensions.CognitoAuthentication;using Amazon.Runtime;// Required for the GetS3BucketsAsync exampleusing Amazon.S3;using Amazon.S3.Model;

49

Page 54: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de biblioteca de extensiones

CognitoAuthentication de Amazon

Uso de la autenticación básica

Cree un cliente AmazonCognitoIdentityProviderClient AmazonCognitoIdentityProviderClientmediante credenciales AnonymousAWSCredentials que no requieran solicitudesfirmadas. No es preciso proporcionar una región; el código subyacente llamará aFallbackRegionFactory.GetRegionEndpoint() si no se proporciona una región. Cree objetosCognitoUserPool y CognitoUser. Llame al método StartWithSrpAuthAsync mediante unasolicitud InitiateSrpAuthRequest que contenga la contraseña del usuario.

public static async void GetCredsAsync() { AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials()); CognitoUserPool userPool = new CognitoUserPool("poolID", "clientID", provider); CognitoUser user = new CognitoUser("username", "clientID", userPool, provider); InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest() { Password = "userPassword" };

AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false); accessToken = authResponse.AuthenticationResult.AccessToken;

}

Autenticación con desafíos

También es más sencillo continuar con el flujo de autenticación con desafíos, tales comoNewPasswordRequired o Multi-Factor Authentication (MFA). Los únicos requisitos son los objetosCognitoAuthentication, la contraseña del usuario para SRP y la información precisa para el siguientedesafío, que se adquiere después de pedir al usuario que la especifique. El código siguiente muestra unaforma de comprobar el tipo de desafío y obtener las respuestas adecuadas para los desafíos de MFA yNewPasswordRequired durante el flujo de autenticación.

Realice una solicitud de autenticación básica como antes y ejecute await para esperar a larespuesta AuthFlowResponse. Cuando haya recibido la respuesta, ejecute un bucle para el objetoAuthenticationResult devuelto. Si el tipo de ChallengeName es NEW_PASSWORD_REQUIRED, llameal método RespondToNewPasswordRequiredAsync.

public static async void GetCredsChallengesAsync() { AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials()); CognitoUserPool userPool = new CognitoUserPool("poolID", "clientID", provider); CognitoUser user = new CognitoUser("username", "clientID", userPool, provider); InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest(){ Password = "userPassword" };

AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);

while (authResponse.AuthenticationResult == null) { if (authResponse.ChallengeName == ChallengeNameType.NEW_PASSWORD_REQUIRED) { Console.WriteLine("Enter your desired new password:"); string newPassword = Console.ReadLine();

50

Page 55: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de biblioteca de extensiones

CognitoAuthentication de Amazon

authResponse = await user.RespondToNewPasswordRequiredAsync(new RespondToNewPasswordRequiredRequest() { SessionID = authResponse.SessionID, NewPassword = newPassword }); accessToken = authResponse.AuthenticationResult.AccessToken; } else if (authResponse.ChallengeName == ChallengeNameType.SMS_MFA) { Console.WriteLine("Enter the MFA Code sent to your device:"); string mfaCode = Console.ReadLine();

AuthFlowResponse mfaResponse = await user.RespondToSmsMfaAuthAsync(new RespondToSmsMfaRequest() { SessionID = authResponse.SessionID, MfaCode = mfaCode

}).ConfigureAwait(false); accessToken = authResponse.AuthenticationResult.AccessToken; } else { Console.WriteLine("Unrecognized authentication challenge."); accessToken = ""; break; } }

if (authResponse.AuthenticationResult != null) { Console.WriteLine("User successfully authenticated."); } else { Console.WriteLine("Error in authentication process."); } }

Uso de recursos de AWS después de la autenticación

Una vez que un usuario se ha autenticado mediante la biblioteca CognitoAuthentication, el siguiente pasoconsiste en permitir al usuario que obtenga acceso a los recursos de AWS apropiados. Para ello debecrear un grupo de identidades a través de la consola de Amazon Cognito Federated Identities. Puedeespecificar el grupo de usuarios de Amazon Cognito que creó como proveedor, mediante su poolID yclientID, para permitir que los usuarios de usuarios del grupo de usuarios de Amazon Cognito obtenganacceso a los recursos de AWS conectados a su cuenta. También puede especificar diferentes funcionespara que los usuarios, tanto autenticados como sin autenticar, obtengan acceso a los diferentes recursos.Puede cambiar estas reglas en la consola de IAM, donde puede agregar o eliminar permisos en elcampo :guilabel`Action` de la política conectada a la función. A continuación, con la información apropiadade grupo de identidades, grupo de usuarios y usuarios de Amazon Cognito, puede realizar llamadas adiferentes recursos de AWS. En el siguiente ejemplo se muestra un usuario autenticado con SRP queobtiene acceso a distintos buckets de Amazon S3 permitidos por la función del grupo de identidadesasociado.

public async void GetS3BucketsAsync() { var provider = new AmazonCognitoIdentityProviderClient(new AnonymousAWSCredentials());

51

Page 56: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de bases de datos NoSQL de Amazon DynamoDB

CognitoUserPool userPool = new CognitoUserPool("poolID", "clientID", provider); CognitoUser user = new CognitoUser("username", "clientID", userPool, provider);

string password = "userPassword";

AuthFlowResponse context = await user.StartWithSrpAuthAsync(new InitiateSrpAuthRequest() { Password = password }).ConfigureAwait(false);

CognitoAWSCredentials credentials = user.GetCognitoAWSCredentials("identityPoolID", RegionEndpoint.< YourIdentityPoolRegion >);

using (var client = new AmazonS3Client(credentials)) { ListBucketsResponse response = await client.ListBucketsAsync(new ListBucketsRequest()).ConfigureAwait(false);

foreach (S3Bucket bucket in response.Buckets) { Console.WriteLine(bucket.BucketName); } } }

Más opciones de autenticaciónAdemás del SRP, NewPasswordRequired y MFA, la biblioteca de extensiones CognitoAuthenticationofrece un flujo de autenticación más sencillo para:

• Custom: inicio con una llamada a StartWithCustomAuthAsync(InitiateCustomAuthRequestcustomRequest)

• RefreshToken: inicio con una llamada aStartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequestrefreshTokenRequest)

• RefreshTokenSRP: inicio con una llamada aStartWithRefreshTokenAuthAsync(InitiateRefreshTokenAuthRequestrefreshTokenRequest)

• AdminNoSRP: inicio con una llamada aStartWithAdminNoSrpAuthAsync(InitiateAdminNoSrpAuthRequest adminAuthRequest)

Llame al método apropiado según el flujo que desee. A continuación, siga pidiendo al usuario queresponda a los desafíos a medida que se presenten en los objetos AuthFlowResponse de cada llamadaal método. También llame al método de respuesta adecuado; por ejemplo, RespondToSmsMfaAuthAsyncpara los desafíos de MFA y RespondToCustomAuthAsync para los desafíos personalizados.

Uso de bases de datos NoSQL de AmazonDynamoDB

El AWS SDK for .NET admite Amazon DynamoDB, que es un servicio de base de datos NoSQL rápidoofrecido por AWS. El SDK proporciona tres modelos de programación para comunicarse con DynamoDB:el modelo de bajo nivel, el modelo de documento y el modelo de persistencia de objetos.

52

Page 57: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideModelo de bajo nivel

En la siguiente información se presentan estos modelos y sus API, se proporcionan ejemplos acerca decómo y cuándo usarlos y se le facilitan enlaces a recursos de programación de DynamoDB adicionales enel AWS SDK for .NET.

Temas• Modelo de bajo nivel (p. 53)• Modelo de documento (p. 55)• Modelo de persistencia de objetos (p. 57)• Más información (p. 58)• Uso de expresiones con Amazon DynamoDB y el AWS SDK for .NET (p. 59)• Compatibilidad de JSON en Amazon DynamoDB con el AWS SDK for .NET (p. 68)• Administración del estado de la sesión de ASP.NET con Amazon DynamoDB (p. 70)

Modelo de bajo nivelEl modelo de programación de bajo nivel incluye llamadas directas al servicio DynamoDB. Puede obteneracceso a este modelo a través del espacio de nombres Amazon.DynamoDBv2.

De los tres modelos, el de bajo nivel requiere que escriba la mayor parte del código. Por ejemplo, debeconvertir los tipos de datos de .NET en sus equivalentes en DynamoDB. Sin embargo, este modelo leofrece acceso a la mayoría de las características.

En el siguiente ejemplo puede ver cómo usar el modelo de bajo nivel para crear una tabla, modificarla einsertar elementos en ella en DynamoDB.

Creación de una tablaEn el siguiente ejemplo, puede crear una tabla mediante el método CreateTable de laclase AmazonDynamoDBClient. El método CreateTable usa una instancia de la claseCreateTableRequest que contiene características como los nombres de atributos de elementoobligatorios, la definición de clave principal y la capacidad de desempeño. El método CreateTabledevuelve una instancia de la clase CreateTableResponse.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();

Console.WriteLine("Getting list of tables");List<string> currentTables = client.ListTables().TableNames;Console.WriteLine("Number of tables: " + currentTables.Count);if (!currentTables.Contains("AnimalsInventory")){ var request = new CreateTableRequest { TableName = "AnimalsInventory", AttributeDefinitions = new List<AttributeDefinition> { new AttributeDefinition { AttributeName = "Id", // "S" = string, "N" = number, and so on. AttributeType = "N" }, new AttributeDefinition

53

Page 58: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideModelo de bajo nivel

{ AttributeName = "Type", AttributeType = "S" } }, KeySchema = new List<KeySchemaElement> { new KeySchemaElement { AttributeName = "Id", // "HASH" = hash key, "RANGE" = range key. KeyType = "HASH" }, new KeySchemaElement { AttributeName = "Type", KeyType = "RANGE" }, }, ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = 10, WriteCapacityUnits = 5 }, };

var response = client.CreateTable(request);

Console.WriteLine("Table created with request ID: " + response.ResponseMetadata.RequestId);}

Verificación de la preparación de una tabla para su modificaciónAntes de poder cambiar o modificar una tabla, esta debe estar lista para ello. En el siguiente ejemplo semuestra cómo usar el modelo de bajo nivel para verificar que una tabla de DynamoDB está lista. En esteejemplo, se hace referencia a la tabla de destino que se comprobará a través del método DescribeTablede la clase AmazonDynamoDBClient. Cada cinco segundos, el código comprueba el valor de lapropiedad TableStatus de la tabla. Cuando el estado se establezca en ACTIVE, la tabla estará lista paramodificarse.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient(); var status = "";

do{ // Wait 5 seconds before checking (again). System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5)); try { var response = client.DescribeTable(new DescribeTableRequest { TableName = "AnimalsInventory" });

Console.WriteLine("Table = {0}, Status = {1}", response.Table.TableName, response.Table.TableStatus);

54

Page 59: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideModelo de documento

status = response.Table.TableStatus; } catch (ResourceNotFoundException) { // DescribeTable is eventually consistent. So you might // get resource not found. }

} while (status != TableStatus.ACTIVE);

Inserción de un elemento en una tablaEn el siguiente ejemplo, puede usar el modelo de bajo nivel para insertar dos elementos enuna tabla de DynamoDB. Cada elemento se inserta a través del método PutItem de la claseAmazonDynamoDBClient, mediante una instancia de la clase PutItemRequest. Cada una de las dosinstancias de la clase PutItemRequest toma el nombre de la tabla en la que se insertarán los elementos,con una serie de valores de atributos de elemento.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();

var request1 = new PutItemRequest{ TableName = "AnimalsInventory", Item = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "1" }}, { "Type", new AttributeValue { S = "Dog" }}, { "Name", new AttributeValue { S = "Fido" }} }};

var request2 = new PutItemRequest{ TableName = "AnimalsInventory", Item = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "2" }}, { "Type", new AttributeValue { S = "Cat" }}, { "Name", new AttributeValue { S = "Patches" }} }}; client.PutItem(request1);client.PutItem(request2);

Modelo de documentoEl modelo de programación del documento proporciona una forma más sencilla de trabajar condatos en DynamoDB. Este modelo está destinado de manera específica al acceso a tablas yelementos de las tablas. Puede obtener acceso a este modelo a través del espacio de nombresAmazon.DynamoDBv2.DocumentModel.

En comparación con el modelo de programación de bajo nivel, es más sencillo escribir el código delmodelo de documento en los datos de DynamoDB. Por ejemplo, no debe convertir tantos tipos de datosde .NET en sus equivalentes en DynamoDB. Sin embargo, este modelo no proporciona acceso a tantascaracterísticas como el modelo de programación de bajo nivel. Por ejemplo, puede usar este modelo paracrear, recuperar, actualizar y eliminar elementos de las tablas. No obstante, para crear las tablas, debe

55

Page 60: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideModelo de documento

usar el modelo de bajo nivel. En comparación con el modelo de persistencia de objetos, este modelorequiere que escriba más código para almacenar, cargar y consultar objetos de .NET.

En los siguientes ejemplos puede ver cómo usar el modelo de documento para insertar elementos yobtener elementos de las tablas en DynamoDB.

Inserción de un elemento en una tablaEn el siguiente ejemplo, se inserta un elemento en una tabla a través del método PutItem de laclase Table. El método PutItem toma una instancia de la clase Document; la clase Document essencillamente una colección de atributos inicializados. Para determinar la tabla en la que se insertaráel elemento, llame al método LoadTable de la clase Table, especificando una instancia de la claseAmazonDynamoDBClient y el nombre de la tabla de destino en DynamoDB.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DocumentModel;

var client = new AmazonDynamoDBClient();var table = Table.LoadTable(client, "AnimalsInventory");var item = new Document();

item["Id"] = 3;item["Type"] = "Horse";item["Name"] = "Shadow";

table.PutItem(item);

Obtención de un elemento de una tablaEn el siguiente ejemplo, se recupera el elemento a través del método GetItem de la clase Table. Paradeterminar el elemento que se desea obtener, el método GetItem usa la clave primaria hash y de rangodel elemento de destino. Para determinar la tabla de la que se desea obtener el elemento, el métodoLoadTable de la clase Table usa una instancia de la clase AmazonDynamoDBClient y el nombre de latabla de destino en DynamoDB.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DocumentModel;

var client = new AmazonDynamoDBClient();var table = Table.LoadTable(client, "AnimalsInventory");var item = table.GetItem(3, "Horse");

Console.WriteLine("Id = " + item["Id"]);Console.WriteLine("Type = " + item["Type"]);Console.WriteLine("Name = " + item["Name"]);

En el ejemplo anterior, los valores de atributo Id, Type y Name se convierten de forma implícita encadenas para el método WriteLine. Puede realizar conversiones explícitas mediante los diversosmétodos AsType de la clase DynamoDBEntry. Por ejemplo, podría convertir de forma explícita el valor deatributo para Id a partir de un tipo de datos Primitive en un entero a través del método AsInt:

int id = item["Id"].AsInt();

O bien, podría simplemente realizar una conversión explícita aquí mediante (int):

int id = (int)item["Id"];

56

Page 61: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideModelo de persistencia de objetos

Modelo de persistencia de objetosEl modelo de programación de persistencia de objetos está diseñado de forma específica para almacenar,cargar y consultar objetos de .NET en DynamoDB. Puede obtener acceso a este modelo a través delespacio de nombres Amazon.DynamoDBv2.DataModel.

De los tres modelos, lo más sencillo es escribir el código del modelo de persistencia de objetos siempreque almacene, cargue o consulte los datos de DynamoDB. Por ejemplo, puede trabajar directamentecon los tipos de datos de DynamoDB. Sin embargo, este modelo proporciona acceso únicamente a lasoperaciones que almacenan, cargan y consultan objetos de .NET en DynamoDB. Por ejemplo, puede usareste modelo para crear, recuperar, actualizar y eliminar elementos de las tablas. Sin embargo, primerodebe crear sus tablas con el modelo de bajo nivel y, a continuación, utilizar este modelo para asignar lasclases de .NET a las tablas.

En los siguientes ejemplos puede ver cómo definir una clase de .NET que representa un elemento, usaruna instancia de la clase de .NET para insertar un elemento y usar una instancia de un objeto de .NETpara obtener un elemento de una tabla en DynamoDB.

Definición de una clase de .NET que representa un elemento enuna tablaEn el siguiente ejemplo, el atributo DynamoDBTable especifica el nombre de la tabla, mientras que losatributos DynamoDBHashKey y DynamoDBRangeKey modelan la clave primaria hash y de rango de latabla.

// using Amazon.DynamoDBv2.DataModel;

[DynamoDBTable("AnimalsInventory")]class Item{ [DynamoDBHashKey] public int Id { get; set; } [DynamoDBRangeKey] public string Type { get; set; } public string Name { get; set; }}

Uso de una instancia de la clase de .NET para insertar unelemento en una tablaEn este ejemplo, el elemento se inserta a través del método Save de la clase DynamoDBContext, quetoma una instancia inicializada de la clase de .NET que representa el elemento (la instancia de la claseDynamoDBContext se inicializa con una instancia de la clase AmazonDynamoDBClient).

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DataModel; var client = new AmazonDynamoDBClient();var context = new DynamoDBContext(client);var item = new Item{ Id = 4, Type = "Fish", Name = "Goldie"};

context.Save(item);

57

Page 62: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideMás información

Uso de una instancia de un objeto de .NET para obtener unelemento de una tablaEn este ejemplo, el elemento se recupera a través del método Load de la clase DynamoDBContext, quetoma una instancia inicializada parcialmente de la clase de .NET que representa la clave primaria hashy de rango del elemento que se va a recuperar (como se ha indicado con anterioridad, la instancia de laclase DynamoDBContext se inicializa con una instancia de la clase AmazonDynamoDBClient).

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DataModel;

var client = new AmazonDynamoDBClient();var context = new DynamoDBContext(client);var item = context.Load<Item>(4, "Fish");

Console.WriteLine("Id = {0}", item.Id);Console.WriteLine("Type = {0}", item.Type);Console.WriteLine("Name = {0}", item.Name);

Más informaciónUso de AWS SDK para .NET para programar DynamoDB información y ejemplos**

• API de DynamoDB• Puesta en marcha de la serie DynamoDB• Serie DynamoDB: modelo de documento• Serie DynamoDB: esquemas de conversión• Serie DynamoDB: modelo de persistencia de objetos• Serie DynamoDB: expresiones• Uso de expresiones con Amazon DynamoDB y el AWS SDK para .NET (p. 59)• Compatibilidad de JSON en Amazon DynamoDB con el AWS SDK para .NET (p. 68)• Administración del estado de la sesión de ASP.NET con Amazon DynamoDB (p. 70)

Información y ejemplos del modelo de bajo nivel

• Uso de tablas mediante la API de bajo nivel del AWS SDK para .NET• Uso de elementos mediante la API de bajo nivel del AWS SDK para .NET• Consulta de tablas mediante la API de bajo nivel del AWS SDK para .NET• Examen de tablas mediante la API de bajo nivel del AWS SDK para .NET• Uso de índices secundarios locales mediante la API de bajo nivel del AWS SDK para .NET• Uso de índices secundarios globales mediante la API de bajo nivel del AWS SDK para .NET

Información y ejemplos del modelo de documento

• DynamoDB Data Types• DynamoDBEntry• .NET: modelo de documento

Información y ejemplos del modelo de persistencia de objetos

• .NET: modelo de persistencia de objetos

58

Page 63: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

Uso de expresiones con Amazon DynamoDB y elAWS SDK for .NETEn los siguientes ejemplos se muestra cómo usar el AWS SDK for .NET para programar DynamoDB conexpresiones. Las expresiones se utilizan para indicar los atributos que se desea leer de un elemento enuna tabla de DynamoDB. Además, se pueden utilizar al escribir un elemento para indicar las condicionesque se deben cumplir (también denominado una actualización condicional) y la manera en que se debenactualizar los atributos. Algunos ejemplos de actualización sustituyen el atributo por un valor nuevo oañaden datos nuevos a una lista o mapa. Para obtener más información acerca del uso de expresiones,consulte Reading and Writing Items Using Expressions.

Temas• Datos de muestra (p. 59)• Obtener un elemento individual utilizando expresiones y la clave principal del elemento (p. 62)• Obtener varios elementos utilizando expresiones y la clave principal de la tabla (p. 62)• Obtener varios elementos utilizando expresiones y otros atributos del elemento (p. 63)• Imprimir un elemento (p. 64)• Crear o reemplazar un elemento utilizando expresiones (p. 66)• Actualizar un elemento utilizando expresiones (p. 67)• Eliminar un elemento utilizando expresiones (p. 67)• Más información (p. 68)

Datos de muestraLos ejemplos de código de este tema hacen referencia a los dos elementos de ejemplo siguientes de latabla de DynamoDB llamada ProductCatalog. Estos elementos describen información sobre entradasde producto en un catálogo ficticio de una tienda de bicicletas. Estos elementos se basan en un ejemploproporcionado en Caso práctico: un elemento ProductCatalog. Los descriptores de tipos de datos comoBOOL, L, M, N, NS, S y SS equivalen a los del formato de datos JSON.

{ "Id": { "N": "205" }, "Title": { "S": "20-Bicycle 205" }, "Description": { "S": "205 description" }, "BicycleType": { "S": "Hybrid" }, "Brand": { "S": "Brand-Company C" }, "Price": { "N": "500" }, "Gender": { "S": "B" }, "Color": { "SS": [

59

Page 64: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

"Red", "Black" ] }, "ProductCategory": { "S": "Bike" }, "InStock": { "BOOL": true }, "QuantityOnHand": { "N": "1" }, "RelatedItems": { "NS": [ "341", "472", "649" ] }, "Pictures": { "L": [ { "M": { "FrontView": { "S": "http://example/products/205_front.jpg" } } }, { "M": { "RearView": { "S": "http://example/products/205_rear.jpg" } } }, { "M": { "SideView": { "S": "http://example/products/205_left_side.jpg" } } } ] }, "ProductReviews": { "M": { "FiveStar": { "SS": [ "Excellent! Can't recommend it highly enough! Buy it!", "Do yourself a favor and buy this." ] }, "OneStar": { "SS": [ "Terrible product! Do not buy this." ] } } }},{ "Id": { "N": "301" }, "Title": {

60

Page 65: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

"S": "18-Bicycle 301" }, "Description": { "S": "301 description" }, "BicycleType": { "S": "Road" }, "Brand": { "S": "Brand-Company C" }, "Price": { "N": "185" }, "Gender": { "S": "F" }, "Color": { "SS": [ "Blue", "Silver" ] }, "ProductCategory": { "S": "Bike" }, "InStock": { "BOOL": true }, "QuantityOnHand": { "N": "3" }, "RelatedItems": { "NS": [ "801", "822", "979" ] }, "Pictures": { "L": [ { "M": { "FrontView": { "S": "http://example/products/301_front.jpg" } } }, { "M": { "RearView": { "S": "http://example/products/301_rear.jpg" } } }, { "M": { "SideView": { "S": "http://example/products/301_left_side.jpg" } } } ] }, "ProductReviews": { "M": {

61

Page 66: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

"FiveStar": { "SS": [ "My daughter really enjoyed this bike!" ] }, "ThreeStar": { "SS": [ "This bike was okay, but I would have preferred it in my color.", "Fun to ride." ] } } }}

Obtener un elemento individual utilizando expresiones y la claveprincipal del elementoEn el siguiente ejemplo se muestra el métodoAmazon.DynamoDBv2.AmazonDynamoDBClient.GetItem y un conjunto de expresiones para obtener yluego imprimir el elemento que tenga un Id 205. Solo se devuelven los siguientes atributos del elemento:Id, Title, Description, Color, RelatedItems, Pictures y ProductReviews.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();var request = new GetItemRequest{ TableName = "ProductCatalog", ProjectionExpression = "Id, Title, Description, Color, #ri, Pictures, #pr", ExpressionAttributeNames = new Dictionary<string, string> { { "#pr", "ProductReviews" }, { "#ri", "RelatedItems" } }, Key = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "205" } } },};var response = client.GetItem(request);

// PrintItem() is a custom function.PrintItem(response.Item);

En el ejemplo anterior, la propiedad ProjectionExpression especifica los atributos que se debendevolver. La propiedad ExpressionAttributeNames especifica el marcador de posición #pr paraque represente el atributo ProductReviews y el marcador de posición #ri para que represente elatributo RelatedItems. La llamada a PrintItem hace referencia a la función personalizada, tal como sedescribe en Imprimir un elemento (p. 64).

Obtener varios elementos utilizando expresiones y la claveprincipal de la tablaEn el siguiente ejemplo se muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.Queryy un conjunto de expresiones para obtener y luego imprimir el elemento que tenga un Id 301, peroúnicamente si el valor de Price es mayor que 150. Solo se devuelven los siguientes atributos delelemento: Id, Title y todos los atributos de ThreeStar en ProductReviews.

62

Page 67: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();var request = new QueryRequest{ TableName = "ProductCatalog", KeyConditions = new Dictionary<string,Condition> { { "Id", new Condition() { ComparisonOperator = ComparisonOperator.EQ, AttributeValueList = new List<AttributeValue> { new AttributeValue { N = "301" } } } } }, ProjectionExpression = "Id, Title, #pr.ThreeStar", ExpressionAttributeNames = new Dictionary<string, string> { { "#pr", "ProductReviews" }, { "#p", "Price" } }, ExpressionAttributeValues = new Dictionary<string,AttributeValue> { { ":val", new AttributeValue { N = "150" } } }, FilterExpression = "#p > :val"};var response = client.Query(request);

foreach (var item in response.Items){ // Write out the first page of an item's attribute keys and values. // PrintItem() is a custom function. PrintItem(item); Console.WriteLine("=====");}

En el ejemplo anterior, la propiedad ProjectionExpression especifica los atributos que se debendevolver. La propiedad ExpressionAttributeNames especifica el marcador de posición #pr paraque represente el atributo ProductReviews y el marcador de posición #p para que represente elatributo Price. #pr.ThreeStar especifica que solo se devuelva el atributo ThreeStar. La propiedadExpressionAttributeValues especifica el marcador de posición :val para que represente el valor150. La propiedad FilterExpression especifica que #p (Price) debe ser mayor que :val (150). Lallamada a PrintItem hace referencia a la función personalizada, tal como se describe en Imprimir unelemento (p. 64).

Obtener varios elementos utilizando expresiones y otros atributosdel elementoEn el siguiente ejemplo se muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.Scany un conjunto de expresiones para obtener y luego imprimir todos los elementos que tengan un elementoProductCategory Bike. Solo se devuelven los siguientes atributos del elemento: Id, Title y todos losatributos de ProductReviews.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

63

Page 68: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

var client = new AmazonDynamoDBClient();var request = new ScanRequest{ TableName = "ProductCatalog", ProjectionExpression = "Id, Title, #pr", ExpressionAttributeValues = new Dictionary<string,AttributeValue> { { ":catg", new AttributeValue { S = "Bike" } } }, ExpressionAttributeNames = new Dictionary<string, string> { { "#pr", "ProductReviews" }, { "#pc", "ProductCategory" } }, FilterExpression = "#pc = :catg", };var response = client.Scan(request);

foreach (var item in response.Items){ // Write out the first page/scan of an item's attribute keys and values. // PrintItem() is a custom function. PrintItem(item); Console.WriteLine("=====");}

En el ejemplo anterior, la propiedad ProjectionExpression especifica los atributos que se debendevolver. La propiedad ExpressionAttributeNames especifica el marcador de posición #pr paraque represente el atributo ProductReviews y el marcador de posición #pc para que represente elatributo ProductCategory. La propiedad ExpressionAttributeValues especifica el marcador deposición :catg para que represente el valor Bike. La propiedad FilterExpression especifica que #pc(ProductCategory) debe ser igual que :catg (Bike). La llamada a PrintItem hace referencia a lafunción personalizada, tal como se describe en Imprimir un elemento (p. 64).

Imprimir un elementoEl siguiente ejemplo muestra cómo imprimir los atributos y valores de un elemento. Este ejemplo se utilizaen los ejemplos precedentes que muestran cómo Obtener un elemento individual utilizando expresionesy la clave principal del elemento (p. 62), Obtener varios elementos utilizando expresiones y la claveprincipal de la tabla (p. 62) y Obtener varios elementos utilizando expresiones y otros atributos delelemento (p. 63).

// using Amazon.DynamoDBv2.Model;

// Writes out an item's attribute keys and values.public static void PrintItem(Dictionary<string, AttributeValue> attrs){ foreach (KeyValuePair<string, AttributeValue> kvp in attrs) { Console.Write(kvp.Key + " = "); PrintValue(kvp.Value); }}

// Writes out just an attribute's value.public static void PrintValue(AttributeValue value){ // Binary attribute value. if (value.B != null) { Console.Write("Binary data"); }

64

Page 69: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

// Binary set attribute value. else if (value.BS.Count > 0) { foreach (var bValue in value.BS) { Console.Write("\n Binary data"); } } // List attribute value. else if (value.L.Count > 0) { foreach (AttributeValue attr in value.L) { PrintValue(attr); } } // Map attribute value. else if (value.M.Count > 0) { Console.Write("\n"); PrintItem(value.M); } // Number attribute value. else if (value.N != null) { Console.Write(value.N); } // Number set attribute value. else if (value.NS.Count > 0) { Console.Write("{0}", string.Join("\n", value.NS.ToArray())); } // Null attribute value. else if (value.NULL) { Console.Write("Null"); } // String attribute value. else if (value.S != null) { Console.Write(value.S); } // String set attribute value. else if (value.SS.Count > 0) { Console.Write("{0}", string.Join("\n", value.SS.ToArray())); } // Otherwise, boolean value. else { Console.Write(value.BOOL); } Console.Write("\n");}

En el ejemplo anterior, cada valor de atributo tiene varias propiedades específicas del tipo de datos quepueden evaluarse para determinar el formato correcto de impresión del atributo. Estas propiedadesincluyen B, BOOL, BS, L, M, N, NS, NULL, S y SS, que corresponden a aquellas propiedades con el formatode datos JSON. Para propiedades como B, N, NULL y S, si la propiedad correspondiente no es null,entonces el atributo será del tipo de datos no null correspondiente. Para propiedades como BS, L, M,NS y SS, si Count es mayor que cero, entonces el atributo será del tipo de datos de valor no igual a cerocorrespondiente. Si todas las propiedades específicas del tipo de datos del atributo son null o Count esigual a cero, entonces el atributo será del tipo de datos BOOL.

65

Page 70: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

Crear o reemplazar un elemento utilizando expresionesEn el siguiente ejemplo se muestra el métodoAmazon.DynamoDBv2.AmazonDynamoDBClient.PutItem y un conjunto de expresiones paraactualizar el elemento que tenga un Title 18-Bicycle 301. Si el elemento no existe todavía, se añadeuno nuevo.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();var request = new PutItemRequest{ TableName = "ProductCatalog", ExpressionAttributeNames = new Dictionary<string, string> { { "#title", "Title" } }, ExpressionAttributeValues = new Dictionary<string, AttributeValue> { { ":product", new AttributeValue { S = "18-Bicycle 301" } } }, ConditionExpression = "#title = :product", // CreateItemData() is a custom function. Item = CreateItemData()};client.PutItem(request);

En el ejemplo anterior, la propiedad ExpressionAttributeNames especifica el marcador de posición#title para que represente el atributo Title. La propiedad ExpressionAttributeValues especificael marcador de posición :product para que represente el valor 18-Bicycle 301. La propiedadConditionExpression especifica que #title (Title) debe ser igual que :product (18-Bicycle301). La llamada a CreateItemData hace referencia a la siguiente función personalizada:

// using Amazon.DynamoDBv2.Model;

// Provides a sample item that can be added to a table.public static Dictionary<string, AttributeValue> CreateItemData(){ var itemData = new Dictionary<string, AttributeValue> { { "Id", new AttributeValue { N = "301" } }, { "Title", new AttributeValue { S = "18\" Girl's Bike" } }, { "BicycleType", new AttributeValue { S = "Road" } }, { "Brand" , new AttributeValue { S = "Brand-Company C" } }, { "Color", new AttributeValue { SS = new List<string>{ "Blue", "Silver" } } }, { "Description", new AttributeValue { S = "301 description" } }, { "Gender", new AttributeValue { S = "F" } }, { "InStock", new AttributeValue { BOOL = true } }, { "Pictures", new AttributeValue { L = new List<AttributeValue>{ { new AttributeValue { M = new Dictionary<string,AttributeValue>{ { "FrontView", new AttributeValue { S = "http://example/products/301_front.jpg" } } } } }, { new AttributeValue { M = new Dictionary<string,AttributeValue>{ { "RearView", new AttributeValue {S = "http://example/products/301_rear.jpg" } } } } }, { new AttributeValue { M = new Dictionary<string,AttributeValue>{ { "SideView", new AttributeValue { S = "http://example/products/301_left_side.jpg" } } } } } } } }, { "Price", new AttributeValue { N = "185" } }, { "ProductCategory", new AttributeValue { S = "Bike" } },

66

Page 71: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de expresiones con Amazon

DynamoDB y el AWS SDK for .NET

{ "ProductReviews", new AttributeValue { M = new Dictionary<string,AttributeValue>{ { "FiveStar", new AttributeValue { SS = new List<string>{ "My daughter really enjoyed this bike!" } } }, { "OneStar", new AttributeValue { SS = new List<string>{ "Fun to ride.", "This bike was okay, but I would have preferred it in my color." } } } } } }, { "QuantityOnHand", new AttributeValue { N = "3" } }, { "RelatedItems", new AttributeValue { NS = new List<string>{ "979", "822", "801" } } } };

return itemData;}

En el ejemplo anterior, se devuelve un elemento de ejemplo con datos de muestra al intermediario. Se creauna serie de atributos y valores correspondientes utilizando tipos de datos como BOOL, L, M, N, NS, S y SS,que equivalen a los del formato de datos JSON.

Actualizar un elemento utilizando expresionesEl siguiente ejemplo muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateItemy un conjunto de expresiones para cambiar el Title a 18" Girl's Bike para el elemento con un Id301.

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();var request = new UpdateItemRequest{ TableName = "ProductCatalog", Key = new Dictionary<string,AttributeValue> { { "Id", new AttributeValue { N = "301" } } }, ExpressionAttributeNames = new Dictionary<string, string> { { "#title", "Title" } }, ExpressionAttributeValues = new Dictionary<string, AttributeValue> { { ":newproduct", new AttributeValue { S = "18\" Girl's Bike" } } }, UpdateExpression = "SET #title = :newproduct"};client.UpdateItem(request);

En el ejemplo anterior, la propiedad ExpressionAttributeNames especifica el marcador de posición#title para que represente el atributo Title. La propiedad ExpressionAttributeValues especificael marcador de posición :newproduct para que represente el valor 18" Girl's Bike. La propiedadUpdateExpression especifica que se cambie #title (Title) por :newproduct (18" Girl'sBike).

Eliminar un elemento utilizando expresionesEl siguiente ejemplo muestra el método Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteItemy un conjunto de expresiones para eliminar el elemento con un Id 301 pero solo si el Title del elementoes 18-Bicycle 301.

// using Amazon.DynamoDBv2;

67

Page 72: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideCompatibilidad de JSON en Amazon

DynamoDB con el AWS SDK for .NET

// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();var request = new DeleteItemRequest{ TableName = "ProductCatalog", Key = new Dictionary<string,AttributeValue> { { "Id", new AttributeValue { N = "301" } } }, ExpressionAttributeNames = new Dictionary<string, string> { { "#title", "Title" } }, ExpressionAttributeValues = new Dictionary<string, AttributeValue> { { ":product", new AttributeValue { S = "18-Bicycle 301" } } }, ConditionExpression = "#title = :product"};client.DeleteItem(request);

En el ejemplo anterior, la propiedad ExpressionAttributeNames especifica el marcador de posición#title para que represente el atributo Title. La propiedad ExpressionAttributeValues especificael marcador de posición :product para que represente el valor 18-Bicycle 301. La propiedadConditionExpression especifica que #title (Title) debe ser igual que :product (18-Bicycle301).

Más informaciónPara obtener más información y ejemplos de código, consulte:

• Serie DynamoDB: expresiones• Acceso a atributos de elemento con expresiones de proyección• Uso de marcadores de posición para nombres y valores de atributo• Especificación de condiciones con expresiones de condición• Modificación de elementos y atributos con expresiones de actualización• Uso de elementos mediante la API de bajo nivel del AWS SDK para .NET• Consulta de tablas mediante la API de bajo nivel del AWS SDK para .NET• Examen de tablas mediante la API de bajo nivel del AWS SDK para .NET• Uso de índices secundarios locales mediante la API de bajo nivel del AWS SDK para .NET• Uso de índices secundarios globales mediante la API de bajo nivel del AWS SDK para .NET

Compatibilidad de JSON en Amazon DynamoDB conel AWS SDK for .NETEl AWS SDK for .NET admite datos JSON al trabajar con Amazon DynamoDB. Esto le permite obtenerdatos con formato JSON de forma más sencilla a partir de tablas de DynamoDB e insertar documentosJSON en estas.

Temas• Obtener datos de una tabla de DynamoDB en formato JSON (p. 69)• Inserción de datos con formato JSON en una tabla de DynamoDB (p. 69)• Conversiones de los tipos de datos de DynamoDB en JSON (p. 70)

68

Page 73: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideCompatibilidad de JSON en Amazon

DynamoDB con el AWS SDK for .NET

• Más información (p. 70)

Obtener datos de una tabla de DynamoDB en formato JSONEn el siguiente ejemplo se muestra cómo obtener datos a partir de una tabla de DynamoDB en formatoJSON:

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DocumentModel;

var client = new AmazonDynamoDBClient();var table = Table.LoadTable(client, "AnimalsInventory");var item = table.GetItem(3, "Horse");

var jsonText = item.ToJson();Console.Write(jsonText); // Output:// {"Name":"Shadow","Type":"Horse","Id":3}

var jsonPrettyText = item.ToJsonPretty();Console.WriteLine(jsonPrettyText); // Output:// {// "Name" : "Shadow",// "Type" : "Horse",// "Id" : 3// }

En el ejemplo anterior, el método ToJson de la clase Document convierte un elemento de la tabla enuna cadena con formato JSON. El elemento se recupera a través del método GetItem de la claseTable. Para determinar el elemento que se desea obtener, en este ejemplo, el método GetItemusa la clave primaria hash y de rango del elemento de destino. Para determinar la tabla de la que sedesea obtener el elemento, el método LoadTable de la clase Table usa una instancia de la claseAmazonDynamoDBClient y el nombre de la tabla de destino en DynamoDB.

Inserción de datos con formato JSON en una tabla deDynamoDBEn el siguiente ejemplo se muestra cómo usar formato JSON para insertar un elemento en una tabla deDynamoDB:

// using Amazon.DynamoDBv2;// using Amazon.DynamoDBv2.DocumentModel;

var client = new AmazonDynamoDBClient();var table = Table.LoadTable(client, "AnimalsInventory");var jsonText = "{\"Id\":6,\"Type\":\"Bird\",\"Name\":\"Tweety\"}";var item = Document.FromJson(jsonText);

table.PutItem(item);

En el ejemplo anterior, el método FromJson de la clase Document convierte una cadena con formatoJSON en un elemento. El elemento se inserta en la tabla a través del método PutItem de la clase Table,que usa la instancia de la clase Document que contiene el elemento. Para determinar la tabla en la que seinsertará el elemento, se llama al método LoadTable de la clase Table, especificando una instancia de laclase AmazonDynamoDBClient y el nombre de la tabla de destino en DynamoDB.

69

Page 74: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración del estado de la sesiónde ASP.NET con Amazon DynamoDB

Conversiones de los tipos de datos de DynamoDB en JSONSiempre que llame al método ToJson de la clase Document y, después, en los datos JSON resultantes,llame al método FromJson para convertir de nuevo los datos JSON en una instancia de una claseDocument, algunos tipos de datos de DynamoDB no se convertirán del modo esperado. En concreto:

• Los conjuntos de DynamoDB (los tipos SS, NS y BS) se convertirán en matrices JSON.• Los conjuntos y escalares binarios de DynamoDB (los tipos B y BS) se convertirán en cadenas JSON

codificadas en base64 o listas de cadenas.

En este escenario, debe llamar al método DecodeBase64Attributes de la clase Document parareemplazar los datos JSON codificados en base64 con la representación binaria correcta. En el siguienteejemplo se reemplaza un atributo de elemento escalar binario codificado en base64 en una instancia deuna clase Document, denominada Picture, con la representación binaria correcta. En este ejemplotambién se hace lo mismo para un atributo de elemento del conjunto binario codificado en base64 en lamisma instancia de la clase Document, denominada RelatedPictures:

item.DecodeBase64Attributes("Picture", "RelatedPictures");

Más informaciónPara obtener más información y ejemplos de programación de JSON con DynamoDB con el AWS SDKfor .NET, consulte:

• Compatibilidad de JSON de DynamoDB• Actualización de Amazon DynamoDB: JSON, capa gratuita ampliada, escalado flexible y elementos más

grandes

Administración del estado de la sesión de ASP.NETcon Amazon DynamoDBA menudo, las aplicaciones de ASP.NET almacenan datos de estado en la memoria. Sin embargo, esteenfoque no escala bien. En cuanto una aplicación se extiende más allá de un solo servidor web, el estadode la sesión debe compartirse entre los servidores. Una solución habitual es configurar un servidor deestado de sesión dedicado con Microsoft SQL Server, pero este enfoque también tiene inconvenientes:debe administrar otro equipo; el servidor de estado de sesión es un punto único de error y el propioservidor de estado de sesión puede convertirse en un cuello de botella que puede afectar al desempeño.

DynamoDB, un almacén de base de datos NoSQL de Amazon Web Services (AWS), es unasolución eficaz para compartir el estado de sesión entre servidores web sin ninguno de los anterioresinconvenientes.

Note

Independientemente de la solución que elija, debe recordar que Amazon DynamoDB aplicalímites al tamaño de un elemento. Ninguno de los registros que almacene en DynamoDB puedesuperar dicho límite. Para obtener más información, consulte Límites en DynamoDB en la AmazonDynamoDB Developer Guide.

El AWS SDK for .NET incluye AWS.SessionProvider.dll, que engloba un proveedor de estado desesión de ASP.NET. También incluye la muestra AmazonDynamoDBSessionProviderSample, que explicacómo utilizar Amazon DynamoDB como proveedor de estado de sesión.

70

Page 75: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración del estado de la sesiónde ASP.NET con Amazon DynamoDB

Para obtener más información sobre el uso de estados de sesión con las aplicaciones ASP.NET, vaya a ladocumentación de MSDN.

Creación de la tabla ASP.NET_SessionStateAl arrancar, la aplicación busca una tabla de Amazon DynamoDB llamada ASP.NET_SessionState deforma predeterminada. Le recomendamos que cree esta tabla antes de ejecutar la aplicación por primeravez.

Para crear la tabla ASP.NET_SessionState

1. Seleccione Create Table. Se abrirá el asistente Create Table.2. En el cuadro de texto Table name, indique ASP.NET_SessionState.3. En el campo Primary key, especifique SessionId y luego indique el tipo String.4. Después de configurar todas las opciones, elija Create.

La tabla ASP.NET_SessionState podrá utilizarse cuando su estado pase de CREATING a ACTIVE.Note

Si decide no crear la tabla antes, el proveedor de estado de sesión creará la tabla durante suinicialización. Consulte las opciones de web.config que siguen para obtener una lista deatributos que actúan como parámetros de configuración de la tabla de estado de sesión. Si elproveedor crea la tabla, utilizará estos parámetros.

Configuración del proveedor de estado de sesiónPara configurar una aplicación ASP.NET para que utilice DynamoDB como el servidor de estado de sesión

1. Añada referencias a AWSSDK.dll y AWS.SessionProvider.dll a su proyecto de Visual StudioASP.NET. Estos ensamblados están disponibles al instalar el AWS SDK para .NET (p. 5). Tambiénpuede instalarlos mediante NuGet (p. 5).

En versiones anteriores del SDK, la funcionalidad del proveedor de estado de sesión seincluía en AWS.Extension.dll. Para mejorar el uso, la funcionalidad se ha trasladado aAWS.SessionProvider.dll. Para obtener más información, consulte la publicación en el blogAWS.Extension Renaming.

2. Edite el archivo Web.config de la aplicación. En el elemento system.web, sustituya el elementosessionState existente por el fragmento XML siguiente:

<sessionState timeout="20" mode="Custom" customProvider="DynamoDBSessionStoreProvider"> <providers> <add name="DynamoDBSessionStoreProvider" type="Amazon.SessionProvider.DynamoDBSessionStateStore" AWSProfileName="{profile_name}" Region="us-west-2" /> </providers></sessionState>

El perfil representa las credenciales de AWS que se utilizan para comunicar con DynamoDB paraalmacenar y recuperar el estado de la sesión. Si utiliza el AWS SDK for .NET y especifica un perfil en lasección appSettings del archivo Web.config de la aplicación, no será necesario especificar un perfilen la sección providers; el código de cliente .NET de AWS lo descubrirá en el tiempo de ejecución.Para obtener más información, consulte Configuring Your AWS SDK for .NET Application (p. 8).

Si el servidor web se ejecuta en una instancia Amazon EC2 configurada para utilizar roles de IAMpara instancias EC2, entonces no será necesario especificar ninguna credencial en el archivo

71

Page 76: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración del estado de la sesiónde ASP.NET con Amazon DynamoDB

Web.config. En ese caso, el cliente .NET de AWS utilizará las credenciales del rol de IAM.Para obtener más información, consulte Granting Access Using an IAM Role (p. 114) y SecurityConsiderations (p. 72).

Opciones de Web.config

Puede utilizar los siguientes atributos de configuración de la sección providers de su archivoWeb.config:

AWSAccessKey

Es el ID de clave de acceso que se debe utilizar. Se puede definir tanto en la sección providerscomo en la sección appSettings. Le recomendamos que no utilice esta configuración. En su lugar,especifique las credenciales mediante AWSProfileName para especificar un perfil.

AWSSecretKey

Es la clave secreta que se debe utilizar. Se puede definir tanto en la sección providers como en lasección appSettings. Le recomendamos que no utilice esta configuración. En su lugar, especifiquelas credenciales mediante AWSProfileName para especificar un perfil.

AWSProfileName

Es el nombre de perfil asociado a las credenciales que desea utilizar. Para obtener más información,consulte Configuring Your AWS SDK for .NET Application (p. 8).

Región

Es un atributo string obligatorio. Es la región de AWS donde se utiliza Amazon DynamoDB. Para veruna lista de las regiones de AWS, consulte Regiones y puntos de enlace: DynamoDB.

Aplicación

Es un atributo string opcional. El valor del atributo Application se utiliza para dividir los datos desesión de la tabla para poder utilizarla para más de una aplicación.

Tabla

Es un atributo string opcional. Es el nombre de la tabla que se utiliza para almacenar datos desesiones. El valor predeterminado es ASP.NET_SessionState.

ReadCapacityUnits

Es un atributo int opcional. Son las unidades de capacidad de lectura que se deben utilizar si elproveedor crea la tabla. El valor predeterminado es 10.

WriteCapacityUnits

Es un atributo int opcional. Son las unidades de capacidad de escritura que se deben utilizar si elproveedor crea la tabla. El valor predeterminado es 5.

CreateIfNotExist

Es un atributo boolean opcional. El atributo CreateIfNotExist controla si el proveedor creará latabla automáticamente en el caso de que no exista. El valor predeterminado es true. Si se marca comofalso y la tabla no existe, se lanzará una excepción.

Consideraciones de seguridadUna vez creada la tabla DynamoDB y configurada la aplicación, las sesiones se pueden utilizar como concualquier otro proveedor de sesiones.

72

Page 77: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideImplementación de aplicaciones mediante Amazon EC2

Como práctica recomendada de seguridad le aconsejamos que ejecute las aplicaciones con lascredenciales de un usuario de la guía del usuario de IAM. Puede utilizar la consola de administración deIAM o AWS Toolkit for Visual Studio para crear usuarios de IAM y definir políticas de acceso.

Los proveedores de estado de sesión deben poder llamar a las operaciones DeleteItem, DescribeTable,GetItem, PutItem y UpdateItem para la tabla que almacena los datos de sesión. El siguiente ejemplode política puede utilizarse para limitar las operaciones que puede realizar el usuario de IAM a las quenecesita el proveedor para una instancia DynamoDB que se ejecuta en us-east-1:

{ "Version" : "2012-10-17","Statement" : [ { "Sid" : "1", "Effect" : "Allow", "Action" : [ "dynamodb:DeleteItem", "dynamodb:DescribeTable", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource" : "arn:aws:dynamodb:|region_api_default|:{<YOUR-AWS-ACCOUNT-ID>}:table/ASP.NET_SessionState" } ]}

Implementación de aplicaciones mediante AmazonEC2

El AWS SDK for .NET admite Amazon EC2, que es un servicio web que proporciona capacidad decomputación redimensionable (es decir, servidores de los centros de datos de Amazon) que puede usarpara crear y alojar sus sistemas de software. El ensamblado AWSSDK.EC2 proporciona las API deAmazon EC2.

Los ejemplos de instancias Amazon EC2 están diseñados para ayudarle a empezar con Amazon EC2.

En los ejemplos de instancias de subasta de Amazon EC2 puede ver cómo usar instancias de subasta,que le permiten pujar por la capacidad de Amazon EC2 sin utilizar y ejecutar cualquier instanciaadquirida mientras su puja supere el precio de subasta actual. Amazon EC2 cambia el precio de subastaperiódicamente en función de la oferta y la demanda; los clientes cuyas pujas coincidan con él o lo superenobtendrán acceso a las instancias de subasta disponibles. Para obtener más información, consulteInstancias de subasta en la Amazon EC2 User Guide for Linux Instances e instancias de subasta en laAmazon EC2 User Guide for Windows Instances.

Temas• Ejemplos de instancias Amazon EC2 (p. 73)• Ejemplos de instancias de subasta de Amazon EC2 (p. 91)

Ejemplos de instancias Amazon EC2Puede obtener acceso a las características de Amazon EC2 con el AWS SDK for .NET. Por ejemplo,puede crear, comenzar y terminar instancias Amazon EC2.

73

Page 78: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

El código de muestra se escribe en C#, pero puede usar el AWS SDK for .NET con cualquier lenguajecompatible. Al instalar AWS Toolkit for Visual Studio, se instala un conjunto de plantillas de proyecto C#.Así pues, el modo más sencillo de comenzar con este proyecto es abrir Visual Studio y, a continuación,elegir File, New Project, AWS Sample Projects, Compute and Networking y AWS EC2 Sample.

Requisitos previos

Antes de empezar, asegúrese de haber creado una cuenta de AWS y configurado las credenciales deAWS. Para obtener más información, consulte Getting Started with the AWS SDK for .NET (p. 3).

Ejemplos

Temas• Creación de un cliente Amazon EC2 (p. 74)• Creación de un grupo de seguridad en Amazon EC2 (p. 74)• Uso de pares de claves de Amazon EC2 (p. 78)• Lanzamiento de una instancia Amazon EC2 (p. 80)• Terminación de una instancia Amazon EC2 (p. 85)• Uso de regiones y zonas de disponibilidad con Amazon EC2 (p. 86)• Uso de puntos de enlace de la VPC con Amazon EC2 (p. 87)• Uso de direcciones IP elásticas en Amazon EC2 (p. 89)

Creación de un cliente Amazon EC2Cree un cliente Amazon EC2 para administrar sus recursos EC2, como instancias y grupos de seguridad.El cliente se representa con un objeto AmazonEC2Client, el cual puede crear de la siguiente manera.

var ec2Client = new AmazonEC2Client();

Los permisos para el objeto de cliente vienen determinados por la política adjunta al perfil que haespecificado en el archivo App.config. Nosotros utilizamos la región especificada en App.config deforma predeterminada. Para utilizar otra región, transfiera el valor RegionEndpoint adecuado al constructor.Para obtener más información, consulte Regiones y puntos de enlace: EC2 en la Amazon Web ServicesGeneral Reference.

Creación de un grupo de seguridad en Amazon EC2Un grupo de seguridad en Amazon EC2 funciona como un firewall virtual que controla el tráfico de red deuna o varias instancias EC2. De forma predeterminada, Amazon EC2 asocia sus instancias con un grupode seguridad que no permite el tráfico entrante. Puede crear un grupo de seguridad que permita a susinstancias EC2 aceptar un tráfico determinado. Por ejemplo, si necesita conectarse a una instancia EC2Windows, debe configurar el grupo de seguridad para permitir el tráfico RDP. Puede crear un grupo deseguridad mediante la consola de Amazon EC2 o el AWS SDK for .NET.

Puede crear un grupo de seguridad para usarlo en EC2-Classic o en EC2-VPC. Para obtener másinformación acerca de EC2-Classic y EC2-VPC, consulte Plataformas admitidas en la Amazon EC2 UserGuide for Windows Instances.

De forma alternativa, también puede crear un grupo de seguridad mediante la consola de Amazon EC2.Para obtener más información, consulte Grupos de seguridad de Amazon EC2 en la Amazon EC2 UserGuide for Windows Instances.

Enumerar sus grupos de seguridadPuede enumerar sus grupos de seguridad y comprobar si existe un grupo de seguridad.

74

Page 79: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

Para enumerar sus grupos de seguridad

Obtenga una lista completa de sus grupos de seguridad mediante DescribeSecurityGroups sin parámetros.

En el siguiente ejemplo se muestra una lista con todos los grupos de seguridad de la región.

static void EnumerateSecurityGroups(AmazonEC2Client ec2Client){ var request = new DescribeSecurityGroupsRequest(); var response = ec2Client.DescribeSecurityGroups(request); List<SecurityGroup> mySGs = response.SecurityGroups; foreach (SecurityGroup item in mySGs) { Console.WriteLine("Security group: " + item.GroupId); Console.WriteLine("\tGroupId: " + item.GroupId); Console.WriteLine("\tGroupName: " + item.GroupName); Console.WriteLine("\tVpcId: " + item.VpcId);

Console.WriteLine(); }}

Para enumerar sus grupos de seguridad de una VPC determinada

Use DescribeSecurityGroups con un filtro.

El siguiente ejemplo solo recupera los grupos de seguridad que pertenecen a una VPC específica.

static void EnumerateVpcSecurityGroups(AmazonEC2Client ec2Client, string vpcID){ Filter vpcFilter = new Filter { Name = "vpc-id", Values = new List<string>() { vpcID } };

var request = new DescribeSecurityGroupsRequest(); request.Filters.Add(vpcFilter); var response = ec2Client.DescribeSecurityGroups(request); List<SecurityGroup> mySGs = response.SecurityGroups; foreach (SecurityGroup item in mySGs) { Console.WriteLine("Security group: " + item.GroupId); Console.WriteLine("\tGroupId: " + item.GroupId); Console.WriteLine("\tGroupName: " + item.GroupName); Console.WriteLine("\tVpcId: " + item.VpcId);

Console.WriteLine(); }}

Si intenta crear un grupo de seguridad con el nombre de un grupo de seguridad existente,CreateSecurityGroup lanzará una excepción. Para evitarlo, los siguientes ejemplos buscan un grupo deseguridad con el nombre específico y devuelven el objeto SecurityGroup adecuado, si encuentran alguno.

Para crear un grupo de seguridad para EC2-Classic

Cree e inicialice un objeto CreateSecurityGroupRequest. Asigne un nombre y una descripción a laspropiedades GroupName y Description, respectivamente.

75

Page 80: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

El método CreateSecurityGroup devuelve un objeto CreateSecurityGroupResponse. Puede obtener elidentificador del nuevo grupo de seguridad de la respuesta y, luego, utilizar DescribeSecurityGroups con elidentificador de grupo de seguridad para obtener el objeto SecurityGroup para el grupo de seguridad.

static SecurityGroup CreateEc2SecurityGroup( AmazonEC2Client ec2Client, string secGroupName){ // See if a security group with the specified name already exists Filter nameFilter = new Filter(); nameFilter.Name = "group-name"; nameFilter.Values= new List<string>() { secGroupName };

var describeRequest = new DescribeSecurityGroupsRequest(); describeRequest.Filters.Add(nameFilter); var describeResponse = ec2Client.DescribeSecurityGroups(describeRequest);

// If a match was found, return the SecurityGroup object for the security group if(describeResponse.SecurityGroups.Count > 0) { return describeResponse.SecurityGroups[0]; }

// Create the security group var createRequest = new CreateSecurityGroupRequest(); createRequest.GroupName = secGroupName; createRequest.Description = "My sample security group for EC2-Classic";

var createResponse = ec2Client.CreateSecurityGroup(createRequest);

var Groups = new List<string>() { createResponse.GroupId }; describeRequest = new DescribeSecurityGroupsRequest() { GroupIds = Groups }; describeResponse = ec2Client.DescribeSecurityGroups(describeRequest); return describeResponse.SecurityGroups[0];}

Para crear un grupo de seguridad para EC2-VPC

Cree e inicialice un objeto CreateSecurityGroupRequest. Asigne valores a las propiedades GroupName,Description y VpcId.

El método CreateSecurityGroup devuelve un objeto CreateSecurityGroupResponse. Puede obtener elidentificador del nuevo grupo de seguridad de la respuesta y, luego, utilizar DescribeSecurityGroups con elidentificador de grupo de seguridad para obtener el objeto SecurityGroup para el grupo de seguridad.

static SecurityGroup CreateVpcSecurityGroup( AmazonEC2Client ec2Client, string vpcId, string secGroupName){ // See if a security group with the specified name already exists Filter nameFilter = new Filter(); nameFilter.Name = "group-name"; nameFilter.Values = new List<string>() { secGroupName };

var describeRequest = new DescribeSecurityGroupsRequest(); describeRequest.Filters.Add(nameFilter); var describeResponse = ec2Client.DescribeSecurityGroups(describeRequest);

// If a match was found, return the SecurityGroup object for the security group if (describeResponse.SecurityGroups.Count > 0) { return describeResponse.SecurityGroups[0];

76

Page 81: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

}

// Create the security group var createRequest = new CreateSecurityGroupRequest(); createRequest.GroupName = secGroupName; createRequest.Description = "My sample security group for EC2-VPC"; createRequest.VpcId = vpcId;

var createResponse = ec2Client.CreateSecurityGroup(createRequest);

var Groups = new List<string>() { createResponse.GroupId }; describeRequest = new DescribeSecurityGroupsRequest() { GroupIds = Groups }; describeResponse = ec2Client.DescribeSecurityGroups(describeRequest); return describeResponse.SecurityGroups[0];}

Use el siguiente procedimiento para añadir una regla para permitir el tráfico entrante en el puerto TCP3389 (RDP). De este modo podrá conectarse a una instancia de Windows. En cambio, si lanza unainstancia Linux, utilice el puerto TCP 22 (SSH).

Note

Puede utilizar un servicio para obtener la dirección IP pública de su equipo local. Porejemplo, proporcionamos el siguiente servicio: http://checkip.amazonaws.com/ o https://checkip.amazonaws.com. Para buscar otro servicio que le brinde su dirección IP, utilice la frasede búsqueda "what is my IP address" (cuál es mi dirección IP). Si se conecta a través de un ISP oprotegido por su firewall sin una dirección IP estática, deberá encontrar el rango de direcciones IPutilizadas por los equipos cliente.

Los ejemplos de esta sección continúan con los ejemplos de las secciones previas. En ellos se presuponeque secGroup es un grupo de seguridad existente.

Para añadir una regla a un grupo de seguridad

1. Cree e inicialice un objeto IpPermission.

string ipRange = "1.1.1.1/1";List<string> ranges = new List<string>() { ipRange };

var ipPermission = new IpPermission();ipPermission.IpProtocol = "tcp";ipPermission.FromPort = 3389;ipPermission.ToPort = 3389;ipPermission.IpRanges = ranges;

IpProtocol

Se trata del protocolo IP.FromPort y ToPort

Es el inicio y el final del rango de puertos. En este ejemplo se especifica un solo puerto, el 3389,que se utiliza para comunicar con Windows a través de RDP.

IpRanges

Se trata de las direcciones IP o de los rangos de direcciones en notación CIDR. Por comodidad,en este ejemplo se utiliza 72.21.198.64/24, que autoriza el tráfico de red para una únicadirección IP. Puede usar http://checkip.amazonaws.com/ o https://checkip.amazonaws.com/ paradeterminar su propia dirección IP.

2. Cree e inicialice un objeto AuthorizeSecurityGroupIngressRequest.

77

Page 82: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

var ingressRequest = new AuthorizeSecurityGroupIngressRequest();ingressRequest.GroupId = secGroup.GroupId;ingressRequest.IpPermissions.Add(ipPermission);

GroupId

Es el identificador del grupo de seguridad.IpPermissions

Se trata del objeto IpPermission del paso 1.3. (Opcional) Puede añadir más reglas a la colección IpPermissions antes de continuar con el

siguiente paso.4. Transfiera el objeto AuthorizeSecurityGroupIngressRequest al método AuthorizeSecurityGroupIngress,

el cual devuelve un objeto AuthorizeSecurityGroupIngressResponse. Si ya existe una reglacoincidente, se lanza una AmazonEC2Exception.

try{ var ingressResponse = ec2Client.AuthorizeSecurityGroupIngress(ingressRequest); Console.WriteLine("New RDP rule for: " + ipRange);}catch (AmazonEC2Exception ex){ // Check the ErrorCode to see if the rule already exists if ("InvalidPermission.Duplicate" == ex.ErrorCode) { Console.WriteLine("An RDP rule for: {0} already exists.", ipRange); } else { // The exception was thrown for another reason, so re-throw the exception throw; }}

Uso de pares de claves de Amazon EC2Amazon EC2 utiliza la criptografía de clave pública para cifrar y descifrar la información de inicio desesión. En la criptografía de clave pública se utiliza una clave pública para cifrar datos y, a continuación,el destinatario utiliza la clave privada para descifrar los datos. El conjunto de clave pública y clave privadase denomina par de claves. Al conectarse a la instancia, debe especificar un par de claves al lanzaruna instancia EC2 y la clave privada del par de claves. Puede crear un par de claves o usar una quehaya utilizado al lanzar otras instancias. Para obtener más información, consulte Pares de claves deAmazon EC2 en la Amazon EC2 User Guide for Windows Instances. En este ejemplo se muestra cómocrear un par de claves, describir pares de claves y eliminar un par de claves utilizando estos métodosAmazonEC2Client:

• CreateKeyPair• DeleteKeyPair• DescribeKeyPairs

Crear un par de claves y guardar la clave privadaAl crear un par de claves nuevo, debe guardar la clave privada remitida. No podrá recuperar la claveprivada más adelante.

78

Page 83: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

Cree e inicialice un objeto CreateKeyPairRequest. Defina la propiedad KeyName con el nombre del par declaves.

Transfiera el objeto de la solicitud al método CreateKeyPair, que devuelve un objetoCreateKeyPairResponse. Si ya existe un par de claves con el nombre especificado, se lanzará unaAmazonEC2Exception.

El objeto de respuesta incluye un objeto CreateKeyPairResponse que contiene el nuevo objeto KeyPairde la clave. En el objeto KeyPair, la propiedad KeyMaterial incluye la clave privada cifrada del par declaves. Guarde la clave privada como archivo .pem en un lugar seguro. Necesitará este archivo paraconectarse a la instancia. Este ejemplo guarda la clave privada en el nombre de archivo especificado.

public static void CreateKeyPair( AmazonEC2Client ec2Client, string keyPairName, string privateKeyFile){ var request = new CreateKeyPairRequest(); request.KeyName = keyPairName;

try { var response = ec2Client.CreateKeyPair(request); Console.WriteLine(); Console.WriteLine("New key: " + keyPairName);

// Save the private key in a .pem file using (FileStream s = new FileStream(privateKeyFile, FileMode.Create)) using (StreamWriter writer = new StreamWriter(s)) { writer.WriteLine(response.KeyPair.KeyMaterial); } } catch (AmazonEC2Exception ex) { // Check the ErrorCode to see if the key already exists if("InvalidKeyPair.Duplicate" == ex.ErrorCode) { Console.WriteLine("The key pair \"{0}\" already exists.", keyPairName); } else { // The exception was thrown for another reason, so re-throw the exception. throw; } }}

.. _enumerate-key-pairs:

Enumerar sus pares de claves

Puede enumerar sus pares de claves y comprobar si existe un par de claves.

Obtenga una lista completa de sus pares de claves mediante el método DescribeKeyPairs sin parámetros.

public static void EnumerateKeyPairs(AmazonEC2Client ec2Client){ var request = new DescribeKeyPairsRequest(); var response = ec2Client.DescribeKeyPairs(request);

foreach (KeyPairInfo item in response.KeyPairs)

79

Page 84: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

{ Console.WriteLine("Existing key pair: " + item.KeyName); }}

.. _delete-key-pairs:

Eliminar pares de clavesPuede eliminar un par de claves llamando al método DeleteKeyPair desde su instancia AmazonEC2Client.

Transfiera un método DeleteKeyPairRequest que contenga el nombre del par de claves al métodoDeleteKeyPair del objeto AmazonEC2Client.

public static void DeleteKeyPair( AmazonEC2Client ec2Client, KeyPair keyPair){ try { // Delete key pair created for sample ec2Client.DeleteKeyPair(new DeleteKeyPairRequest { KeyName = keyPair.KeyName }); } catch (AmazonEC2Exception ex) { // Check the ErrorCode to see if the key already exists if ("InvalidKeyPair.NotFound" == ex.ErrorCode) { Console.WriteLine("The key pair \"{0}\" was not found.", keyPair.KeyName); } else { // The exception was thrown for another reason, so re-throw the exception throw; } }}

Lanzamiento de una instancia Amazon EC2Use el siguiente procedimiento para lanzar una o más instancias Amazon EC2 con la misma configuraciónde la misma imagen de máquina de (AMI). Después de crear las instancias EC2, puede comprobar susestados. Si las instancias EC2 se están ejecutando, puede conectarse a ellas.

Lanzar una instancia EC2 en EC2-Classic o en una VPCPuede lanzar una instancia en EC2-Classic o en una VPC. Para obtener más información acerca de EC2-Classic y EC2-VPC, consulte Plataformas admitidas en la Amazon EC2 User Guide for Windows Instances.

Para lanzar una instancia EC2 en EC2-Classic

1. Cree e inicialice un objeto RunInstancesRequest. Asegúrese de que la AMI, el par de claves y el grupode seguridad que especifique existen en la región indicada al crear el objeto de cliente.

string amiID = "ami-e189c8d1";string keyPairName = "my-sample-key";

List<string> groups = new List<string>() { mySG.GroupId };var launchRequest = new RunInstancesRequest(){ ImageId = amiID,

80

Page 85: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

InstanceType = InstanceType.T1Micro, MinCount = 1, MaxCount = 1, KeyName = keyPairName, SecurityGroupIds = groups};

ImageId

Es el ID de la AMI. Para ver una lista de las AMI públicas, consulte Imágenes de máquina deAmazon.

InstanceType

Se trata de un tipo de instancia que es compatible con la AMI especificada. Para obtener másinformación, consulte Tipos de instancia en la Amazon EC2 User Guide for Windows Instances.

MinCount

Se trata del número mínimo de instancias EC2 que se va a lanzar. Si hay más instancias de lasque puede lanzar Amazon EC2 en la zona de disponibilidad de destino, Amazon EC2 no lanzaráninguna instancia.

MaxCount

Se trata del número máximo de instancias EC2 que se va a lanzar. Si hay más instancias de lasque puede lanzar Amazon EC2 en la zona de disponibilidad de destino, Amazon EC2 lanzaráel mayor número posible de instancias por encima del MinCount. Puede lanzar entre una y elnúmero máximo de instancias permitido para el tipo de instancia. Para obtener más información,consulte ¿Cuántas instancias puedo ejecutar en Amazon EC2? en las preguntas frecuentesgenerales de Amazon EC2.KeyName

Se trata del nombre del par de claves de EC2. Si lanza una instancia sin especificar un parde claves, no podrá conectarse a ella. Para obtener más información, consulte Working withAmazon EC2 Key Pairs (p. 78).

SecurityGroupIds

Son los identificadores de uno o más grupos de seguridad. Para obtener más información,consulte Creating a Security Group in Amazon EC2 (p. 74).

2. (Opcional) Para lanzar la instancia con un rol de IAM (p. 114), especifique un perfil de instancia deIAM en el objeto RunInstancesRequest.

Un usuario de IAM no puede lanzar una instancia con un rol de IAM sin los permisos concedidos por lasiguiente política.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListInstanceProfiles", "ec2:*" ], "Resource": "*" }] }

Por ejemplo, el siguiente fragmento de código crea una instancia y configura un objetoIamInstanceProfileSpecification para un rol de IAM llamado winapp-instance-role-1.

81

Page 86: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

var instanceProfile = new IamInstanceProfile();instanceProfile.Id = "winapp-instance-role-1";

Para especificar este perfil de instancia en el objeto RunInstancesRequest, añada la siguiente línea.

launchRequest.IamInstanceProfile = instanceProfile;

3. Especifique la instancia transfiriendo el objeto de la solicitud al método RunInstancesRequest. Guardeel ID de la instancia porque lo necesitará para administrar la instancia.

Utilice el objeto RunInstancesResponse devuelto para obtener los ID para las nuevas instancias.La propiedad Reservation.Instances contiene una lista de objetos Instance, uno por cadainstancia EC2 que lance correctamente. Puede recuperar el ID para cada instancia de la propiedadInstanceId del objeto Instance.

var launchResponse = ec2Client.RunInstances(launchRequest);var instances = launchResponse.Reservation.Instances;var instanceIds = new List<string>();foreach (Instance item in instances){ instanceIds.Add(item.InstanceId); Console.WriteLine(); Console.WriteLine("New instance: " + item.InstanceId); Console.WriteLine("Instance state: " + item.State.Name);}

Para lanzar una instancia EC2 en una VPC

1. Cree e inicialice una interfaz de red elástica en una subred de la VPC.

string subnetID = "subnet-cb663da2";

List<string> groups = new List<string>() { mySG.GroupId };var eni = new InstanceNetworkInterfaceSpecification(){ DeviceIndex = 0, SubnetId = subnetID, Groups = groups, AssociatePublicIpAddress = true};List<InstanceNetworkInterfaceSpecification> enis = new List<InstanceNetworkInterfaceSpecification>() {eni};

DeviceIndex

Se trata del índice del dispositivo en la instancia para el accesorio de interfaz de red.SubnetId

Se trata del ID de la subred donde se lanzará la instancia.GroupIds

Uno o varios grupos de seguridad. Para obtener más información, consulte Creating a SecurityGroup in Amazon EC2 (p. 74).

AssociatePublicIpAddress

Indica si se va a autoasignar una dirección IP pública a una instancia en una VPC.

82

Page 87: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

2. Cree e inicialice un objeto RunInstancesRequest. Asegúrese de que la AMI, el par de claves y el grupode seguridad que especifique existen en la región indicada al crear el objeto de cliente.

string amiID = "ami-e189c8d1";string keyPairName = "my-sample-key";

var launchRequest = new RunInstancesRequest(){ ImageId = amiID, InstanceType = InstanceType.T1Micro, MinCount = 1, MaxCount = 1, KeyName = keyPairName, NetworkInterfaces = enis};

ImageId

Es el ID de la AMI. Para ver una lista de las AMI públicas proporcionadas por Amazon, consulteImágenes de máquina de Amazon.

InstanceType

Se trata de un tipo de instancia que es compatible con la AMI especificada. Para obtener másinformación, consulte Tipos de instancia en la Amazon EC2 User Guide for Windows Instances.

MinCount

Se trata del número mínimo de instancias EC2 que se va a lanzar. Si hay más instancias de lasque puede lanzar Amazon EC2 en la zona de disponibilidad de destino, Amazon EC2 no lanzaráninguna instancia.

MaxCount

Se trata del número máximo de instancias EC2 que se va a lanzar. Si hay más instancias de lasque puede lanzar Amazon EC2 en la zona de disponibilidad de destino, Amazon EC2 lanzaráel mayor número posible de instancias por encima del MinCount. Puede lanzar entre una y elnúmero máximo de instancias permitido para el tipo de instancia. Para obtener más información,consulte ¿Cuántas instancias puedo ejecutar en Amazon EC2? en las preguntas frecuentesgenerales de Amazon EC2.

KeyName

Se trata del nombre del par de claves de EC2. Si lanza una instancia sin especificar un par declaves, no podrá conectarse a ella. Para obtener más información, consulte Working with AmazonEC2 Key Pairs (p. 78).

NetworkInterfaces

Una o más instancias de red.3. (Opcional) Para lanzar la instancia con un rol de IAM (p. 114), especifique un perfil de instancia de

IAM en el objeto RunInstancesRequest.

Un usuario de IAM no puede lanzar una instancia con un rol de IAM sin los permisos concedidos por lasiguiente política.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListInstanceProfiles",

83

Page 88: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

"ec2:*" ], "Resource": "*" }]}

Por ejemplo, el siguiente fragmento de código crea una instancia y configura un objetoIamInstanceProfileSpecification para un rol de IAM llamado winapp-instance-role-1.

var instanceProfile = new IamInstanceProfileSpecification();instanceProfile.Name = "winapp-instance-role-1";

Para especificar este perfil de instancia en el objeto RunInstancesRequest, añada la siguiente línea.

launchRequest.IamInstanceProfile = instanceProfile;

4. Lance las instancias pasando el objeto solicitado al método RunInstances. Guarde los ID de lasinstancias porque los necesitará para administrar las instancias.

Utilice el objeto RunInstancesResponse devuelto para obtener una lista de los ID para las nuevasinstancias. La propiedad Reservation.Instances contiene una lista de objetos Instance, unopor cada instancia EC2 que lance correctamente. Puede recuperar el ID para cada instancia de lapropiedad InstanceId del objeto Instance.

RunInstancesResponse launchResponse = ec2Client.RunInstances(launchRequest);

List<String> instanceIds = new List<string>();foreach (Instance instance in launchResponse.Reservation.Instances){ Console.WriteLine(instance.InstanceId); instanceIds.Add(instance.InstanceId);}

Comprobar el estado de su instancia

Utilice el siguiente procedimiento para obtener el estado actual de su instancia. Al principio, la instanciatiene el estado pending. Cuando pase a tener el estado running podrá conectarse a la instancia.

1. Cree y configure un objeto DescribeInstancesRequest y asigne el ID de su instancia a la propiedadInstanceIds. También puede utilizar la propiedad Filter para limitar la solicitud a determinadasinstancias, como las instancias con una etiqueta específica de usuario determinada.

var instanceRequest = new DescribeInstancesRequest();instanceRequest.InstanceIds = new List<string>();instanceRequest.InstanceIds.Add(instanceId);

2. Llame al método DescribeInstances y transfiérale el objeto de la solicitud del paso 1. El métododevuelve un objeto DescribeInstancesResponse que incluye información sobre la instancia.

var response = ec2Client.DescribeInstances(instanceRequest);

3. La propiedad DescribeInstancesResponse.Reservations contiene una lista de reservas. En estecaso, solo hay una reserva. Cada reserva contiene una lista de objetos Instance. De nuevo, en estecaso, solo hay una instancia. Puede obtener el estado de la instancia de la propiedad State.

Console.WriteLine(response.Reservations[0].Instances[0].State.Name);

84

Page 89: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

Conectarse a la instancia que se está ejecutandoEn cuanto se esté ejecutando una instancia, podrá conectarse remotamente a ella utilizando el clienteremoto adecuado.

Para las instancias Linux, utilice el cliente SSH. Debe asegurarse de que el puerto SSH (22) de la instanciaesté abierto al tráfico. Necesitará la dirección IP pública o el nombre DNS público de la instancia y la parteprivada del par de claves que utilizó para lanzar la instancia. Para obtener más información, consulteConexión con la instancia de Linux en la Amazon EC2 User Guide for Linux Instances.

Para las instancias Windows, utilice el cliente RDP. Debe asegurarse de que el puerto RDP (3389)de la instancia esté abierto al tráfico. Necesitará la dirección IP pública o el nombre DNS público de lainstancia y la contraseña de administrador. La contraseña de administrador se obtiene con los métodosGetPasswordData y GetPasswordDataResult.GetDecryptedPassword, que requieren la parte privada delpar de claves que se utilizó para lanzar la instancia. Para obtener más información, consulte :ec2-ug-win:<problematic>`</problematic>Connecting to Your Windows Instance Using RDP <connecting_to_windows_instance> en la Amazon EC2User Guide for Windows Instances. El siguiente ejemplo muestra cómo obtener la contraseña para unainstancia Windows.

public static string GetWindowsPassword( AmazonEC2Client ec2Client, string instanceId, FileInfo privateKeyFile){ string password = "";

var request = new GetPasswordDataRequest(); request.InstanceId = instanceId;

var response = ec2Client.GetPasswordData(request); if (null != response.PasswordData) { using (StreamReader sr = new StreamReader(privateKeyFile.FullName)) { string privateKeyData = sr.ReadToEnd(); password = response.GetDecryptedPassword(privateKeyData); } } else { Console.WriteLine("The password is not available. The password for " + "instance {0} is either not ready, or it is not a Windows instance.", instanceId); }

return password;}

Si ya no necesita la instancia EC2, consulte Terminating an Amazon EC2 Instance (p. 85).

Terminación de una instancia Amazon EC2Cuando ya no necesite una o más de sus instancias Amazon EC2, podrá terminarlas.

Para terminar una instancia EC2

public static void TerminateInstance( AmazonEC2Client ec2Client, string instanceId){

85

Page 90: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

var request = new TerminateInstancesRequest(); request.InstanceIds = new List<string>() { instanceId };

try { var response = ec2Client.TerminateInstances(request); foreach (InstanceStateChange item in response.TerminatingInstances) { Console.WriteLine("Terminated instance: " + item.InstanceId); Console.WriteLine("Instance state: " + item.CurrentState.Name); } } catch(AmazonEC2Exception ex) { // Check the ErrorCode to see if the instance does not exist. if ("InvalidInstanceID.NotFound" == ex.ErrorCode) { Console.WriteLine("Instance {0} does not exist.", instanceId); } else { // The exception was thrown for another reason, so re-throw the exception. throw; } }}

1. Cree e inicialice un objeto TerminateInstancesRequest.2. Establezca la propiedad TerminateInstancesRequest.InstanceIds en una lista de uno o más

ID de instancia para que las instancias terminen.3. Pase el objeto de solicitud al método TerminateInstances. Si la instancia especificada no existe, se

lanza AmazonEC2Exception.4. Puede usar el objeto TerminateInstancesResponse para listar las instancias terminadas, de la

siguiente manera.

Uso de regiones y zonas de disponibilidad con Amazon EC2En este ejemplo de .NET puede ver cómo:

• Obtener información acerca de las zonas de disponibilidad• Obtener información acerca de las regiones

El escenario

Amazon EC2 se hospeda en varias ubicaciones de todo el mundo. Dichas ubicaciones se componen deregiones y zonas de disponibilidad. Cada región es un área geográfica distinta y tiene varias ubicacionesaisladas, denominadas "zonas de disponibilidad". Amazon EC2 ofrece la posibilidad de colocar instancias ydatos en varias ubicaciones.

Puede utilizar el AWS SDK for .NET para recuperar información sobre regiones y zonas de disponibilidadutilizando los siguientes métodos de la clase AmazonEC2Client:

• DescribeAvailabilityZones• DescribeRegions

Para obtener más información sobre regiones y zonas de disponibilidad, consulte Regiones y zonas dedisponibilidad en la Amazon EC2 User Guide for Windows Instances.

86

Page 91: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

Describir zonas de disponibilidad

Cree una instancia AmazonEC2Client y llame al método DescribeAvailabilityZones. El objetoDescribeAvailabilityZonesResponse que se devuelve contiene una lista de las zonas de disponibilidad.

public static void DescribeAvailabilityZones(){ Console.WriteLine("Describe Availability Zones"); AmazonEC2Client client = new AmazonEC2Client(); DescribeAvailabilityZonesResponse response = client.DescribeAvailabilityZones(); var availZones = new List<AvailabilityZone>(); availZones = response.AvailabilityZones; foreach (AvailabilityZone az in availZones) { Console.WriteLine(az.ZoneName); }}

Describir regiones

Cree una instancia AmazonEC2Client y llame al método DescribeRegions. El objetoDescribeRegionsResponse que se devuelve contiene una lista de las regiones.

public static void DescribeRegions(){ Console.WriteLine("Describe Regions"); AmazonEC2Client client = new AmazonEC2Client(); DescribeRegionsResponse response = client.DescribeRegions(); var regions = new List<Region>(); regions = response.Regions; foreach (Region region in regions) { Console.WriteLine(region.RegionName); }}

Uso de puntos de enlace de la VPC con Amazon EC2Este ejemplo de .NET muestra cómo crear, describir, modificar y eliminar puntos de enlace de la VPC.

El escenario

Un punto de enlace permite crear una conexión privada entre la VPC y otros servicios de AWS en sucuenta. Puede especificar que se adjunte una política al punto de enlace que controle el acceso al serviciodesde su VPC. También puede especificar tablas de ruteo de la VPC que utilizan el punto de enlace.

El siguiente ejemplo utiliza los métodos AmazonEC2Client:

• CreateVpcEndpoint• DescribeVpcEndpoints• ModifyVpcEndpoint• DeleteVpcEndpoints

Crear un punto de enlace de la VPC

En el siguiente ejemplo se crea un punto de enlace de la VPC para un Amazon Simple Storage Service(S3).

87

Page 92: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

Cree una instancia AmazonEC2Client. Creará una VPC nueva para poder crear un punto de enlace de laVPC.

Cree un objeto CreateVpcRequest mediante la especificación de un bloque de CIDR de IPv4 como elparámetro de su constructor. Si utiliza dicho objeto CreateVpcRequest, use el método CreateVpc paracrear una VPC. Use dicha VPC para crear una instancia de un objeto CreateVpcEndpointRequest yespecificar el nombre de servicio para el punto de enlace. A continuación, utilice el objeto de la solicitudpara llamar al método CreateVpcEndpoint y crear el VpcEndpoint.

public static void CreateVPCEndpoint(){ AmazonEC2Client client = new AmazonEC2Client(); CreateVpcRequest vpcRequest = new CreateVpcRequest("10.32.0.0/16"); CreateVpcResponse vpcResponse = client.CreateVpc(vpcRequest); Vpc vpc = vpcResponse.Vpc; CreateVpcEndpointRequest endpointRequest = new CreateVpcEndpointRequest(); endpointRequest.VpcId = vpc.VpcId; endpointRequest.ServiceName = "com.amazonaws.us-west-2.s3"; CreateVpcEndpointResponse cVpcErsp = client.CreateVpcEndpoint(endpointRequest); VpcEndpoint vpcEndPoint = cVpcErsp.VpcEndpoint;}

Describir un punto de enlace de la VPC

Cree una instancia AmazonEC2Client. A continuación, cree un objeto DescribeVpcEndpointsRequest ylimite el número máximo de resultados a 5. Utilice dicho objeto DescribeVpcEndpointsRequest parallamar al método DescribeVpcEndpoints. El DescribeVpcEndpointsResponse devuelto contiene la lista depuntos de enlace de la VPC.

public static void DescribeVPCEndPoints(){ AmazonEC2Client client = new AmazonEC2Client(); DescribeVpcEndpointsRequest endpointRequest = new DescribeVpcEndpointsRequest(); endpointRequest.MaxResults = 5; DescribeVpcEndpointsResponse endpointResponse = client.DescribeVpcEndpoints(endpointRequest); List<VpcEndpoint> endpointList = endpointResponse.VpcEndpoints; foreach (VpcEndpoint vpc in endpointList) { Console.WriteLine("VpcEndpoint ID = " + vpc.VpcEndpointId); List<string> routeTableIds = vpc.RouteTableIds; foreach (string id in routeTableIds) { Console.WriteLine("\tRoute Table ID = " + id); }

}}

Modificar un punto de enlace de la VPC

El siguiente ejemplo modifica los atributos de un punto de enlace de la VPC específico. Puede modificarla política asociada con el punto de enlace y añadir y eliminar tablas de ruteo asociadas con el punto deenlace.

Cree una instancia AmazonEC2Client. Cree un objeto ModifyVpcEndpointRequest utilizandoel ID del punto de enlace de la VPC y el ID de la tabla de ruteo que va a añadirle. Llame almétodo ModifyVpcEndpoint mediante el objeto ModifyVpcEndpointRequest. El objetoModifyVpcEndpointResponse devuelto contiene un código de estado HTTP que indica si la solicitud demodificación se ha realizado con éxito.

88

Page 93: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

public static void ModifyVPCEndPoint(){ AmazonEC2Client client = new AmazonEC2Client(); ModifyVpcEndpointRequest modifyRequest = new ModifyVpcEndpointRequest(); modifyRequest.VpcEndpointId = "vpce-17b05a7e"; modifyRequest.AddRouteTableIds = new List<string> { "rtb-c46f15a3" }; ModifyVpcEndpointResponse modifyResponse = client.ModifyVpcEndpoint(modifyRequest); HttpStatusCode status = modifyResponse.HttpStatusCode; if (status.ToString() == "OK") Console.WriteLine("ModifyHostsRequest succeeded"); else Console.WriteLine("ModifyHostsRequest failed");

Eliminar un punto de enlace de la VPC

Puede eliminar uno o más puntos de enlace de la VPC específicos. Al eliminar el punto de enlace tambiénse eliminan las rutas de los puntos de enlace a las tablas de ruteo asociadas con dicho punto de enlace.

Cree una instancia AmazonEC2Client. Use el método DescribeVpcEndpoints para elaborar una listade los puntos de enlace a la VPC asociados al cliente EC2. Utilice la lista de puntos de enlace de laVPC para crear una lista de los ID del punto de enlace de la VPC. Utilice dicha lista para crear un objetoDeleteVpcEndpointsRequest que deberá utilizar el método DeleteVpcEndpoints.

private static void DeleteVPCEndPoint(){ AmazonEC2Client client = new AmazonEC2Client(); DescribeVpcEndpointsRequest endpointRequest = new DescribeVpcEndpointsRequest(); endpointRequest.MaxResults = 5; DescribeVpcEndpointsResponse endpointResponse = client.DescribeVpcEndpoints(endpointRequest); List<VpcEndpoint> endpointList = endpointResponse.VpcEndpoints; var vpcEndPointListIds = new List<string>(); foreach (VpcEndpoint vpc in endpointList) { Console.WriteLine("VpcEndpoint ID = " + vpc.VpcEndpointId); vpcEndPointListIds.Add(vpc.VpcEndpointId); } DeleteVpcEndpointsRequest deleteRequest = new DeleteVpcEndpointsRequest(); deleteRequest.VpcEndpointIds = vpcEndPointListIds; client.DeleteVpcEndpoints(deleteRequest);}

Uso de direcciones IP elásticas en Amazon EC2En este ejemplo de .NET puede ver cómo:

• Recuperar descripciones de sus direcciones IP elásticas• Asignar y asociar una dirección IP elástica con una instancia Amazon EC2• Liberación de una dirección IP elástica

El escenario

Una dirección IP elástica es una dirección IP estática diseñada para la informática en la nube dinámica.Una dirección IP elástica se asocia a su cuenta de AWS y es una dirección IP pública a la que se puedeobtener acceso desde Internet.

Si la instancia Amazon EC2 no tiene una dirección IP pública, puede asociar una dirección IP elástica a lainstancia para permitir la comunicación con Internet.

89

Page 94: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias Amazon EC2

En este ejemplo, usa el AWS SDK for .NET para administrar direcciones IP elásticas mediante estosmétodos de la clase de cliente de Amazon EC2:

• DescribeAddresses• AllocateAddress• AssociateAddress• ReleaseAddress

Para obtener información acerca de las direcciones IP elásticas en Amazon EC2, consulte Elastic IPAddresses (Direcciones IP elásticas) en Amazon EC2 User Guide for Windows Instances.

Describir direcciones IP elásticasCree un objeto AmazonEC2Client. A continuación, cree un objeto DescribeAddressesRequest para pasarlocomo parámetro, filtrando las direcciones devueltas por los de la VPC. Para recuperar las descripcionesde todas las direcciones IP elásticas, omita el filtro en los parámetros. A continuación, llame al métodoDescribeAddresses del objeto AmazonEC2Client.

public void DescribeElasticIps(){ using (var client = new AmazonEC2Client(RegionEndpoint.USWest2)) { var addresses = client.DescribeAddresses(new DescribeAddressesRequest { Filters = new List<Filter> { new Filter { Name = "domain", Values = new List<string> { "vpc" } } } }).Addresses;

foreach(var address in addresses) { Console.WriteLine(address.PublicIp); Console.WriteLine("\tAllocation Id: " + address.AllocationId); Console.WriteLine("\tPrivate IP Address: " + address.PrivateIpAddress); Console.WriteLine("\tAssociation Id: " + address.AssociationId); Console.WriteLine("\tInstance Id: " + address.InstanceId); Console.WriteLine("\tNetwork Interface Owner Id: " + address.NetworkInterfaceOwnerId); } }}

Asignar y asociar una dirección IP elásticaCree un objeto AmazonEC2Client. A continuación, cree un objeto AllocateAddressRequest para elparámetro usado para asignar una dirección IP elástica, que en este caso especifica que el dominio es unaVPC. Llame al método AllocateAddress del objeto AmazonEC2Client.

En caso de éxito, el objeto AllocateAddressResponse devuelto tiene una propiedad AllocationId queidentifica la dirección IP elástica asignada.

Cree un objeto AssociateAddressRequest para los parámetros usados para asociar una dirección IPelástica a una instancia Amazon EC2. Incluya el AllocationId de la dirección recién asignada y elInstanceId de la instancia Amazon EC2. A continuación, llame al método AssociateAddress del objetoAmazonEC2Client.

90

Page 95: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias de subasta de Amazon EC2

public void AllocateAndAssociate(string instanceId){ using (var client = new AmazonEC2Client(RegionEndpoint.USWest2)) { var allocationId = client.AllocateAddress(new AllocateAddressRequest { Domain = DomainType.Vpc }).AllocationId;

Console.WriteLine("Allocation Id: " + allocationId);

var associationId = client.AssociateAddress(new AssociateAddressRequest { AllocationId = allocationId, InstanceId = instanceId }).AssociationId;

Console.WriteLine("Association Id: " + associationId); }}

Liberación de una dirección IP elástica

Cree un objeto AmazonEC2Client. A continuación, cree un objeto ReleaseAddressRequest para losparámetros usados para liberar una dirección IP elástica, que en este caso especifica el AllocationIdde la dirección IP elástica. La liberación de una dirección IP elástica también la desvincula de cualquierinstancia Amazon EC2. Llame al método ReleaseAddress del objeto de servicio de Amazon EC2.

public void Release(string allocationId){ using (var client = new AmazonEC2Client(RegionEndpoint.USWest2)) { client.ReleaseAddress(new ReleaseAddressRequest { AllocationId = allocationId }); }}

Ejemplos de instancias de subasta de Amazon EC2En este tema se describe cómo usar el AWS SDK for .NET con las instancias de subasta de Amazon EC2.

Temas• Información general (p. 91)• Requisitos previos (p. 92)• Configuración de las credenciales (p. 92)• Envío de la solicitud de subasta (p. 93)• Determinación del estado de la solicitud de subasta (p. 94)• Limpieza de las instancias y solicitudes de subasta (p. 95)

Información generalLas instancias de subasta le permiten pujar por la capacidad de Amazon EC2 sin utilizar y ejecutarcualquier instancia que adquiera mientras su puja supere el precio de subasta actual. Amazon EC2

91

Page 96: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias de subasta de Amazon EC2

cambia el precio de subasta periódicamente en función de la oferta y la demanda; los clientes cuyas pujascoincidan con él o lo superen obtendrán acceso a las instancias de subasta disponibles. Igual que lasinstancias bajo demanda y las instancias reservadas, las instancias de subasta proporcionan otra opciónpara obtener una mayor capacidad de cómputo.

Las instancias de subasta pueden reducir de forma significativa los costos de Amazon EC2 de aplicacionescomo el procesamiento por lotes, la investigación científica, el procesamiento de imágenes, la codificaciónde vídeo, el rastreo web y de datos, el análisis financiero y la realización de pruebas. Además, lasinstancias de subasta son una opción excelente cuando necesita grandes cantidades de capacidad decomputación, pero la necesidad de esa capacidad no es urgente.

Para usar instancias de subasta, coloque una solicitud de instancia de subasta que especifique el preciomáximo que está dispuesto a pagar por hora de instancia; esta es su puja. Si el importe de su puja esmayor que el precio de subasta actual, se atenderá su solicitud y sus instancias se ejecutarán hastaque decida terminarlas o hasta que el precio de subasta sea mayor que su puja (lo que suceda antes).Puede terminar una instancia de subasta mediante programación, como se muestra en este tutorial, o bienmediante el uso de la consola de administración de AWS o de AWS Toolkit for Visual Studio.

Es importante tener en cuenta dos puntos:

1. Con frecuencia pagará por hora un importe inferior al de su puja. Amazon EC2 ajusta el precio desubasta periódicamente a medida que llegan las solicitudes y que cambia la oferta disponible. Todo elmundo paga el mismo precio de subasta para ese período independientemente de que su puja fueramás alta. Por lo tanto, puede pagar un importe inferior al de su puja, pero nunca pagará un importesuperior al de esta.

2. Si ejecuta instancias de subasta y su puja ya no coincide con el precio de subasta actual ni lo supera,se terminarán sus instancias. Esto significa que deseará asegurarse de que sus cargas de trabajo yaplicaciones son lo suficientemente flexibles para aprovechar esta oportunista (pero potencialmentetransitoria) capacidad.

Las instancias de subasta tienen exactamente el mismo desempeño que otras instancias Amazon EC2mientras se ejecutan y, al igual que estas, se pueden terminar cuando ya no las necesita. Si termina suinstancia, pagará por las horas parciales empleadas (como lo haría en el caso de las instancias bajodemanda o reservadas). Sin embargo, si Amazon EC2 termina su instancia al superar el precio de subastael importe de su puja, no se le cobrará por las horas parciales empleadas.

En este tutorial se proporciona información general de cómo usar el entorno de programación de .NETpara hacer lo siguiente.

• Enviar una solicitud de subasta• Determinar cuándo se atiende la solicitud de subasta• Cancelar la solicitud de subasta• Terminar instancias asociadas

Requisitos previosEn este tutorial se presupone que se ha inscrito en AWS, que ha configurado su entorno de desarrollode .NET y que ha instalado el AWS SDK for .NET. Si usa el entorno de desarrollo de Microsoft VisualStudio, recomendamos que también instale AWS Toolkit for Visual Studio. Para obtener instruccionesacerca de cómo configurar su entorno, consulte Getting Started with the AWS SDK for .NET (p. 3).

Configuración de las credencialesPara obtener información acerca de cómo usar las credenciales de AWS con el SDK, consulte ConfiguringAWS Credentials (p. 11).

92

Page 97: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias de subasta de Amazon EC2

Envío de la solicitud de subastaPara enviar una solicitud de subasta, primero es necesario determinar el tipo de instancia, la imagende máquina de Amazon (AMI) y el precio de puja máximo que desea usar. También debe incluir ungrupo de seguridad, de modo que pueda iniciar sesión en la instancia si lo desea. Para obtener másinformación acerca de la creación de grupos de seguridad, consulte Creating a Security Group in AmazonEC2 (p. 74).

Hay varios tipos de instancia para elegir; vaya a Tipos de instancias Amazon EC2 para obtener unalista completa. Para este tutorial, usaremos t1.micro. También deseará obtener el ID de una AMI deWindows actual. Para obtener más información, consulte Finding an AMI en Amazon EC2 User Guide forWindows Instances.

Hay muchas formas de enfocar la puja por instancias de subasta. Para obtener información generalsuficiente de los diversos enfoques, debe ver el vídeo Bidding for Spot Instances. Sin embargo, paracomenzar, describiremos tres estrategias comunes: pujar para garantizar que el costo sea menor que elprecio bajo demanda, pujar en función del valor de la computación resultante y pujar con el fin de adquirircapacidad de computación con la mayor rapidez posible.

Reducir el costo bajo demanda

Tiene una tarea de procesamiento por lotes que tardará en ejecutarse una cantidad determinada dehoras o días. Sin embargo, es flexible con respecto a cuándo comienza y finaliza. Desea ver si puedecompletarla por menos del valor del costo de las instancias bajo demanda. Puede examinar el historialde precios de subasta para tipos de instancia mediante la Consola de administración de AWS o laAPI de Amazon EC2. Para obtener más información, consulte Historial de precios de instancias desubasta. Una vez que haya analizado el historial de precios para su tipo de instancia deseado en unazona de disponibilidad especificada, tendrá dos enfoques alternativos para su puja:• Podría pujar en el extremo superior del rango de precios de subasta (que aún son inferiores al

precio bajo demanda), contando con que lo más probable es que su solicitud de subasta puntualse atienda y se ejecute durante un tiempo de computación consecutivo suficiente para completar latarea.

• O bien, podría pujar en el extremo inferior del rango de precios y tener previsto combinar muchasinstancias lanzadas con el tiempo a través de una solicitud persistente. Las instancias se ejecutaríanel tiempo suficiente, combinadas, para completar la tarea con un costo total aún más reducido(explicaremos cómo automatizar esta tarea más tarde en este tutorial).

No pagar un importe superior al valor del resultado

Tiene una tarea de procesamiento de datos para ejecutar. Conoce las ventajas de los resultadosde la tarea lo suficientemente bien como para saber lo valiosos que son en términos de costos decomputación. Una vez que haya analizado el historial de precios de subasta para el tipo de instancia,podrá elegir un precio de puja en el que el costo del tiempo de computación no sea superior al valorde los resultados de la tarea. Puede crear una puja persistente y permitir su ejecución intermitente amedida que el precio de subasta fluctúa en torno a su puja o por debajo de esta.

Adquirir capacidad de computación con rapidez

Tiene una necesidad a corto plazo no anticipada de capacidad adicional que no está disponiblea través de las instancias bajo demanda. Una vez que haya analizado el historial de precios desubasta para el tipo de instancia, podrá pujar por encima del precio histórico más alto para mejorarsignificativamente la probabilidad de que su solicitud se atienda con rapidez y continúe computándosehasta completarse.

Una vez que haya elegido el precio de puja, estará listo para solicitar una instancia de subasta. Para losfines de este tutorial, estableceremos nuestro precio de puja en igual al precio bajo demanda (0,03 USD)para maximizar las posibilidades de que se atienda la puja. Puede determinar los tipos de instanciasdisponibles y los precios bajo demanda para instancias yendo a la página de precios de Amazon EC2.

93

Page 98: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias de subasta de Amazon EC2

Para solicitar una instancia de subasta, debe crear su solicitud con los parámetros que hemos especificadohasta ahora. Comience creando un objeto RequestSpotInstanceRequest. El objeto de la solicitudrequiere el precio de puja y el número de instancias que desea para comenzar. Además, debe establecerLaunchSpecification para la solicitud, que incluye el tipo de instancia, el ID de AMI y el nombre del grupode seguridad que desea usar para las instancias de subasta. Una vez que se haya rellenado la solicitud,llame al método RequestSpotInstances para crear la solicitud de instancia de subasta. En el siguienteejemplo se muestra cómo solicitar una instancia de subasta.

public static SpotInstanceRequest RequestSpotInstance( AmazonEC2Client ec2Client, string amiId, string securityGroupName, InstanceType instanceType, string spotPrice, int instanceCount){ var request = new RequestSpotInstancesRequest();

request.SpotPrice = spotPrice; request.InstanceCount = instanceCount;

var launchSpecification = new LaunchSpecification(); launchSpecification.ImageId = amiId; launchSpecification.InstanceType = instanceType;

launchSpecification.SecurityGroups.Add(securityGroupName);

request.LaunchSpecification = launchSpecification;

var result = ec2Client.RequestSpotInstances(request);

return result.SpotInstanceRequests[0];}

El ID de solicitud de subasta se incluye en el miembro SpotInstanceRequestId del objetoSpotInstanceRequest.

Al ejecutarse este código se lanzará una nueva solicitud de instancia de subasta.

Note

Se le cobrará por las instancias de subasta que se lancen, de modo que asegúrese de cancelarcualquier solicitud y terminar las instancias que lance para reducir las tarifas asociadas.

Hay otras opciones que puede usar para configurar las solicitudes de subasta. Para obtener másinformación, consulte RequestSpotInstances en el AWS SDK for .NET.

Determinación del estado de la solicitud de subastaA continuación, debemos esperar hasta que la solicitud de subasta alcance el estado Active antes decontinuar con el último paso. Para determinar el estado de la solicitud de subasta, usamos el métodoDescribeSpotInstanceRequests para obtener el estado del ID de solicitud de subasta que deseamosmonitorear.

public static SpotInstanceState GetSpotRequestState( AmazonEC2Client ec2Client, string spotRequestId){ // Create the describeRequest object with all of the request ids // to monitor (e.g. that we started). var request = new DescribeSpotInstanceRequestsRequest();

94

Page 99: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEjemplos de instancias de subasta de Amazon EC2

request.SpotInstanceRequestIds.Add(spotRequestId);

// Retrieve the request we want to monitor. var describeResponse = ec2Client.DescribeSpotInstanceRequests(request);

SpotInstanceRequest req = describeResponse.SpotInstanceRequests[0];

return req.State;}

Limpieza de las instancias y solicitudes de subastaEl paso final consiste en limpiar las instancias y solicitudes. Es importante tanto para cancelar cualquiersolicitud pendiente como para terminar cualquier instancia. Las instancias no terminarán con solocancelarse las solicitudes, lo que significa que se le seguirá cobrando por ellas. Si termina las instancias,es posible que se cancelen las solicitudes de subasta, pero hay algunos escenarios (por ejemplo, si usapujas persistentes), donde terminar las instancias no es suficiente para evitar que la solicitud vuelvaa atenderse. Por lo tanto, se recomienda tanto cancelar cualquier puja activa como terminar cualquierinstancia en ejecución.

Puede usar el método CancelSpotInstanceRequests para cancelar una solicitud de subasta. En elsiguiente ejemplo se muestra cómo cancelar una solicitud de subasta.

public static void CancelSpotRequest( AmazonEC2Client ec2Client, string spotRequestId){ var cancelRequest = new CancelSpotInstanceRequestsRequest();

cancelRequest.SpotInstanceRequestIds.Add(spotRequestId);

ec2Client.CancelSpotInstanceRequests(cancelRequest);}

Puede usar el método TerminateInstances para terminar una instancia. En el siguiente ejemplo se muestracómo obtener el identificador de instancias para una instancia de subasta activa y terminar la instancia.

public static void TerminateSpotInstance( AmazonEC2Client ec2Client, string spotRequestId){ var describeRequest = new DescribeSpotInstanceRequestsRequest(); describeRequest.SpotInstanceRequestIds.Add(spotRequestId);

// Retrieve the request we want to monitor. var describeResponse = ec2Client.DescribeSpotInstanceRequests(describeRequest);

if (SpotInstanceState.Active == describeResponse.SpotInstanceRequests[0].State) { string instanceId = describeResponse.SpotInstanceRequests[0].InstanceId;

var terminateRequest = new TerminateInstancesRequest(); terminateRequest.InstanceIds = new List<string>() { instanceId };

try { var terminateResponse = ec2Client.TerminateInstances(terminateRequest); } catch (AmazonEC2Exception ex) { // Check the ErrorCode to see if the instance does not exist.

95

Page 100: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAlmacenamiento de datos de

archivado utilizando Amazon Glacier

if ("InvalidInstanceID.NotFound" == ex.ErrorCode) { Console.WriteLine("Instance {0} does not exist.", instanceId); } else { // The exception was thrown for another reason, so re-throw the exception. throw; } } }}

Para obtener más información acerca de cómo terminar instancias activas, consulte Terminating anAmazon EC2 Instance (p. 85).

Almacenamiento de datos de archivado utilizandoAmazon Glacier

El AWS SDK for .NET es compatible con Amazon Glacier, un servicio de almacenamiento optimizadopara datos que se utilizan poco o para datos inactivos. Este servicio proporciona almacenamiento seguro,duradero y de muy bajo costo para archivar datos y realizar backups. Para obtener más información,consulte la guía para desarrolladores de Amazon Glacier.

La información que sigue le proporciona un resumen sobre los modelos de programación de AmazonGlacier en el AWS SDK for .NET.

Modelos de programaciónEl AWS SDK for .NET proporciona dos modelos de programación para trabajar con Amazon Glacier. Acontinuación se describen dichos modelos y el motivo y la manera en que deben utilizarse.

Temas• API de bajo nivel (p. 96)• API de alto nivel (p. 98)

API de bajo nivelEl AWS SDK for .NET proporciona API de bajo nivel para programar con Amazon Glacier. Estas APIde bajo nivel están mapeadas estrechamente con la API REST subyacente admitida por AmazonGlacier. Para cada operación REST de Amazon Glacier, las API de bajo nivel proporcionan un métodocorrespondiente, un objeto de solicitud para que pueda proporcionar información de la solicitud y un objetode respuesta para que pueda procesar la respuesta de Amazon Glacier. Las API de bajo nivel son laimplementación más completa de las operaciones de Amazon Glacier subyacentes.

En el siguiente ejemplo se muestra cómo usar las API de bajo nivel para elaborar una lista de losalmacenes accesibles en Amazon Glacier:

// using Amazon.Glacier;// using Amazon.Glacier.Model;

var client = new AmazonGlacierClient();var request = new ListVaultsRequest();var response = client.ListVaults(request);

96

Page 101: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideModelos de programación

foreach (var vault in response.VaultList){ Console.WriteLine("Vault: {0}", vault.VaultName); Console.WriteLine(" Creation date: {0}", vault.CreationDate); Console.WriteLine(" Size in bytes: {0}", vault.SizeInBytes); Console.WriteLine(" Number of archives: {0}", vault.NumberOfArchives); try { var requestNotifications = new GetVaultNotificationsRequest { VaultName = vault.VaultName }; var responseNotifications = client.GetVaultNotifications(requestNotifications);

Console.WriteLine(" Notifications:"); Console.WriteLine(" Topic: {0}", responseNotifications.VaultNotificationConfig.SNSTopic);

var events = responseNotifications.VaultNotificationConfig.Events;

if (events.Any()) { Console.WriteLine(" Events:");

foreach (var e in events) { Console.WriteLine("{0}", e); } } else { Console.WriteLine(" No events set."); } } catch (ResourceNotFoundException) { Console.WriteLine(" No notifications set."); } var requestJobs = new ListJobsRequest{ VaultName = vault.VaultName }; var responseJobs = client.ListJobs(requestJobs); var jobs = responseJobs.JobList; if (jobs.Any()) { Console.WriteLine(" Jobs:");

foreach (var job in jobs) { Console.WriteLine(" For job ID: {0}", job.JobId); Console.WriteLine("Archive ID: {0}", job.ArchiveId); Console.WriteLine("Archive size in bytes: {0}", job.ArchiveSizeInBytes.ToString()); Console.WriteLine("Completed: {0}", job.Completed); Console.WriteLine("Completion date: {0}", job.CompletionDate); Console.WriteLine("Creation date: {0}",

97

Page 102: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideModelos de programación

job.CreationDate); Console.WriteLine("Inventory size in bytes: {0}", job.InventorySizeInBytes); Console.WriteLine("Job description: {0}", job.JobDescription); Console.WriteLine("Status code: {0}", job.StatusCode.Value); Console.WriteLine("Status message: {0}", job.StatusMessage); }

} else { Console.WriteLine(" No jobs."); }

}

Para obtener más ejemplos, consulte:

• Mediante el AWS SDK para .NET• Creación de un almacén• Recuperación de los metadatos de almacén• Descarga de un inventario del almacén• Configuración de las notificaciones del almacén• Eliminación de un almacén• Carga de un archivo en una única operación• Carga de archivos grandes por partes• Descarga de un archivo• Eliminación de un archivo

Para obtener información acerca de la referencia de la API relacionada, consulte Amazon.Glacier yAmazon.Glacier.

API de alto nivelEl AWS SDK for .NET proporciona API de alto nivel para programar con Amazon Glacier. Para simplificaraún más el desarrollo de aplicaciones, estas API de alto nivel ofrecen un mayor nivel de abstracción paradeterminadas operaciones, incluida la carga de un archivo y la descarga de un archivo o inventario dealmacén.

Para ver ejemplos, consulte los siguientes temas de la Guía para desarrolladores de Amazon Glacier:

• Mediante el AWS SDK para .NET• Creación de un almacén• Eliminación de un almacén• Carga de un archivo en un almacén• Carga de un archivo• Carga de archivos grandes por partes• Descarga de un archivo desde un almacén• Descarga de un archivo• Eliminación de un archivo desde un almacén• Eliminación de un archivo

98

Page 103: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de usuarios conAWS

Identity and Access Management (IAM)

Para obtener información acerca de la referencia de la API relacionada, consulte Amazon.Glacier.Transferen la AWS SDK for .NET API Reference.

Administración de usuarios conAWS Identity andAccess Management (IAM)

El AWS SDK for .NET admite IAM, que es un servicio web que permite a los clientes de AWS administrarusuarios y permisos de usuario en AWS.

El código de muestra se escribe en C#, pero puede usar el AWS SDK for .NET con cualquier lenguajecompatible. Al instalar AWS Toolkit for Visual Studio, se instala un conjunto de plantillas de proyecto C#.Así pues, el modo más sencillo de comenzar con este proyecto es abrir Visual Studio y, a continuación,elegir File, New Project, AWS Sample Projects, Deployment and Management y AWS Identity and AccessManagement User.

Para obtener información acerca de la referencia de la API relacionada, consulteAmazon.IdentityManagement y Amazon.IdentityManagement.Model.

Requisitos previos

Antes de empezar, asegúrese de haber creado una cuenta de AWS y configurado las credenciales deAWS. Para obtener más información, consulte Getting Started with the AWS SDK for .NET (p. 3).

Temas• Administración de alias de cuenta de IAM (p. 99)• IAM Gestión de usuarios (p. 101)• Administración de las claves de acceso de IAM (p. 104)• Uso de políticas de IAM (p. 107)• Uso de certificados de servidor de IAM (p. 111)• Crear una lista de información de la cuenta de IAM (p. 113)• Granting Access Using an IAM Role (p. 114)

Administración de alias de cuenta de IAMEn estos ejemplos de .NET puede ver cómo:

• Crear un alias de cuenta para el ID de su cuenta de AWS• Enumerar un alias de cuenta para el ID de su cuenta de AWS• Eliminar un alias de cuenta para el ID de su cuenta de AWS

El escenarioSi quiere que la dirección URL de la página de inicio de sesión contenga el nombre de su empresa u otroidentificador intuitivo en lugar de su ID de cuenta de AWS, puede crear un alias para el ID de cuenta deAWS. Si crea un alias de cuenta de AWS, la dirección URL de su página de inicio de sesión cambia paraincorporar dicho alias.

En los siguientes ejemplos se muestra cómo administrar su alias de cuenta de AWS mediante estosmétodos de la clase AmazonIdentityManagementServiceClient:

• CreateAccountAlias

99

Page 104: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de alias de cuenta de IAM

• ListAccountAliases• DeleteAccountAlias

Para obtener más información acerca de los alias de cuenta de IAM, consulte Su ID de cuenta y alias deAWS en la IAM User Guide.

Crear un alias de cuentaCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoCreateAccountAliasRequest que contenga el nuevo alias de cuenta que desea usar. Llame al métodoCreateAccountAlias del objeto AmazonIAMClient. Si se creó el alias de cuenta, muestre el nuevo aliasen la consola. Si el nombre ya existe, escriba el mensaje de la excepción a la consola.

public static void CreateAccountAlias(){ try { var iamClient = new AmazonIdentityManagementServiceClient(); var request = new CreateAccountAliasRequest(); request.AccountAlias = "my-aws-account-alias-2017"; var response = iamClient.CreateAccountAlias(request); if (response.HttpStatusCode.ToString() == "OK") Console.WriteLine(request.AccountAlias + " created."); else Console.WriteLine("HTTpStatusCode returned = " + response.HttpStatusCode.ToString()); } catch (Exception e) { Console.WriteLine(e.Message); }}

Enumerar alias de cuentaCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoListAccountAliasesRequest. Llame al método ListAccountAliases del objeto AmazonIAMClient. Si hay unalias de cuenta, muéstrelo en la consola.

Si no hay ningún alias de cuenta, escriba el mensaje de la excepción a la consola.Note

Solo puede haber un alias de cuenta.

public static void ListAccountAliases(){ try { var iamClient = new AmazonIdentityManagementServiceClient(); var request = new ListAccountAliasesRequest(); var response = iamClient.ListAccountAliases(request); List<string> aliases = response.AccountAliases; foreach (string account in aliases) { Console.WriteLine("The account alias is: " + account); } } catch (Exception e) {

100

Page 105: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideIAM Gestión de usuarios

Console.WriteLine(e.Message); }}

Eliminar un alias de cuentaCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoDeleteAccountAliasRequest que contenga el nuevo alias de cuenta que desea eliminar. Llame al métodoDeleteAccountAlias del objeto AmazonIAMClient. Si se eliminó el alias de cuenta, muestre la informaciónde eliminación en la consola. Si el nombre no existe, escriba el mensaje de la excepción a la consola.

public static void DeleteAccountAlias(){ try { var iamClient = new AmazonIdentityManagementServiceClient(); var request = new DeleteAccountAliasRequest(); request.AccountAlias = "my-aws-account-alias-2017"; var response = iamClient.DeleteAccountAlias(request); if (response.HttpStatusCode.ToString() == "OK") Console.WriteLine(request.AccountAlias + " deleted."); else Console.WriteLine("HTTpStatusCode returned = " + response.HttpStatusCode.ToString()); } catch (NoSuchEntityException e) { Console.WriteLine(e.Message); }}

IAM Gestión de usuariosEn este ejemplo de .NET puede ver cómo recuperar una lista de usuarios de IAM, crear y eliminar usuariosde IAM y actualizar un nombre de usuario de IAM.

Puede crear y administrar usuarios en IAM mediante estos métodos de la claseAmazonIdentityManagementServiceClient:

• CreateUser• ListUsers• UpdateUser• GetUser• DeleteUser

Para obtener más información acerca de los usuarios de IAM, consulte IAM Users en la IAM User Guide.

Para obtener información acerca de las limitaciones de la cantidad de usuarios de IAM que puede crear,consulte Limitations on IAM Entities en la IAM User Guide.

Crear un usuario para la cuenta de AWSCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoCreateUserRequest que contenga el nombre de usuario que desea usar para el nuevo usuario. Llameal método CreateUser del objeto AmazonIAMClient. Si el nombre de usuario no existe actualmente,muestre el nombre y el ARN para el usuario en la consola. Si el nombre ya existe, escriba un mensaje a talefecto a la consola.

101

Page 106: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideIAM Gestión de usuarios

var client = new AmazonIdentityManagementServiceClient();var request = new CreateUserRequest{ UserName = "DemoUser"};

try{ var response = client.CreateUser(request);

Console.WriteLine("User Name = '{0}', ARN = '{1}'", response.User.UserName, response.User.Arn);}catch (EntityAlreadyExistsException){ Console.WriteLine("User 'DemoUser' already exists.");}

Listar los usuarios de su cuenta de AWSEn este ejemplo se listan los usuarios de IAM con el prefijo de ruta especificado. Si no se especifica ningúnprefijo de ruta, la acción devuelve todos los usuarios de la cuenta de AWS. Si no hay usuarios, la accióndevuelve una lista vacía.

Cree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoListUsersRequest que contenga los parámetros necesarios para listar sus usuarios. Limite elnúmero devuelto estableciendo el parámetro MaxItems en 10. Llame al método ListUsers del objetoAmazonIdentityManagementServiceClient. Escriba el nombre del usuario y la fecha de creación enla consola.

public static void ListUsers(){ var iamClient = new AmazonIdentityManagementServiceClient(); var requestUsers = new ListUsersRequest() { MaxItems = 10 }; var responseUsers = iamClient.ListUsers(requestUsers);

foreach (var user in responseUsers.Users) { Console.WriteLine("User " + user.UserName + " Created: " + user.CreateDate.ToShortDateString()); }

}

Actualizar el nombre de un usuarioEn este ejemplo se muestra cómo actualizar el nombre o la ruta del usuario de IAM especificado.Asegúrese de que comprende las implicaciones de cambiar la ruta o el nombre de un usuario de IAM. Paraobtener más información, consulte Renaming an IAM User en la IAM User Guide.

Cree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoUpdateUserRequest, especificando los nombres de usuario actuales y nuevos como parámetros. Llame almétodo UpdateUser del objeto AmazonIdentityManagementServiceClient.

public static void UpdateUser(){ var client = new AmazonIdentityManagementServiceClient(); var request = new UpdateUserRequest {

102

Page 107: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideIAM Gestión de usuarios

UserName = "DemoUser", NewUserName = "NewUser" };

try { var response = client.UpdateUser(request);

} catch (EntityAlreadyExistsException) { Console.WriteLine("User 'NewUser' already exists."); }}

Obtener información acerca de un usuarioEn este ejemplo se muestra cómo recuperar información acerca del usuario de IAM especificado, incluidosla fecha de creación, la ruta, el ID exclusivo y el ARN del usuario. Si no especifica un nombre de usuario,IAM determina el nombre de usuario de forma implícita en función del ID de clave de acceso de AWSusado para firmar la solicitud a esta API.

Cree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objeto GetUserRequestque contenga el nombre de usuario acerca del cual desea obtener información. Llame al método GetUserdel objeto AmazonIdentityManagementServiceClient para obtener la información. Si el usuario noexiste, se genera una excepción.

public static void GetUser(){ var client = new AmazonIdentityManagementServiceClient(); var request = new GetUserRequest() { UserName = "DemoUser" };

try { var response = client.GetUser(request); Console.WriteLine("Creation date: " + response.User.CreateDate.ToShortDateString()); Console.WriteLine("Password last used: " + response.User.PasswordLastUsed.ToShortDateString()); Console.WriteLine("UserId = " + response.User.UserId);

} catch (NoSuchEntityException) { Console.WriteLine("User 'DemoUser' does not exist."); }}

Eliminación de un usuarioEn este ejemplo se muestra cómo eliminar el usuario de IAM especificado. El usuario no debe pertenecer aningún grupo ni tener ninguna clave de acceso, certificados de firma o políticas asociadas.

Cree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoDeleteUserRequest que contenga los parámetros necesarios, que conste del nombre de usuario quedesea eliminar. Llame al método DeleteUser del objeto AmazonIdentityManagementServiceClientpara eliminarlo. Si el usuario no existe, se genera una excepción.

103

Page 108: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de las claves de acceso de IAM

public static void DeleteUser(){ var client = new AmazonIdentityManagementServiceClient(); var request = new DeleteUserRequest() { UserName = "DemoUser" };

try { var response = client.DeleteUser(request);

} catch (NoSuchEntityException) { Console.WriteLine("User DemoUser' does not exist."); }}

Administración de las claves de acceso de IAMEn estos ejemplos de .NET puede ver cómo:

• Crear una clave de acceso para un usuario• Obtener la fecha en que se utilizó por última vez una clave de acceso• Actualizar el estado de una clave de acceso• Eliminar una clave de acceso

El escenarioLos usuarios necesitan sus propias claves de acceso para realizar llamadas programáticas a AWS desdeel AWS SDK for .NET. Para ello, puede crear, modificar, ver o rotar claves de acceso (ID de clave deacceso y claves de acceso secretas) para los usuarios de IAM. Cuando crea una clave de acceso, suestado es Active de forma predeterminada, lo que significa que el usuario puede utilizar la clave de accesopara realizar llamadas a la API.

El código C# usa el AWS SDK for .NET para administrar claves de acceso de IAM mediante estos métodosde la clase AmazonIdentityManagementServiceClient:

• CreateAccessKey• ListAccessKeys• GetAccessKeyLastUsed• UpdateAccessKey• DeleteAccessKey

Para obtener más información acerca de las claves de acceso de IAM, consulte Administración de lasclaves de acceso de los usuarios de IAM en la IAM User Guide.

Crear claves de acceso para un usuarioLlame al método CreateAccessKey para crear una clave de acceso denominadaS3UserReadOnlyAccess para los ejemplos de claves de acceso de IAM. El CreateAccessKeymethod first creates a user named :code:`S3UserReadOnlyAccess con derechosde acceso de solo lectura llamando al método CreateUser. A continuación crea los objetos

104

Page 109: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de las claves de acceso de IAM

AmazonIdentityManagementServiceClient y CreateAccessKeyRequest, que contienen el parámetroUserName necesario para crear nuevas claves de acceso. Después llama al método CreateAccessKey delobjeto AmazonIdentityManagementServiceClient.

public static void CreateAccessKey(){ try { CreateUser(); var iamClient = new AmazonIdentityManagementServiceClient(); // Create an access key for the IAM user that can be used by the SDK var accessKey = iamClient.CreateAccessKey(new CreateAccessKeyRequest { // Use the user created in the CreateUser example UserName = "S3UserReadOnlyAccess" }).AccessKey;

} catch (LimitExceededException e) { Console.WriteLine(e.Message); }}

public static User CreateUser(){ var iamClient = new AmazonIdentityManagementServiceClient(); try { // Create the IAM user var readOnlyUser = iamClient.CreateUser(new CreateUserRequest { UserName = "S3UserReadOnlyAccess" }).User;

// Assign the read-only policy to the new user iamClient.PutUserPolicy(new PutUserPolicyRequest { UserName = readOnlyUser.UserName, PolicyName = "S3ReadOnlyAccess", PolicyDocument = S3_READONLY_POLICY }); return readOnlyUser; } catch (EntityAlreadyExistsException e) { Console.WriteLine(e.Message); var request = new GetUserRequest() { UserName = "S3UserReadOnlyAccess" };

return iamClient.GetUser(request).User;

}}

Generar una lista de las claves de acceso de un usuarioCree los objetos AmazonIdentityManagementServiceClient y ListAccessKeysRequest, los cuales contienenlos parámetros necesarios para recuperar las claves de acceso del usuario. Esto incluye el nombre delusuario de IAM y, de forma opcional, el número máximo de pares de claves de acceso que desea incluir enel listado. Llame al método ListAccessKeys del objeto AmazonIdentityManagementServiceClient.

105

Page 110: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de las claves de acceso de IAM

public static void ListAccessKeys(){

var iamClient = new AmazonIdentityManagementServiceClient(); var requestAccessKeys = new ListAccessKeysRequest { // Use the user created in the CreateAccessKey example UserName = "S3UserReadOnlyAccess", MaxItems = 10 }; var responseAccessKeys = iamClient.ListAccessKeys(requestAccessKeys); Console.WriteLine(" Access keys:");

foreach (var accessKey in responseAccessKeys.AccessKeyMetadata) { Console.WriteLine(" {0}", accessKey.AccessKeyId); }}

Obtener la fecha en que se utilizaron por última vez las claves deaccesoCree los objetos AmazonIdentityManagementServiceClient y ListAccessKeysRequest, los cualescontienen el parámetro UserName necesario para enumerar las claves de acceso. Llame al métodoListAccessKeys del objeto AmazonIdentityManagementServiceClient. Recorra en bucle lasclaves de acceso devueltas mostrando el AccessKeyId de cada clave y usándolo para crear un objetoGetAccessKeyLastUsedRequest. Llame al método GetAccessKeyLastUsed y muestre la hora en que seutilizó por última vez la clave en la consola.

public static void GetAccessKeysLastUsed(){

var iamClient = new AmazonIdentityManagementServiceClient(); var requestAccessKeys = new ListAccessKeysRequest { // Use the user we created in the CreateUser example UserName = "S3UserReadOnlyAccess" }; var responseAccessKeys = iamClient.ListAccessKeys(requestAccessKeys); Console.WriteLine(" Access keys:");

foreach (var accessKey in responseAccessKeys.AccessKeyMetadata) { Console.WriteLine(" {0}", accessKey.AccessKeyId); GetAccessKeyLastUsedRequest request = new GetAccessKeyLastUsedRequest() { AccessKeyId = accessKey.AccessKeyId }; var response = iamClient.GetAccessKeyLastUsed(request); Console.WriteLine("Key last used " + response.AccessKeyLastUsed.LastUsedDate.ToLongDateString()); }}

Actualizar el estado de una clave de accesoCree los objetos AmazonIdentityManagementServiceClient y ListAccessKeysRequest que contienenel nombre de usuario para el que se van a enumerar las claves. En este ejemplo, el nombre deusuario es el usuario creado para los otros ejemplos. Llame al método ListAccessKeys del objetoAmazonIdentityManagementServiceClient. El objeto ListAccessKeysResponse que se devuelvecontiene una lista de las claves de acceso de ese usuario. Use la primera clave de acceso de la lista. Cree

106

Page 111: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de políticas de IAM

un objeto UpdateAccessKeyRequest proporcionando los parámetros UserName, AccessKeyId y Status.Llame al método UpdateAccessKey del objeto AmazonIdentityManagementServiceClient.

public static void UpdateKeyStatus(){ // This example changes the status of the key specified by its index in the list of access keys // Optionally, you could change the keynumber parameter to be an AccessKey ID var iamClient = new AmazonIdentityManagementServiceClient(); var requestAccessKeys = new ListAccessKeysRequest { UserName = "S3UserReadOnlyAccess" }; var responseAccessKeys = iamClient.ListAccessKeys(requestAccessKeys); UpdateAccessKeyRequest updateRequest = new UpdateAccessKeyRequest { UserName = "S3UserReadOnlyAccess", AccessKeyId = responseAccessKeys.AccessKeyMetadata[0].AccessKeyId, Status = StatusType.Active }; iamClient.UpdateAccessKey(updateRequest); Console.WriteLine(" Access key " + updateRequest.AccessKeyId + " updated");}

Eliminar claves de accesoCree los objetos AmazonIdentityManagementServiceClient y ListAccessKeysRequest quecontienen el nombre del usuario como parámetro. Llame al método ListAccessKeys del objetoAmazonIdentityManagementServiceClient. El objeto ListAccessKeysResponse que se devuelvecontiene una lista de las claves de acceso de ese usuario. Elimine cada clave de acceso de la listallamando al método DeleteAccessKey del objeto AmazonIdentityManagementServiceClient.

public static void DeleteAccessKeys(){// Delete all the access keys created for the examples var iamClient = new AmazonIdentityManagementServiceClient(); var requestAccessKeys = new ListAccessKeysRequest { // Use the user created in the CreateUser example UserName = "S3UserReadOnlyAccess" }; var responseAccessKeys = iamClient.ListAccessKeys(requestAccessKeys); Console.WriteLine(" Access keys:");

foreach (var accessKey in responseAccessKeys.AccessKeyMetadata) { Console.WriteLine(" {0}", accessKey.AccessKeyId); iamClient.DeleteAccessKey(new DeleteAccessKeyRequest { UserName = "S3UserReadOnlyAccess", AccessKeyId = accessKey.AccessKeyId }); Console.WriteLine("Access Key " + accessKey.AccessKeyId + " deleted"); }

}

Uso de políticas de IAMLos siguientes ejemplos muestran como:

107

Page 112: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de políticas de IAM

• Crear y eliminar políticas de IAM• Adjuntar y separar políticas de IAM de los roles

El escenarioLos permisos se conceden a un usuario creando una política, que es un documento que elabora una listade las acciones que puede realizar un usuario y los recursos que afectan a dichas acciones. De formapredeterminada, todas las acciones o recursos que no se permiten de forma explícita se deniegan. Puedecrear políticas y adjuntarlas a usuarios, grupos de usuarios, roles asumidos por usuarios y recursos.

Use el AWS SDK for .NET para crear y eliminar políticas y adjuntar y separar políticas de roles utilizandolos siguientes métodos de la clase AmazonIdentityManagementServiceClient:

• CreatePolicy• GetPolicy• ListAttachedRolePolicies• AttachRolePolicy• DetachRolePolicy

Para obtener más información sobre los usuarios de IAM, consulte Información general sobre laadministración del acceso: permisos y políticas en la IAM User Guide.

Crear una política de IAMCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objeto CreatePolicyque contenga los parámetros necesarios para crear una nueva política, que conste del nombre quequiera utilizar para la nueva política y un documento de política. Puede crear el documento de la políticallamando al método GenerateRolePolicyDocument proporcionado. Después de llamar al métodoCreatePolicy, CreatePolicyResponse incluirá el ARN de la política que se muestra en la consola.Anótelo para utilizarlo en los siguientes ejemplos.

public static void CreatePolicyExample(){ var client = new AmazonIdentityManagementServiceClient(); // GenerateRolePolicyDocument is a custom method string policyDoc = GenerateRolePolicyDocument();

var request = new CreatePolicyRequest { PolicyName = "DemoEC2Permissions", PolicyDocument = policyDoc };

try { var createPolicyResponse = client.CreatePolicy(request); Console.WriteLine("Make a note, Policy named " + createPolicyResponse.Policy.PolicyName + " has Arn: : " + createPolicyResponse.Policy.Arn); } catch (EntityAlreadyExistsException) { Console.WriteLine ("Policy 'DemoEC2Permissions' already exits."); }

}

108

Page 113: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de políticas de IAM

public static string GenerateRolePolicyDocument(){ // using Amazon.Auth.AccessControlPolicy;

// Create a policy that looks like this: /* { "Version" : "2012-10-17", "Id" : "DemoEC2Permissions", "Statement" : [ { "Sid" : "DemoEC2PermissionsStatement", "Effect" : "Allow", "Action" : [ "s3:Get*", "s3:List*" ], "Resource" : "*" } ] } */

var actionGet = new ActionIdentifier("s3:Get*"); var actionList = new ActionIdentifier("s3:List*"); var actions = new List<ActionIdentifier>();

actions.Add(actionGet); actions.Add(actionList);

var resource = new Resource("*"); var resources = new List<Resource>();

resources.Add(resource);

var statement = new Amazon.Auth.AccessControlPolicy.Statement(Amazon.Auth.AccessControlPolicy.Statement.StatementEffect.Allow) { Actions = actions, Id = "DemoEC2PermissionsStatement", Resources = resources }; var statements = new List<Amazon.Auth.AccessControlPolicy.Statement>();

statements.Add(statement);

var policy = new Policy { Id = "DemoEC2Permissions", Version = "2012-10-17", Statements = statements };

return policy.ToJson();}

Obtener una política de IAMCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoGetPolicyRequest que incluya el parámetro necesario para obtener la política, el ARN de la política,devuelto por el método CreatePolicy en el ejemplo anterior.

Llame al método GetPolicy.

109

Page 114: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de políticas de IAM

public static void GetPolicy(){ var client = new AmazonIdentityManagementServiceClient(); var request = new GetPolicyRequest { PolicyArn = "arn:aws:iam::123456789:policy/DemoEC2Permissions" };

try { var response = client.GetPolicy(request); Console.WriteLine("Policy " + response.Policy.PolicyName + "successfully retrieved");

} catch (NoSuchEntityException) { Console.WriteLine ("Policy 'DemoEC2Permissions' does not exist."); }

}

Adjuntar una política de roles administradaCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objeto AttachRolePolicyque incluya los parámetros necesarios para adjuntar la política al rol, el nombre del rol y la política Jasondevuelta por el método GenerateRolePolicyDocument. Asegúrese de utilizar un rol válido de los rolesasociados con su cuenta de AWS.

public static void AttachRolePolicy(){ var client = new AmazonIdentityManagementServiceClient(); string policy = GenerateRolePolicyDocument(); CreateRoleRequest roleRequest = new CreateRoleRequest() { RoleName = "tester", AssumeRolePolicyDocument = policy };

var request = new AttachRolePolicyRequest() { PolicyArn = "arn:aws:iam::123456789:policy/DemoEC2Permissions", RoleName = "tester" }; try { var response = client.AttachRolePolicy(request); Console.WriteLine("Policy DemoEC2Permissions attached to Role TestUser"); } catch (NoSuchEntityException) { Console.WriteLine ("Policy 'DemoEC2Permissions' does not exist"); } catch (InvalidInputException) { Console.WriteLine ("One of the parameters is incorrect"); }}

110

Page 115: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de certificados de servidor de IAM

Separar una política de roles administradaCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objeto DetachRolePolicyque incluya los parámetros necesarios para adjuntar la política al rol, el nombre del rol y la política Jasondevuelta por el método GenerateRolePolicyDocument. Asegúrese de utilizar el rol adjuntado a lapolítica del ejemplo anterior.

public static void DetachRolePolicy(){ var client = new AmazonIdentityManagementServiceClient(); string policy = GenerateRolePolicyDocument(); CreateRoleRequest roleRequest = new CreateRoleRequest() { RoleName = "tester", AssumeRolePolicyDocument = policy };

var request = new DetachRolePolicyRequest() { PolicyArn = "arn:aws:iam::123456789:policy/DemoEC2Permissions", RoleName = "tester" }; try { var response = client.DetachRolePolicy(request); Console.WriteLine("Policy DemoEC2Permissions detached from Role 'tester'"); } catch (NoSuchEntityException e) { Console.WriteLine (e.Message); } catch (InvalidInputException i) { Console.WriteLine (i.Message); }}

Uso de certificados de servidor de IAMEn estos ejemplos de .NET puede ver cómo:

• Elaborar listas de certificados de servidor• Obtener certificados de servidor• Actualizar certificados de servidor• Eliminar certificados de servidor

El escenarioEn estos ejemplos se explican las tareas básicas de administración de certificados de servidor paraconexiones HTTPS. Para habilitar las conexiones HTTPS en su sitio web o aplicación en AWS, necesita uncertificado de servidor de SSL/TLS. Para utilizar un certificado obtenido de un proveedor externo en su sitioweb o aplicación en AWS, debe cargar el certificado en IAM o importarlo a AWS Certificate Manager.

En estos ejemplos se utiliza el AWS SDK for .NET para enviar y recibir mensajes mediante estos métodosde la clase AmazonIdentityManagementServiceClient:

111

Page 116: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de certificados de servidor de IAM

• ListServerCertificates• GetServerCertificate• UpdateServerCertificate• DeleteServerCertificate

Para obtener más información acerca de los certificados de servidor, consulte Uso de certificados deservidor en la IAM User Guide.

Elaborar listas de sus certificados de servidorCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoListServerCertificatesRequest.

No hay parámetros obligatorios. Llame al método ListServerCertificates del objetoAmazonIdentityManagementServiceClient.

public static void ListCertificates(){ try { var iamClient = new AmazonIdentityManagementServiceClient(); var request = new ListServerCertificatesRequest(); var response = iamClient.ListServerCertificates(request); foreach (KeyValuePair<string, string> kvp in response.ResponseMetadata.Metadata) { Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value); } } catch(Exception e) { Console.WriteLine(e.Message); }}

Obtener un certificado de servidorCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoGetServerCertificateRequest y especifique el ServerCertificateName. Llame al métodoGetServerCertificate del objeto AmazonIdentityManagementServiceClient.

public static void GetCertificate(){ try { var iamClient = new AmazonIdentityManagementServiceClient(); var request = new GetServerCertificateRequest(); request.ServerCertificateName = "CERTIFICATE_NAME"; var response = iamClient.GetServerCertificate(request); Console.WriteLine("CertificateName = " + response.ServerCertificate.ServerCertificateMetadata.ServerCertificateName); Console.WriteLine("Certificate Arn = " + response.ServerCertificate.ServerCertificateMetadata.Arn); } catch (Exception e) { Console.WriteLine(e.Message); }}

112

Page 117: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideCrear una lista de información de la cuenta de IAM

Actualizar un certificado de servidorCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree unobjeto UpdateServerCertificateRequest y especifique el ServerCertificateName yel NewServerCertificateName. Llame al método UpdateServerCertificate del objetoAmazonIdentityManagementServiceClient.

public static void UpdateCertificate(){ try { var iamClient = new AmazonIdentityManagementServiceClient(); var request = new UpdateServerCertificateRequest(); request.ServerCertificateName = "CERTIFICATE_NAME"; request.NewServerCertificateName = "NEW_Certificate_NAME"; var response = iamClient.UpdateServerCertificate(request); if (response.HttpStatusCode.ToString() == "OK") Console.WriteLine("Update succesful"); else Console.WriteLine("HTTpStatusCode returned = " + response.HttpStatusCode.ToString()); } catch (Exception e) { Console.WriteLine(e.Message); }

}

Eliminar un certificado de servidorCree un objeto AmazonIdentityManagementServiceClient. A continuación, cree un objetoDeleteServerCertificateRequest y especifique el ServerCertificateName. Llame al métodoDeleteServerCertificate del objeto AmazonIdentityManagementServiceClient.

public static void DeleteCertificate(){ try { var iamClient = new AmazonIdentityManagementServiceClient(); var request = new DeleteServerCertificateRequest(); request.ServerCertificateName = "CERTIFICATE_NAME"; var response = iamClient.DeleteServerCertificate(request); if (response.HttpStatusCode.ToString() == "OK") Console.WriteLine(request.ServerCertificateName + " deleted"); else Console.WriteLine("HTTpStatusCode returned = " + response.HttpStatusCode.ToString()); } catch (Exception e) { Console.WriteLine(e.Message); }}

Crear una lista de información de la cuenta de IAMEl AWS SDK for .NET admite IAM, que es un servicio web que permite a los clientes de AWS administrarusuarios y permisos de usuario en AWS.

113

Page 118: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideGranting Access Using an IAM Role

En el siguiente ejemplo se muestra cómo usar las API de bajo nivel para enumerar cuentas de usuarioaccesibles en IAM. Para cada cuenta de usuario, también se enumeran sus ID de clave de acceso, suspolíticas y sus grupos asociados.

public static void ListUsers(){ var iamClient = new AmazonIdentityManagementServiceClient(); var requestUsers = new ListUsersRequest(); var responseUsers = iamClient.ListUsers(requestUsers);

foreach (var user in responseUsers.Users) { Console.WriteLine("For user {0}:", user.UserName); Console.WriteLine(" In groups:");

var requestGroups = new ListGroupsForUserRequest { UserName = user.UserName }; var responseGroups = iamClient.ListGroupsForUser(requestGroups);

foreach (var group in responseGroups.Groups) { Console.WriteLine(" {0}", group.GroupName); }

Console.WriteLine(" Policies:");

var requestPolicies = new ListUserPoliciesRequest { UserName = user.UserName }; var responsePolicies = iamClient.ListUserPolicies(requestPolicies);

foreach (var policy in responsePolicies.PolicyNames) { Console.WriteLine(" {0}", policy); }

var requestAccessKeys = new ListAccessKeysRequest { UserName = user.UserName }; var responseAccessKeys = iamClient.ListAccessKeys(requestAccessKeys);

Console.WriteLine(" Access keys:");

foreach (var accessKey in responseAccessKeys.AccessKeyMetadata) { Console.WriteLine(" {0}", accessKey.AccessKeyId); } }}

Para obtener información acerca de la referencia de la API relacionada, consulteAmazon.IdentityManagement y Amazon.IdentityManagement.Model.

Granting Access Using an IAM RoleEn este ejemplo de .NET puede ver cómo:

• Crear un programa de ejemplo que recupere un objeto de Amazon S3

114

Page 119: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideGranting Access Using an IAM Role

• Crear un rol de IAM• Lanzar una instancia Amazon EC2 y especificar el rol de IAM• Ejecutar la muestra en la instancia Amazon EC2

El escenarioTodas las solicitudes a AWS deben firmarse criptográficamente mediante credenciales emitidas por AWS.Por tanto, es necesaria una estrategia para administrar credenciales para el software que se ejecuta enlas instancias Amazon EC2. Debe distribuir, almacenar y rotar estas credenciales de forma segura, perotambién mantenerlas accesibles en el software.

Los roles de IAM le permiten administrar de forma eficaz las credenciales de AWS para el software que seejecuta en las instancias EC2. Puede crear un rol de IAM y configurarla con los permisos requeridos por elsoftware. Para obtener más información acerca de los beneficios de usar roles de IAM, consulte IAM Rolesfor Amazon EC2 en Amazon EC2 User Guide for Windows Instances y Roles (Delegation and Federation)en IAM User Guide.

Para usar los permisos, el software crea un objeto de cliente para el servicio de AWS. El constructor buscala cadena de proveedores de credenciales para las credenciales. Para .NET, la cadena de proveedores decredenciales es la siguiente:

• El archivo App.config• Los metadatos de instancias asociados al rol de IAM para la instancia EC2

Si el cliente no encuentra credenciales en App.config, recuperará credenciales temporales con losmismos permisos que aquellos asociados al rol de IAM de los metadatos de la instancia. El constructoralmacena las credenciales en nombre del software de aplicaciones y se usan para realizar llamadas aAWS desde ese objeto de cliente. Aunque las credenciales son temporales y acaban caducando, el clientedel SDK las actualiza periódicamente de modo que continúen habilitando el acceso. Esta actualizaciónperiódica es completamente transparente para el software de aplicaciones.

En los siguientes ejemplos se muestra un programa de ejemplo que recupera un objeto de AmazonS3 mediante las credenciales de AWS que configura. Puede crear un rol de IAM para proporcionar lascredenciales de AWS. Por último, puede lanzar una instancia con un rol de IAM que proporcione lascredenciales de AWS al programa de ejemplo que se ejecuta en la instancia.

Crear un muestra que recupere un objeto de Amazon S3En el siguiente código de muestra se requiere un archivo de texto en un bucket de Amazon S3 al quetenga acceso y credenciales de AWS que le proporcionen acceso al bucket de Amazon S3.

Para obtener más información acerca de cómo crear un bucket de Amazon S3 y cargar un objeto, consultela Guía de introducción a Amazon S3. Para obtener más información acerca de las credenciales de AWS,consulte Configuring AWS Credentials (p. 11).

using System;using System.Collections.Specialized;using System.IO;

using Amazon;using Amazon.S3;using Amazon.S3.Model;

namespace Aws3Sample{ class S3Sample {

115

Page 120: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideGranting Access Using an IAM Role

public static void Main(string[] args) { ReadS3File("bucket-name", "s3-file-name", "output-file-name");

Console.WriteLine("Press enter to continue"); Console.ReadLine(); }

public static void ReadS3File( string bucketName, string keyName, string filename) {

string responseBody = "";

try { using (var s3Client = new AmazonS3Client()) { Console.WriteLine("Retrieving (GET) an object");

var request = new GetObjectRequest() { BucketName = bucketName, Key = keyName };

using (var response = s3Client.GetObject(request)) using (var responseStream = response.ResponseStream) using (var reader = new StreamReader(responseStream)) { responseBody = reader.ReadToEnd(); } }

using (var s = new FileStream(filename, FileMode.Create)) using (var writer = new StreamWriter(s)) { writer.WriteLine(responseBody); } } catch (AmazonS3Exception s3Exception) { Console.WriteLine(s3Exception.Message, s3Exception.InnerException); } } }}

Para probar el código de muestra

1. Abra Visual Studio y cree un proyecto de consola de AWS.2. Añada el paquete AWSSDK.S3 al proyecto.3. Reemplace el código del archivo Program.cs por el código de muestra.4. Reemplace los siguientes valores:

bucket-name

Nombre del bucket de Amazon S3.s3-file-name

Ruta y nombre de un archivo de texto del bucket.

116

Page 121: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideGranting Access Using an IAM Role

output-file-name

Ruta y nombre de archivo donde escribir el archivo.5. Compile y ejecute el programa de ejemplo. Si el programa tiene éxito, mostrará el siguiente resultado

y creará un archivo denominado s3Object.txt en la unidad local que contiene el texto que recuperódel archivo de texto en Amazon S3.

Retrieving (GET) an object

Si se produce un error en el programa, asegúrese de que usa las credenciales que le proporcionanacceso al bucket.

6. (Opcional) Transfiera el programa de ejemplo a una instancia de Windows en ejecución en la queno haya configurado las credenciales. Ejecute el programa y verifique que se produce un error en élporque no puede encontrar las credenciales.

Creación de un rol de IAMCree un rol de IAM que tenga los permisos adecuados para obtener acceso a Amazon S3.

Para crear el rol de IAM

Puede usar la consola de Amazon EC2 o el AWS SDK for .NET para lanzar una instancia EC2 con un rolde IAM.

• Uso de la consola: siga las indicaciones de Launching a Windows Instance en Amazon EC2 User Guidefor Windows Instances. Cuando llegue a la página Review Instance Launch, elija Edit instance details.En IAM role, especifique el rol de IAM que creó anteriormente. Complete el procedimiento siguiendo lasinstrucciones. Deberá crear o usar un grupo de seguridad y un par de claves existentes para conectarsea la instancia.

• Uso del AWS SDK for .NET: consulte Launching an Amazon EC2 Instance (p. 80).

Un usuario de IAM no puede lanzar una instancia con un rol de IAM sin los permisos concedidos por lasiguiente política.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListInstanceProfiles", "ec2:*" ], "Resource": "*" }]}

Para transferir el programa de ejemplo a su instancia EC2, conéctese a la instancia mediante la Consolade administración de AWS como se describe en el siguiente procedimiento.

Note

O bien, conéctese mediante el Toolkit for Visual Studio (consulte Connecting to an Amazon EC2Instance en AWS Toolkit for Visual Studio) y, a continuación, copie los archivos de su unidad local

117

Page 122: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideGranting Access Using an IAM Role

en la instancia. La sesión de escritorio remoto se configura automáticamente de modo que susunidades locales estén disponibles para la instancia.

1. Abra la consola de IAM.2. En el panel de navegación, elija Roles y, a continuación, elija Create New Role.3. Escriba un nombre para el nuevo rol y, a continuación, elija Next Step. Recuerde este nombre, ya que

lo necesitará cuando lance su instancia EC2.4. En AWS Service Roles, elija Amazon EC2. En Select Policy Template, elija Amazon S3 Read Only

Access. Revise la política y, a continuación, elija Next Step.5. Revise la información del rol y, luego, seleccione Create Role.

Para ejecutar el programa de ejemplo en la instancia EC2

1. Abra la consola de Amazon EC2.2. Obtenga la contraseña para la instancia EC2:

• En el panel de navegación, seleccione Instances. Elija la instancia y, a continuación, elija

Conexión.

a. En el cuadro de diálogo Connect To Your Instance, elija Get Password (transcurrirán unosminutos hasta que la contraseña esté disponible una vez lanzada la instancia).

b. Elija Browse y desplácese hasta el archivo de clave privada que creó cuando lanzó la instancia.Elija el archivo y, a continuación, elija Open para copiar el contenido del archivo en el cuadro decontenido.

c. Elija Decrypt Password. La consola muestra la contraseña de administrador predeterminada parala instancia en el cuadro de diálogo Connect To Your Instance, reemplazando el enlace a GetPassword mostrado anteriormente por la contraseña.

d. Anote la contraseña de administrador predeterminada o cópiela en el portapapeles. La necesitarápara conectarse a la instancia.

3. Conéctese a su instancia EC2:

a. Elija Download Remote Desktop File. Cuando el navegador se lo pida, guarde el archivo .rdp.Cuando termine, elija Close para cerrar el cuadro de diálogo Connect To Your Instance.

b. Desplácese hasta el directorio de descargas, haga clic con el botón derecho en el archivo .rdpy, a continuación, elija Edit. En la pestaña Local Resources, en Local devices and resources,elija More. Elija Drives para que sus unidades locales estén disponibles para su instancia. Acontinuación, elija OK.

c. Elija Connect para conectarse a su instancia. Es posible que aparezca una advertencia en la quese indique que se desconoce el publicador de la conexión remota.

d. Inicie sesión en la instancia cuando se le pida con la cuenta Administrator y la contraseña deadministrador predeterminadas que anotó o copió anteriormente.

A veces, al copiar y pegar el contenido se dañan los datos. Si aparece el error "Password Failed"al iniciar sesión, pruebe a especificar la contraseña manualmente. Para obtener más información,consulte Connecting to Your Windows Instance Using RDP y Troubleshooting Windows Instancesen Amazon EC2 User Guide for Windows Instances.

4. Copie el programa y los ensamblados de AWS (AWSSDK.Core.dll y AWSSDK.S3.dll) de su unidadlocal en la instancia.

5. Ejecute el programa y verifique que esto se realiza correctamente mediante las credencialesproporcionadas por el rol de IAM.

118

Page 123: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de claves de AWS KMS con la

AmazonS3EncryptionClient en el AWS SDK for .NET

Retrieving (GET) an object

Uso de claves de AWS KMS con laAmazonS3EncryptionClient en el AWS SDKfor .NET

La clase AmazonS3EncryptionClient implementa la misma interfaz que el AmazonS3Client estándar.Esto significa que es fácil cambiar a la clase AmazonS3EncryptionClient. De hecho, su código deaplicación no tendrá en cuenta el cifrado y descifrado que se produce automáticamente en el cliente.

Puede utilizar una clave de AWS KMS como clave maestra cuando se utiliza la claseAmazonS3EncryptionClient para el cifrado en el cliente. Lo único que tiene que hacer es crear unobjeto EncryptionMaterials que contiene un ID de clave de KMS. A continuación, transfiera el objetoEncryptionMaterials al constructor de la AmazonS3EncryptionClient.

La ventaja principal de utilizar una clave de AWS KMS como clave maestra es que no necesitaalmacenar y administrar sus propias claves maestras. Lo realiza AWS. Una segunda ventaja es quehace que la clase AmazonS3EncryptionClient de AWS SDK for .NET sea interoperable con la claseAmazonS3EncryptionClient de AWS SDK for Java. Esto significa que puede cifrar con AWS SDK forJava y descifrar con AWS SDK for .NET y viceversa.

Note

La AmazonS3EncryptionClient de AWS SDK for .NET admite las claves maestras deKMS solo cuando se ejecuta en modo de metadatos. El modo del archivo de instruccionesAmazonS3EncryptionClient de AWS SDK for .NET sigue siendo incompatible con elAmazonS3EncryptionClient de AWS SDK for Java.

Para obtener información adicional sobre el cifrado del cliente con la clase AmazonS3EncryptionClient ysobre cómo funciona el cifrado de sobres, consulte Client Side Data Encryption with AWS SDK for .NETand Amazon S3.

El ejemplo siguiente muestra cómo utilizar las claves de AWS KMS con la clase deAmazonS3EncryptionClient. El proyecto debe hacer referencia a la versión más reciente del paqueteNuGet AWSSDK.KeyManagementService para utilizar esta característica.

using System;using System.Collections.Specialized;using System.Collections.Generic;using System.Configuration;using System.IO;using System.Linq;using System.Net;using System.Security.Cryptography;

using Amazon;using Amazon.S3;using Amazon.S3.Model;using Amazon.S3.Encryption;using Amazon.KeyManagementService;using Amazon.KeyManagementService.Model;

namespace S3Sample1{ class S3Sample {

119

Page 124: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de recursos de sistema de nombres

de dominio (DNS) utilizando Amazon Route 53

public static void Main(string[] args) { string kmsKeyID = null; using (var kmsClient = new AmazonKeyManagementServiceClient()) { var response = kmsClient.CreateKey(new CreateKeyRequest()); kmsKeyID = response.KeyMetadata.KeyId;

var keyMetadata = response.KeyMetadata; // An object that contains information about the CMK created by this operation. var bucketName = "<s3bucket>"; var objectKey = "key";

var kmsEncryptionMaterials = new EncryptionMaterials(kmsKeyID); // CryptoStorageMode.ObjectMetadata is required for KMS EncryptionMaterials var config = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata };

using (var s3Client = new AmazonS3EncryptionClient(config, kmsEncryptionMaterials)) { // encrypt and put object var putRequest = new PutObjectRequest { BucketName = bucketName, Key = objectKey, ContentBody = "object content" }; s3Client.PutObject(putRequest);

// get object and decrypt var getRequest = new GetObjectRequest { BucketName = bucketName, Key = objectKey };

using (var getResponse = s3Client.GetObject(getRequest)) using (var stream = getResponse.ResponseStream) using (var reader = new StreamReader(stream)) { Console.WriteLine(reader.ReadToEnd()); } } }

Console.WriteLine("Press any key to continue..."); Console.ReadKey(); }

}

}

Administración de recursos de sistema de nombresde dominio (DNS) utilizando Amazon Route 53

El AWS SDK for .NET es compatible con Amazon Route 53, un servicio web de sistema de nombres dedominio (DNS) que proporciona enrutamiento seguro y fiable a su infraestructura y que utiliza productos

120

Page 125: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de recursos de sistema de nombres

de dominio (DNS) utilizando Amazon Route 53

de Amazon Web Services (AWS) como Amazon Elastic Compute Cloud (Amazon EC2), Elastic LoadBalancing o Amazon Simple Storage Service (Amazon S3). También puede utilizar Route 53 para enrutarlos usuarios hacia su infraestructura fuera de AWS. En este tema se describe cómo utilizar el AWS SDKfor .NET para crear una zona hospedada de Route 53 y añadir un nuevo conjunto de registros de recursosa dicha zona.

Note

En este tema se parte de la base de que está familiarizado con el uso de Route 53 y que ya hainstalado el AWS SDK for .NET. Para obtener más información sobre Route 53, consulte la Guíapara desarrolladores de Amazon Route 53. Para obtener más información acerca de cómo instalarel AWS SDK for .NET, consulte Getting Started with the AWS SDK for .NET (p. 3).

El procedimiento básico es el siguiente.

Para crear una zona hospedada y actualizar sus conjuntos de registros

1. Cree una zona hospedada.2. Cree un lote de cambios que contenta uno o más conjuntos de registros e instrucciones sobre qué

acción realizar para cada conjunto.3. Envíe una solicitud de cambios a la zona hospedada que contiene el lote de cambios.4. Monitoree el cambio para verificar que se ha completado.

El ejemplo es una aplicación de consola simple que muestra cómo utilizar el AWS SDK for .NET paraimplementar este procedimiento para un conjunto de registros básico.

Para ejecutar este ejemplo

1. En el menú File de Visual Studio, elija New y, a continuación, Project.2. Elija la plantilla AWS Empty Project y especifique el nombre y la ubicación del proyecto.3. Especifique el perfil de credenciales predeterminado y la región AWS de la aplicación, que se añadirán

al archivo App.config del proyecto. En este ejemplo se presupone que se ha definido la región USEast (N. Virginia) y el perfil es el predeterminado. Para obtener más información sobre los perfiles,consulte Configuring AWS Credentials (p. 11).

4. Abra program.cs y reemplace las declaraciones using y el código en Main por el códigocorrespondiente del siguiente ejemplo. Si utiliza el perfil de credenciales y la región predeterminadas,puede compilar y ejecutar la aplicación tal cual. De lo contrario, deberá proporcionar un perfil y unaregión adecuados, tal como se indica en las notas que siguen al ejemplo.

using System;using System.Collections.Generic;using System.Threading;

using Amazon;using Amazon.Route53;using Amazon.Route53.Model;

namespace Route53_RecordSet{ //Create a hosted zone and add a basic record set to it class recordset { public static void Main(string[] args) { string domainName = "www.example.org";

121

Page 126: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de recursos de sistema de nombres

de dominio (DNS) utilizando Amazon Route 53

//[1] Create an Amazon Route 53 client object var route53Client = new AmazonRoute53Client();

//[2] Create a hosted zone var zoneRequest = new CreateHostedZoneRequest() { Name = domainName, CallerReference = "my_change_request" };

var zoneResponse = route53Client.CreateHostedZone(zoneRequest);

//[3] Create a resource record set change batch var recordSet = new ResourceRecordSet() { Name = domainName, TTL = 60, Type = RRType.A, ResourceRecords = new List<ResourceRecord> { new ResourceRecord { Value = "192.0.2.235" } } };

var change1 = new Change() { ResourceRecordSet = recordSet, Action = ChangeAction.CREATE };

var changeBatch = new ChangeBatch() { Changes = new List<Change> { change1 } };

//[4] Update the zone's resource record sets var recordsetRequest = new ChangeResourceRecordSetsRequest() { HostedZoneId = zoneResponse.HostedZone.Id, ChangeBatch = changeBatch };

var recordsetResponse = route53Client.ChangeResourceRecordSets(recordsetRequest);

//[5] Monitor the change status var changeRequest = new GetChangeRequest() { Id = recordsetResponse.ChangeInfo.Id };

while (ChangeStatus.PENDING == route53Client.GetChange(changeRequest).ChangeInfo.Status) { Console.WriteLine("Change is pending."); Thread.Sleep(15000); }

Console.WriteLine("Change is complete."); Console.ReadKey(); } }}

Los números de las siguientes secciones están vinculados a los comentarios del ejemplo anterior.

122

Page 127: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de recursos de sistema de nombres

de dominio (DNS) utilizando Amazon Route 53

[1] Crear un objeto de cliente

El objeto debe incluir la siguiente información:Una región de AWS

Al llamar al método de un cliente, la solicitud HTTP subyacente se envía a este punto de enlace.Un perfil de credenciales

El perfil debe otorgar permisos para las acciones que pretende utilizar, en este caso, las accionesde Route 53. Los intentos de llamar a las acciones que no disponen de permisos generaránerrores. Para obtener más información, consulte Configuring AWS Credentials (p. 11).

La clase AmazonRoute53Client admite un conjunto de métodos públicos que utiliza para llamar a lasacciones de Amazon Route 53. Puede crear el objeto del cliente creando una instancia nueva de laclase AmazonRoute53Client. Hay múltiples constructores.

[2] Crear una zona hospedada

Una zona hospedada funciona igual que un archivo de zonas DNS tradicional. Representa un grupode conjuntos de registros de recursos que se administran conjuntamente bajo un único nombre dedominio.

Para crear una zona alojada1. Cree un objeto CreateHostedZoneRequest y especifique los siguientes parámetros de la solicitud.

Hay dos parámetros opcionales que no se utilizan en este ejemplo.Name

(Obligatorio) Es el nombre del dominio que desea registrar, en este caso, www.example.com.Este nombre de dominio se ha concebido solo para ejemplos. No se puede registrar con unregistrador de nombres de dominio, pero puede usarlo para crear una zona hospedada con finesformativos.

CallerReference

(Obligatorio) Es una cadena arbitraria definida por el usuario que se utiliza como ID de la solicitudy se puede utilizar para volver a realizar solicitudes que han fallado. Si ejecuta esta aplicaciónvarias veces, deberá cambiar el valor de CallerReference.

1. Transfiera el objeto CreateHostedZoneRequest al método CreateHostedZone del objeto delcliente. El método devuelve un objeto CreateHostedZoneResponse que contiene información sobrela solicitud, incluida la propiedad HostedZone.Id que identifica la zona.

[3] Crear un lote de cambios del conjunto de registros de recursos

Una zona hospedada puede tener múltiples conjuntos de registros de recursos. Cada conjuntoespecifica cómo debe enrutarse un subconjunto del tráfico del dominio, como las solicitudes de correoelectrónico. Puede actualizar los conjuntos de registros de recursos de una zona con una únicasolicitud. El primer paso es agrupar todas las actualizaciones en un objeto ChangeBatch. Este ejemplosolo especifica una actualización, añadiendo un conjunto de registros de recursos básico a la zona,pero un objeto ChangeBatch puede incluir actualizaciones para múltiples conjuntos de registros derecursos.

Para crear un objeto ChangeBatch1. Cree un objeto ResourceRecordSet para cada conjunto de registros de recursos que desee

actualizar. El grupo de propiedades que especifique dependerá del tipo de conjunto de registros derecursos. Para obtener una descripción completa de las propiedades utilizadas por los diferentesconjuntos de registros de recursos, consulte Valores que se especifican al crear o editar conjuntosde registros de recursos de Amazon Route 53. El objeto ResourceRecordSet de ejemplorepresenta un conjunto de registros de recursos básico y especifica las siguientes propiedadesobligatorias.

123

Page 128: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideAdministración de recursos de sistema de nombres

de dominio (DNS) utilizando Amazon Route 53

Name

Es el nombre del dominio o del subdominio, en este caso, www.example.com.TTL

Se trata de la cantidad de tiempo, en segundos, que los servicios de resolución recursiva denombres DNS deberían almacenar en caché la información sobre este conjunto de registros derecursos. En este ejemplo, 60 segundos.

Type

Se trata del tipo de registro de DNS. En este ejemplo es A. Para obtener una lista completa,consulte Tipos de registros de recursos de DNS admitidos.

ResourceRecords

Se trata de una lista de uno o más objetos ResourceRecord. Cada uno de ellos contiene unvalor de registro de DNS que depende del tipo de registro de DNS. Para un tipo de registro A, elvalor de registro es una dirección IPv4 que, en este ejemplo, se ha definido como una direcciónde ejemplo estándar: 192.0.2.235.

2. Cree un objeto Change para cada conjunto de registros de recursos y defina las siguientespropiedades.ResourceRecordSet

El objeto ResourceRecordSet que creó en el paso anterior.Action

La acción a realizar para este conjunto de registros de recursos: CREATE, DELETE o UPSERT.Para obtener más información sobre estas acciones, consulte Elements. Este ejemplo crea unconjunto de registros de recursos nuevo en la zona hospedada, por lo que Action se definecomo CREATE.

3. Cree un objeto ChangeBatch y defina su propiedad Changes en función de la lista de objetosChange creada en el paso anterior.

[4] Actualizar los conjuntos de registros de recursos de la zona

Para actualizar los conjuntos de registros de recursos, transfiera el objeto ChangeBatch a la zonahospedada, de la siguiente manera.

Para actualizar los conjuntos de registros de recursos de una zona hospedada1. Cree un objeto ChangeResourceRecordSetsRequest con las siguientes opciones de la propiedad.

HostedZoneId

Se trata del ID de la zona hospedada que el ejemplo fija en el ID devuelto en el objetoCreateHostedZoneResponse. Para obtener el ID de una zona hospedada existente, llame aListHostedZones.

ChangeBatch

Es un objeto ChangeBatch que incluye las actualizaciones.2. Transfiera el objeto ChangeResourceRecordSetsRequest al método

ChangeResourceRecordSets del objeto del cliente. Este devuelve un objetoChangeResourceRecordSetsResponse que contiene el ID de la solicitud que puede utilizar paramonitorear el progreso de la solicitud.

[5] Monitorear el estado de la actualización

Normalmente, las actualizaciones de conjuntos de registros de recursos tardan varios minutos enpropagarse por el sistema. Puede monitorear el progreso de la actualización y verificar que se hayacompletado, de la siguiente manera.

124

Page 129: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de almacenamiento de Internetde Amazon Simple Storage Service

Para monitorear el estado de la actualización1. Cree un objeto GetChangeRequest y defina su propiedad Id en el ID de la solicitud devuelto por

ChangeResourceRecordSets.2. Utilice un bucle de espera para llamar de forma periódica al método GetChange del objeto del

cliente. GetChange devuelve PENDING mientras la actualización está en progreso y INSYNC trascompletarse la actualización. Puede utilizar el mismo objeto GetChangeRequest para todas lasllamadas de método.

Uso de almacenamiento de Internet de AmazonSimple Storage Service

El AWS SDK for .NET admite Amazon Simple Storage Service (Amazon S3), que es un servicio dealmacenamiento para Internet. Está diseñado para facilitar a los desarrolladores recursos de computaciónescalables basados en Web. Para obtener más información, consulte Amazon S3.

En los siguientes enlaces se proporcionan ejemplos de programación de Amazon S3 con el AWS SDKfor .NET:

• Uso del AWS SDK para .NET para la programación de Amazon S3• Realización de solicitudes con las credenciales de usuario de IAM o una cuenta de AWS• Realización de solicitudes con las credenciales temporales de usuario de IAM• Realización de solicitudes con credenciales temporales de usuario federado• Administración de las ACL• Creación de un bucket• Carga de un objeto• Carga multiparte con la API de alto nivel• Carga multiparte con la API de bajo nivel• Listas de objetos• Lista de claves• Obtención de un objeto• Copia de un objeto• Copia de un objeto con la API de carga multiparte• Eliminación de un objeto• Eliminación de varios objetos• Restauración de un objeto• Configuración de un bucket para las notificaciones• Administración del ciclo de vida de un objeto• Generación de una URL de objeto prefirmada• Administración de sitios web• Habilitación del uso compartido de recursos entre orígenes (CORS)• Especificación de cifrado del lado del servidor• Especificación de cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente

125

Page 130: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEnvío y recepción de notificaciones desde lanube con Amazon Simple Notification Service

Envío y recepción de notificaciones desde la nubecon Amazon Simple Notification Service

El AWS SDK for .NET es compatible con Amazon Simple Notification Service (Amazon SNS), un servicioweb que permite a las aplicaciones, usuarios finales y dispositivos enviar y recibir al instante notificacionesdesde la nube. Para obtener más información, consulte Amazon SNS.

En el siguiente ejemplo se muestra cómo usar las API de bajo nivel para elaborar una lista de los temasaccesibles en Amazon SNS. En este ejemplo se utiliza el constructor de cliente predeterminado, queconstruye AmazonSimpleNotificationServiceClient con las credenciales cargadas desde la configuraciónpredeterminada de la aplicación y, si no lo logra, desde el servicio de perfil de instancia en una instanciaEC2.

// using Amazon.SimpleNotificationService;// using Amazon.SimpleNotificationService.Model;

var client = new AmazonSimpleNotificationServiceClient();var request = new ListTopicsRequest();var response = new ListTopicsResponse();

do{ response = client.ListTopics(request);

foreach (var topic in response.Topics) { Console.WriteLine("Topic: {0}", topic.TopicArn);

var subs = client.ListSubscriptionsByTopic( new ListSubscriptionsByTopicRequest { TopicArn = topic.TopicArn });

var ss = subs.Subscriptions;

if (ss.Any()) { Console.WriteLine(" Subscriptions:");

foreach (var sub in ss) { Console.WriteLine(" {0}", sub.SubscriptionArn); } }

var attrs = client.GetTopicAttributes( new GetTopicAttributesRequest { TopicArn = topic.TopicArn }).Attributes;

if (attrs.Any()) { Console.WriteLine(" Attributes:");

foreach (var attr in attrs) { Console.WriteLine(" {0} = {1}", attr.Key, attr.Value); } }

126

Page 131: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideMensajería utilizando Amazon SQS

Console.WriteLine(); }

request.NextToken = response.NextToken;

} while (!string.IsNullOrEmpty(response.NextToken));

Mensajería utilizando Amazon SQSEl AWS SDK para .NET es compatible con Amazon SQS, un servicio de colas de mensaje que gestionamensajes o flujos de trabajo entre componentes en un sistema. Para obtener más información, consulteAmazon SQS.

En los siguientes ejemplos se muestra cómo usar el AWS SDK for .NET para crear y usar colas deAmazon SQS.

El código de muestra se escribe en C#, pero puede usar el AWS SDK for .NET con cualquier lenguajecompatible. El AWS SDK for .NET instala un conjunto de plantillas del proyecto C#. Así pues, el modo mássencillo de comenzar con este proyecto es abrir Visual Studio y, a continuación, elegir File, New Project,AWS Sample Projects, App Services y AWS SQS Sample.

Tareas previas necesarias

Antes de empezar, asegúrese de haber creado una cuenta de AWS y configurado las credenciales deAWS. Para obtener más información, consulte Getting Started with the AWS SDK for .NET (p. 3).

Para obtener información acerca de la referencia de la API relacionada, consulte Amazon.SQS,Amazon.SQS.Model y Amazon.SQS.Util en la AWS SDK for .NET Reference.

Temas• Creación de un cliente Amazon SQS (p. 127)• Creación de una cola de Amazon SQS (p. 128)• Constructing Amazon SQS Queue URLs (p. 129)• Envío de un mensaje a Amazon SQS (p. 129)• Envío de un lote de mensajes de Amazon SQS (p. 130)• Recepción de un mensaje de una cola de Amazon SQS (p. 131)• Eliminación de un mensaje de una cola de Amazon SQS (p. 132)• Habilitar el sondeo largo en Amazon SQS (p. 132)• Uso de colas de Amazon SQS (p. 134)• Uso de colas de mensajes fallidos de Amazon SQS (p. 135)

Creación de un cliente Amazon SQSNecesita un cliente Amazon SQS para poder crear y utilizar una cola de Amazon SQS. Antes de configurarel cliente, debería crear un archivo App.Config para especificar sus credenciales de AWS.

Debe especificar las credenciales haciendo referencia al perfil correspondiente en la secciónappSettings del archivo.

En el siguiente ejemplo se especifica un perfil llamado my_profile. Para obtener más información acercade las credenciales y los perfiles, consulte Configuring Your AWS SDK for .NET Application (p. 8).

<?xml version="1.0"?>

127

Page 132: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideCreación de una cola de Amazon SQS

<configuration> <configSections> <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/> </configSections> <aws profileName="my_profile"/> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup></configuration>

Después de crear el archivo, podrá crear e inicializar el cliente Amazon SQS.

Para crear e inicializar un cliente Amazon SQS

Ahora puede utilizar el cliente para crear una cola Amazon SQS. Consulte la sección Creating an AmazonSQS Queue (p. 128) para obtener información acerca de cómo crear una cola.

1. Cree e inicialice una instancia AmazonSQSConfig y, a continuación, especifique la propiedadServiceURL con el protocolo y el punto de enlace de servicio, tal como se indica a continuación.

var sqsConfig = new AmazonSQSConfig();

sqsConfig.ServiceURL = "http://sqs.us-west-2.amazonaws.com";

2. Use la instancia AmazonSQSConfig para crear e inicializar una instancia AmazonSQSClient, tal comose indica a continuación.

var sqsClient = new AmazonSQSClient(sqsConfig);

Creación de una cola de Amazon SQSLa creación de una cola de Amazon SQS es una tarea administrativa que puede realizar mediante laconsola de administración de SQS. Sin embargo, también puede usar el AWS SDK for .NET para crearmediante programación una cola de Amazon SQS.

Para crear una cola de Amazon SQS

Para obtener información acerca de cómo funcionan las colas en Amazon SQS, consulte Cómo funcionanlas colas de SQS.

Para obtener información acerca de su URL de cola, consulte Constructing Amazon SQS QueueURLs (p. 129).

1. Cree e inicialice una instancia CreateQueueRequest. Proporcione el nombre de la cola y especifiqueun tiempo de espera de visibilidad para sus mensajes de la cola, de la manera siguiente.

var createQueueRequest = new CreateQueueRequest();

createQueueRequest.QueueName = "MySQSQueue";var attrs = new Dictionary<string, string>();attrs.Add(QueueAttributeName.VisibilityTimeout, "10");createQueueRequest.Attributes = attrs;

El nombre de la cola debe estar formado solo por caracteres alfanuméricos, guiones y guiones bajos.

Cualquier mensaje de la cola permanece en esta a menos que se supere el tiempo de espera devisibilidad especificado. El tiempo de espera de visibilidad predeterminado de una cola es de 30segundos. Para obtener más información acerca de los tiempos de espera de visibilidad, consulte

128

Page 133: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideConstructing Amazon SQS Queue URLs

Tiempo de espera de visibilidad. Para obtener más información acerca de los diferentes atributos decola que puede establecer, consulte SetQueueAttributes.

2. Tras crear la solicitud, pásela como parámetro al método CreateQueue. El método devuelve un objetoCreateQueueResponse, de la manera siguiente.

var createQueueResponse = sqsClient.CreateQueue(createQueueRequest);

Constructing Amazon SQS Queue URLsNecesita una URL de cola para enviar, recibir y eliminar mensajes de cola. Puede obtener su URL de colamediante el método GetQueueUrl.

var client = new AmazonSQSClient();var request = new GetQueueUrlRequest{ QueueName = "MyTestQueue", QueueOwnerAWSAccountId = "80398EXAMPLE"};var response = client.GetQueueUrl(request);Console.WriteLine("Queue URL: " + response.QueueUrl);

Para buscar el número de cuenta de AWS, vaya a Credenciales de seguridad. El número de cuenta seencuentra en Account Number en la parte superior derecha de la página.

Para obtener información acerca de cómo enviar un mensaje a una cola, consulte Sending an AmazonSQS Message (p. 129).

Para obtener información acerca de cómo recibir mensajes de una cola, consulte Receiving a Messagefrom an Amazon SQS Queue (p. 131).

Para obtener información acerca de cómo eliminar mensajes de una cola, consulte Deleting a Messagefrom an Amazon SQS Queue (p. 132).

Envío de un mensaje a Amazon SQSPuede usar el AWS SDK for .NET para enviar un mensaje a una cola de Amazon SQS.

Important

Debido a las características de distribución de la cola, Amazon SQS no puede garantizar que vayaa recibir los mensajes en el mismo orden en que se envían. Si necesita mantener el orden de losmensajes, coloque información secuencial en cada mensaje para poder reordenar los mensajesen cuanto los reciba.

Para enviar un mensaje a una cola de Amazon SQS

Para obtener información acerca de cómo eliminar mensajes de la cola, consulte Deleting a Message froman Amazon SQS Queue (p. 132).

Para obtener información acerca de cómo recibir mensajes de la cola, consulte Receiving a Message froman Amazon SQS Queue (p. 131).

1. Cree e inicialice una instancia SendMessageRequest. Especifique el nombre de la cola y el mensajeque desea enviar, del modo siguiente.

sendMessageRequest.QueueUrl = myQueueURL; sendMessageRequest.MessageBody = "{YOUR_QUEUE_MESSAGE}";

129

Page 134: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEnvío de un lote de mensajes de Amazon SQS

Para obtener más información acerca de su URL de cola, consulte Constructing Amazon SQS QueueURLs (p. 129).

Cada mensaje de cola debe componerse solo de caracteres Unicode y puede tener un tamaño dehasta 64 KB. Para obtener más información acerca de los mensajes de cola, consulte SendMessageen la Amazon SQS API Reference.

2. Tras crear la solicitud, transfiérala como parámetro al método SendMessage. El método devolverá unobjeto SendMessageResponse, como el que sigue.

var sendMessageResponse = sqsClient.SendMessage(sendMessageRequest);

El mensaje enviado se mantendrá en la cola hasta que se supere el tiempo de espera de visibilidado hasta que se elimine de la cola. Para obtener más información acerca de los tiempos de espera devisibilidad, consulte Tiempo de espera de visibilidad.

Envío de un lote de mensajes de Amazon SQSPuede usar el AWS SDK for .NET para enviar mensajes de lote a una cola de Amazon SQS. El métodoSendMessageBatch envía hasta 10 mensajes a la cola especificada. Esta es una versión de lote deSendMessage.

Con una cola FIFO, varios mensajes de un solo lote se ponen en cola en el orden en que se envían.

Para obtener más información acerca de cómo enviar mensajes de lote, consulte SendMessageBatch en laAmazon SQS API Reference.

Para enviar mensajes de lote a una cola de Amazon SQS

1. Cree una instancia AmazonSQSClient e inicialice un objeto SendMessageBatchRequest. Especifiqueel nombre de la cola y el mensaje que desea enviar, del modo siguiente.

AmazonSQSClient client = new AmazonSQSClient();var sendMessageBatchRequest = new SendMessageBatchRequest{ Entries = new List<SendMessageBatchRequestEntry> { new SendMessageBatchRequestEntry("message1", "FirstMessageContent"), new SendMessageBatchRequestEntry("message2", "SecondMessageContent"), new SendMessageBatchRequestEntry("message3", "ThirdMessageContent") }, QueueUrl = "SQS_QUEUE_URL"};

Para obtener más información acerca de su URL de cola, consulte Constructing Amazon SQS QueueURLs (p. 129).

Cada mensaje de cola debe componerse solo de caracteres Unicode y puede tener un tamaño dehasta 64 KB. Para obtener más información acerca de los mensajes de cola, consulte SendMessageen la Amazon SQS API Reference.

2. Tras crear la solicitud, pásela como parámetro al método SendMessageBatch. El método devuelve unobjeto SendMessageBatchResponse, que contiene el ID exclusivo de cada mensaje y el contenido decada mensaje enviado correctamente. También devuelve el ID de mensaje, el contenido del mismo yuna marca de error del remitente si el mensaje no se envió.

SendMessageBatchResponse response = client.SendMessageBatch(sendMessageBatchRequest);Console.WriteLine("Messages successfully sent:");

130

Page 135: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideRecepción de un mensaje de una cola de Amazon SQS

foreach (var success in response.Successful){ Console.WriteLine(" Message id : {0}", success.MessageId); Console.WriteLine(" Message content MD5 : {0}", success.MD5OfMessageBody);}

Console.WriteLine("Messages failed to send:");foreach (var failed in response.Failed){ Console.WriteLine(" Message id : {0}", failed.Id); Console.WriteLine(" Message content : {0}", failed.Message); Console.WriteLine(" Sender's fault? : {0}", failed.SenderFault);}

Recepción de un mensaje de una cola de AmazonSQSPuede usar el AWS SDK for .NET para recibir mensajes de una cola de Amazon SQS.

Para recibir un mensaje de una cola de Amazon SQS

Para obtener información acerca de cómo enviar un mensaje a su cola, consulte Sending an Amazon SQSMessage (p. 129).

Para obtener más información acerca de cómo eliminar un mensaje de la cola, consulte Deleting aMessage from an Amazon SQS Queue (p. 132).

1. Cree e inicialice una instancia ReceiveMessageRequest. Especifique la URL de cola de la que desearecibir un mensaje, de la siguiente manera.

var receiveMessageRequest = new ReceiveMessageRequest();

receiveMessageRequest.QueueUrl = myQueueURL;

Para obtener más información acerca de su URL de cola, consulte Your Amazon SQS QueueURL (p. 129).

2. Transfiera el objeto de la solicitud como parámetro al método ReceiveMessage, de la siguientemanera.

var receiveMessageResponse = sqsClient.ReceiveMessage(receiveMessageRequest);

El método devuelve una instancia ReceiveMessageResponse que contiene la lista de mensajes quese incluye en la cola.

3. La propiedad ReceiveMessageResponse.ReceiveMessageResult contiene un objetoReceiveMessageResponse que incluye una lista de los mensajes recibidos. Itere esta lista y llame almétodo ProcessMessage para procesar cada mensaje.

foreach (var message in result.Messages){ ProcessMessage(message); // Go to a method to process messages.}

El método ProcessMessage puede usar la propiedad ReceiptHandle para obtener un identificadorde recepción para el mensaje. Puede usar este identificador de recepción para cambiar el tiempode espera de visibilidad del mensaje o para eliminar el mensaje de la cola. Para obtener más

131

Page 136: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEliminación de un mensaje de una cola de Amazon SQS

información acerca de cómo cambiar el tiempo de espera de visibilidad de un mensaje, consulteChangeMessageVisibility.

Eliminación de un mensaje de una cola de AmazonSQSPuede usar el AWS SDK for .NET para eliminar mensajes de una cola de Amazon SQS.

Para eliminar un mensaje de una cola de Amazon SQS

Para obtener información acerca de cómo enviar un mensaje a una cola, consulte Sending an AmazonSQS Message (p. 129).

Para obtener información acerca de cómo recibir mensajes de una cola, consulte Receiving a Messagefrom an Amazon SQS Queue (p. 131).

1. Cree e inicialice un objeto DeleteMessageRequest. Especifique la cola de Amazon SQS de la quequiere eliminar un mensaje y el identificador de recepción del mensaje a borrar de la siguiente manera.

var deleteMessageRequest = new DeleteMessageRequest();

deleteMessageRequest.QueueUrl = queueUrl;deleteMessageRequest.ReceiptHandle = receiptHandle;

2. Transfiera el objeto de la solicitud como parámetro al método DeleteMessage. El método devuelve unobjeto DeleteMessageResponse, de la manera siguiente.

var response = sqsClient.DeleteMessage(deleteMessageRequest);

Al llamar a DeleteMessage sin condiciones, se elimina el mensaje de la cola, sin importar laconfiguración del tiempo de espera de visibilidad. Para obtener más información acerca de los tiemposde espera de visibilidad, consulte Tiempo de espera de visibilidad.

Habilitar el sondeo largo en Amazon SQSEl sondeo largo reduce la cantidad de respuestas vacías al permitir que Amazon SQS espere duranteun tiempo especificado hasta que haya un mensaje disponible en la cola antes de enviar una respuesta.Asimismo, el sondeo largo elimina las falsas respuestas vacías al consultar todos los servidoresen lugar de una muestra de ellos. Para habilitar el sondeo largo, debe especificar un tiempo deespera diferente de cero para los mensajes recibidos. Puede hacerlo estableciendo el parámetroReceiveMessageWaitTimeSeconds de una cola o estableciendo el parámetro WaitTimeSecondsen un mensaje al recibirse este. En este ejemplo de .NET puede ver cómo habilitar el sondeo largo enAmazon SQS para una cola recién creada o existente, o bien una vez recibido un mensaje.

En estos ejemplos se usan los siguientes métodos de la clase AmazonSQSClient para habilitar el sondeolargo:

• CreateQueue• SetQueueAttributes• ReceiveMessage

Para obtener más información acerca del sondeo largo, consulte Sondeo largo de Amazon SQS en laAmazon SQS Developer Guide.

132

Page 137: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideHabilitar el sondeo largo en Amazon SQS

Habilitar el sondeo largo al crear una colaCree un objeto AmazonSQSClient. Cree un objeto CreateQueueRequest que contenga laspropiedades necesarias para crear una cola, incluido un valor distinto de cero para la propiedadReceiveMessageWaitTimeSeconds.

Llame al método CreateQueue. El sondeo largo se habilita entonces para la cola.

AmazonSQSClient client = new AmazonSQSClient();var request = new CreateQueueRequest{ QueueName = "SQS_QUEUE_NAME", Attributes = new Dictionary<string, string> { { "ReceiveMessageWaitTimeSeconds", "20"} }};var response = client.CreateQueue(request);Console.WriteLine("Created a queue with URL : {0}", response.QueueUrl);

Habilitar el sondeo largo en una cola existenteCree un objeto AmazonSQSClient. Cree un objeto SetQueueAttributesRequest que contenga laspropiedades necesarias para establecer los atributos de la cola, incluido un valor distinto de cero parala propiedad ReceiveMessageWaitTimeSeconds y la dirección URL de la cola. Llame al métodoSetQueueAttributes. El sondeo largo se habilita entonces para la cola.

AmazonSQSClient client = new AmazonSQSClient();

var request = new SetQueueAttributesRequest{ Attributes = new Dictionary<string, string> { { "ReceiveMessageWaitTimeSeconds", "20"} }, QueueUrl = "SQS_QUEUE_URL"};

var response = client.SetQueueAttributes(request);

Recibir un mensajeCree un objeto AmazonSQSClient. Cree un objeto ReceiveMessageRequest que contenga laspropiedades necesarias para recibir un mensaje, incluido un valor distinto de cero para el parámetroWaitTimeSeconds y la dirección URL de la cola. Llame al método ReceiveMessage.

public void OnMessageReceipt(){ AmazonSQSClient client = new AmazonSQSClient();

var request = new ReceiveMessageRequest { AttributeNames = { "SentTimestamp" }, MaxNumberOfMessages = 1, MessageAttributeNames = { "All" }, QueueUrl = "SQS_QUEUE_URL", WaitTimeSeconds = 20 };

133

Page 138: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de colas de Amazon SQS

var response = client.ReceiveMessage(request);}

Uso de colas de Amazon SQSAmazon SQS ofrece el tipo estándar como la cola predeterminada. Una cola estándar le permite tener unnúmero casi ilimitado de transacciones por segundo. Las colas estándar admiten la entrega de mensajesal menos una vez. Sin embargo, ocasionalmente se puede entregar más de una copia de un mensaje deforma desordenada. Las colas estándar proporcionan un protocolo de ordenación del máximo esfuerzo, loque garantiza que los mensajes se entreguen en términos generales en el mismo orden en que se envían.

Puede usar colas de mensajes estándar en muchos escenarios, siempre que su aplicación pueda procesarlos mensajes que llegan más de una vez y fuera de orden.

En este ejemplo de código se muestra cómo usar colas mediante estos métodos de la clase :code:<problematic>`</problematic>AmazonSQSClient`:

• ListQueues: obtiene una lista de sus colas de mensajes• GetQueueUrl: obtiene la dirección URL de una cola determinada• DeleteQueue: elimina una cola

Para obtener más información acerca de los mensajes de Amazon SQS, consulte Cómo funcionan lascolas de SQS en la Amazon SQS Developer Guide.

Listar sus colasCree un objeto ListQueuesRequest que contenga las propiedades necesarias para listar sus colas, quede forma predeterminada es un objeto vacío. Llame al método ListQueues con ListQueuesRequestcomo parámetro para recuperar la lista de colas. La instancia ListQueuesResponse devuelta por la llamadacontiene las direcciones URL de todas las colas.

AmazonSQSClient client = new AmazonSQSClient();

ListQueuesResponse response = client.ListQueues(new ListQueuesRequest());foreach (var queueUrl in response.QueueUrls){ Console.WriteLine(queueUrl);}

Obtener la URL de una colaCree un objeto GetQueueUrlRequest que contenga las propiedades necesarias para identificar su cola,que debe incluir el nombre de la cola cuya dirección URL desea. Llame al método GetQueueUrl medianteel objeto GetQueueUrlRequest como parámetro. La llamada devuelve un objeto GetQueueUrlResponseque contiene la dirección URL de la cola especificada.

AmazonSQSClient client = new AmazonSQSClient();

var request = new GetQueueUrlRequest{ QueueName = "SQS_QUEUE_NAME"};

GetQueueUrlResponse response = client.GetQueueUrl(request);Console.WriteLine("The SQS queue's URL is {1}", response.QueueUrl);

134

Page 139: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de colas de mensajes fallidos de Amazon SQS

Eliminar una colaCree un objeto DeleteQueueRequest que contenga la dirección URL de la cola que desea eliminar. Llameal método DeleteQueue con el objeto DeleteQueueRequest como parámetro.

AmazonSQSClient client = new AmazonSQSClient();

var request = new DeleteQueueRequest{ QueueUrl = "SQS_QUEUE_URL"};

client.DeleteQueue(request);

Uso de colas de mensajes fallidos de Amazon SQSEn este ejemplo se muestra cómo utilizar una cola para recibir y retener mensajes de otras colas que lascolas no pueden procesar.

Una cola de mensajes fallidos es una cola a la que otras colas (de origen) pueden enviar mensajes queno se han podido procesar correctamente. Puede apartar y aislar estos mensajes en la cola de mensajesfallidos para determinar por qué no se procesaron correctamente. Debe configurar individualmente cadacola de origen que envía mensajes a una cola de mensajes fallidos. Varias colas pueden dirigirse a unaúnica cola de mensajes fallidos.

En este ejemplo, un objeto AmazonSQSClient utiliza el método SetQueueAttributesRequest paraconfigurar una cola de origen para que utilice una cola de mensajes fallidos.

Para obtener más información sobre las colas de mensajes fallidos de Amazon SQS, consulte Uso decolas de mensajes fallidos de Amazon SQS en la Amazon SQS Developer Guide.

Configurar una cola de origenEn este código de ejemplo se presupone que ha creado una cola para que funcione como cola demensajes fallidos. Consulte la sección Creating an Amazon SQS Queue (p. 128) para obtenerinformación acerca de cómo crear una cola. Después de crear la cola de mensajes fallidos deberáconfigurar las demás colas para enrutar los mensajes no procesados en la cola de mensajes fallidos. Paraello, especifique una política de redireccionamiento que identifique la cola que debe utilizarse como colade mensajes fallidos y el número máximo de recepciones por mensaje individual antes de que se enrutenhacia la cola de mensajes fallidos.

Cree un objeto AmazonSQSClient para establecer los atributos de la cola. Cree un objetoSetQueueAttributesRequest que incluya las propiedades necesarias para actualizar atributos de cola,incluida la propiedad RedrivePolicy que especifica tanto el nombre de recurso de Amazon (ARN) de lacola de mensajes fallidos como el valor de maxReceiveCount. Especifique también la cola de origen dela URL que desea configurar. Llame al método SetQueueAttributes.

AmazonSQSClient client = new AmazonSQSClient();

var setQueueAttributeRequest = new SetQueueAttributesRequest{ Attributes = new Dictionary<string, string> { {"RedrivePolicy", @"{ ""deadLetterTargetArn"" : ""DEAD_LETTER_QUEUE_ARN"", ""maxReceiveCount"" : ""10""}" } }, QueueUrl = "SOURCE_QUEUE_URL"};

135

Page 140: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideMonitorización de sus recursos de

AWS utilizando Amazon CloudWatch

client.SetQueueAttributes(setQueueAttributeRequest)

Monitorización de sus recursos de AWS utilizandoAmazon CloudWatch

Amazon CloudWatch es un servicio web que monitorea los recursos y las aplicaciones de AWS queejecuta en AWS en tiempo real. Puede utilizar CloudWatch para recopilar y hacer un seguimientode métricas, que son las variables que puede medir en sus recursos y aplicaciones. Las alarmasde CloudWatch envían notificaciones o realizan cambios automáticamente en los recursos que estámonitoreando en función de las reglas definidas.

El código para estos ejemplos se escribe en C#, pero puede usar el AWS SDK for .NET con cualquierlenguaje compatible. Al instalar AWS Toolkit for Visual Studio, se instala un conjunto de plantillas deproyecto C#. El modo más sencillo de comenzar con este proyecto es abrir Visual Studio y, a continuación,elegir File, New Project, AWS Sample Projects, Deployment and Management y AWS CloudWatchExample.

Tareas previas necesarias

Antes de empezar, asegúrese de haber creado una cuenta de AWS y configurado las credenciales deAWS. Para obtener más información, consulte Getting Started with the AWS SDK for .NET (p. 3).

Temas• Descripción, creación y eliminación de alarmas en Amazon CloudWatch (p. 136)• Uso de alarmas en Amazon CloudWatch (p. 138)• Obtención de métricas de Amazon CloudWatch (p. 140)• Envío de eventos a eventos de Amazon CloudWatch (p. 141)• Uso de filtros de suscripción en Amazon CloudWatch Logs (p. 145)

Descripción, creación y eliminación de alarmas enAmazon CloudWatchEn este ejemplo de .NET puede ver cómo:

• Describir una alarma de CloudWatch• Crear una alarma de CloudWatch basándose en una métrica• Eliminar una alarma de CloudWatch

El escenarioUna alarma vigila una métrica individual durante un periodo de tiempo que usted especifica. Realiza unao varias acciones según el valor de la métrica con respecto a un umbral dado durante varios períodos detiempo. En los siguientes ejemplos se muestra cómo describir, crear y eliminar alarmas en CloudWatchutilizando los siguientes métodos de la clase AmazonCloudWatchClient:

• DescribeAlarms• PutMetricAlarm• DeleteAlarms

136

Page 141: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideDescripción, creación y eliminaciónde alarmas en Amazon CloudWatch

Para obtener más información acerca de las alarmas de CloudWatch, consulte Crear alarmas de AmazonCloudWatch en la Amazon CloudWatch User Guide.

Tareas previas necesariasPara configurar y ejecutar este ejemplo, primero debe:

• Prepararse para utilizar Amazon CloudWatch.• Instalar y configurar el AWS SDK for .NET.

Descripción de una alarmaCree una instancia AmazonCloudWatchClient y un objeto DescribeAlarmsRequest limitando lasalarmas devueltas a las que tienen el estado INSUFFICIENT_DATA. A continuación, llame al métodoDescribeAlarms del objeto AmazonCloudWatchClient.

using (var cloudWatch = new AmazonCloudWatchClient(RegionEndpoint.USWest2)){ var request = new DescribeAlarmsRequest(); request.StateValue = "INSUFFICIENT_DATA"; request.AlarmNames = new List<string> { "Alarm1", "Alarm2" }; do { var response = cloudWatch.DescribeAlarms(request); foreach(var alarm in response.MetricAlarms) { Console.WriteLine(alarm.AlarmName); } request.NextToken = response.NextToken; } while (request.NextToken != null);}

Creación de una alarma basándose en una métricaCree una instancia AmazonCloudWatchClient y un objeto PutMetricAlarmRequest para los parámetrosnecesarios para crear una alarma basada en una métrica, en este caso, el uso de CPU de una instanciaAmazon EC2.

Los parámetros restantes se definen para disparar la alarma cuando las métricas superan un umbral del 70por ciento.

A continuación, llame al método PutMetricAlarm del objeto AmazonCloudWatchClient.

var client = new AmazonCloudWatchClient(RegionEndpoint.USWest2);client.PutMetricAlarm( new PutMetricAlarmRequest { AlarmName = "Web_Server_CPU_Utilization", ComparisonOperator = ComparisonOperator.GreaterThanThreshold, EvaluationPeriods = 1, MetricName = "CPUUtilization", Namespace = "AWS/EC2", Period = 60, Statistic = Statistic.Average, Threshold = 70.0, ActionsEnabled = true, AlarmActions = new List<string> { "arn:aws:swf:us-west-2:" + "customerAccount" + ":action/actions/AWS_EC2.InstanceId.Reboot/1.0" }, AlarmDescription = "Alarm when server CPU exceeds 70%", Dimensions = new List<Dimension>

137

Page 142: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de alarmas en Amazon CloudWatch

{ new Dimension { Name = "InstanceId", Value = "INSTANCE_ID" } }, Unit = StandardUnit.Seconds });

Eliminación de una alarmaCree una instancia AmazonCloudWatchClient y un objeto DeleteAlarmsRequest para retener losnombres de las alarmas que desea eliminar. A continuación, llame al método DeleteAlarms del objetoAmazonCloudWatchClient.

using (var cloudWatch = new AmazonCloudWatchClient(RegionEndpoint.USWest2)){ var response = cloudWatch.DeleteAlarms( new DeleteAlarmsRequest { AlarmNames = new List<string> { "Alarm1", "Alarm2" }; });}

Uso de alarmas en Amazon CloudWatchEn este ejemplo de .NET puede ver cómo cambiar el estado de las instancias Amazon EC2automáticamente en función de una alarma de CloudWatch.

El escenarioMediante las acciones de alarma, puede crear alarmas que paran, terminan, reinician o recuperanautomáticamente sus instancias Amazon EC2. Puede utilizar las acciones parar o terminar cuando yano necesita que se ejecute una instancia. Puede usar las acciones reiniciar y recuperar para reiniciarautomáticamente esas instancias.

En este ejemplo, .NET se usa para definir una acción de alarma en CloudWatch que desencadenael reinicio de una instancia Amazon EC2. Los métodos usan el AWS SDK for .NET para administrarinstancias Amazon EC2 mediante estos métodos de la clase AmazonCloudWatchClient:

• EnableAlarmActions• DisableAlarmActions

Para obtener más información acerca de las acciones de alarma de CloudWatch, consulte Crear alarmaspara parar, terminar, reiniciar o recuperar una instancia en la Amazon CloudWatch User Guide.

Tareas previas necesariasPara configurar y ejecutar este ejemplo, primero debe:

• Prepararse para utilizar Amazon CloudWatch.• Instalar y configurar el AWS SDK for .NET.

Crear y habilitar acciones en una alarma1. Cree una instancia AmazonCloudWatchClient y un objeto PutMetricAlarmRequest para retener los

parámetros a fin de crear una alarma, especificando ActionsEnabled como verdadero y una matriz

138

Page 143: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de alarmas en Amazon CloudWatch

de ARN para las acciones que desencadenará la alarma. Llame al método PutMetricAlarm del objetoAmazonCloudWatchClient, que crea la alarma si no existe o la actualiza si existe.

using (var client = new AmazonCloudWatchClient(RegionEndpoint.USWest2)){ client.PutMetricAlarm(new PutMetricAlarmRequest { AlarmName = "Web_Server_CPU_Utilization", ComparisonOperator = ComparisonOperator.GreaterThanThreshold, EvaluationPeriods = 1, MetricName = "CPUUtilization", Namespace = "AWS/EC2", Period = 60, Statistic = Statistic.Average, Threshold = 70.0, ActionsEnabled = true, AlarmActions = new List<string> { "arn:aws:swf:us-west-2:" + "customerAccount" + ":action/actions/AWS_EC2.InstanceId.Reboot/1.0" }, AlarmDescription = "Alarm when server CPU exceeds 70%", Dimensions = new List<Dimension> { new Dimension { Name = "InstanceId", Value = "instanceId" } }, Unit = StandardUnit.Seconds });}

2. Cuando PutMetricAlarm se realice de forma correcta, cree un objeto EnableAlarmActionsRequestque contenga el nombre de la alarma de CloudWatch. Llame al método EnableAlarmActions parahabilitar la acción de alarma.

client.EnableAlarmActions(new EnableAlarmActionsRequest{ AlarmNames = new List<string> { "Web_Server_CPU_Utilization" }});

3. Cree un objeto MetricDatum que contenga la métrica personalizada CPUUtilization. Cree un objetoPutMetricDataRequest que contenga el parámetro MetricData necesario para enviar un punto dedatos para la métrica CPUUtilization. Llame al método PutMetricData.

MetricDatum metricDatum = new MetricDatum{ MetricName = "CPUUtilization" };PutMetricDataRequest putMetricDatarequest = new PutMetricDataRequest{ MetricData = new List<MetricDatum> { metricDatum }};client.PutMetricData(putMetricDatarequest);

Deshabilitar acciones en una alarmaCree una instancia AmazonCloudWatchClient y un objeto DisableAlarmActionsRequest que contengael nombre de la alarma de CloudWatch. Llame al método DisableAlarmActions a fin de deshabilitar lasacciones para esta alarma.

using (var client = new AmazonCloudWatchClient(RegionEndpoint.USWest2)){ client.DisableAlarmActions(new DisableAlarmActionsRequest { AlarmNames = new List<string> { "Web_Server_CPU_Utilization" } });

139

Page 144: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideObtención de métricas de Amazon CloudWatch

}

Obtención de métricas de Amazon CloudWatchEn este ejemplo puede ver cómo:

• Recuperar una lista de métricas de CloudWatch• Publicar métricas personalizadas de CloudWatch

El escenarioLas métricas son los datos sobre el desempeño de los sistemas. También puede habilitar la monitorizacióndetallada de algunos recursos como las instancias Amazon EC2 o sus propias métricas de aplicación. Eneste ejemplo, usa .NET para recuperar una lista de métricas de CloudWatch publicadas y publica puntosde datos en métricas de CloudWatch mediante estos métodos de la clase AmazonCloudWatchClient:

• ListMetrics• PutMetricData

Para obtener más información acerca de las métricas de CloudWatch, consulte Using Amazon CloudWatchMetrics en la Amazon CloudWatch User Guide.

Tareas previas necesariasPara configurar y ejecutar este ejemplo, primero debe:

• Prepararse para utilizar Amazon CloudWatch.• Instalar y configurar el AWS SDK for .NET.

Listar métricasCree un objeto ListMetricsRequest que contenga los parámetros necesarios para listar métricasen el espacio de nombres AWS/Logs. Llame al método ListMetrics desde una instanciaAmazonCloudWatchClient para listar la métrica IncomingLogEvents.

var logGroupName = "LogGroupName";DimensionFilter dimensionFilter = new DimensionFilter(){ Name = logGroupName};var dimensionFilterList = new List<DimensionFilter>();dimensionFilterList.Add(dimensionFilter);

var dimension = new Dimension{ Name = "UniquePages", Value = "URLs"};using (var cw = new AmazonCloudWatchClient(RegionEndpoint.USWest2)){ var listMetricsResponse = cw.ListMetrics(new ListMetricsRequest { Dimensions = dimensionFilterList, MetricName = "IncomingLogEvents",

140

Page 145: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEnvío de eventos a eventos de Amazon CloudWatch

Namespace = "AWS/Logs" }); Console.WriteLine(listMetricsResponse.Metrics);}

Enviar métricas personalizadasCree un objeto PutMetricDataRequest que contenga los parámetros necesarios para enviar un punto dedatos para la métrica personalizada PAGES_VISITED. Llame al método PutMetricData desde la instanciaAmazonCloudWatchClient.

using (var cw = new AmazonCloudWatchClient(RegionEndpoint.USWest2)){ cw.PutMetricData(new PutMetricDataRequest { MetricData = new List<MetricDatum>{new MetricDatum { MetricName = "PagesVisited", Dimensions = new List<Dimension>{dimension}, Unit = "None", Value = 1.0 }}, Namespace = "SITE/TRAFFIC" });}

Envío de eventos a eventos de Amazon CloudWatchEn este ejemplo de código de .NET puede ver cómo:

• Crear y actualizar una regla programada para desencadenar un evento• Añadir un destino de la función de AWS Lambda para responder a un evento• Enviar eventos que se corresponden con los destinos

El escenarioAmazon CloudWatch Events proporciona un flujo casi en tiempo real de eventos del sistema que describencambios en recursos de AWS en diversos destinos. Mediante reglas sencillas, puede asignar los eventosy dirigirlos a uno o más flujos o funciones de destino. En este ejemplo de .NET puede ver cómo crear yactualizar una regla usada para desencadenar un evento, definir uno o varios destinos para responder a unevento y enviar eventos que se corresponden con los destinos para controlar.

El código administra instancias mediante estos métodos de la clase AmazonCloudWatchEventsClient:

• PutRule• PutTargets• PutEvents

Para obtener más información acerca de Amazon CloudWatch Events, consulte Agregar eventos conPutEvents en Amazon CloudWatch Events User Guide.

Tareas previas necesariasPara configurar y ejecutar este ejemplo, primero debe:

141

Page 146: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEnvío de eventos a eventos de Amazon CloudWatch

• Prepararse para utilizar Amazon CloudWatch.• Instalar y configurar el AWS SDK for .NET.• Cree una función Lambda mediante el proyecto hello-world que actuará como destino de los eventos.

Para saber cómo hacerlo, consulte Step 1: Create an AWS Lambda function en Amazon CloudWatchEvents User Guide.

Crear una función de IAM para ejecutar los ejemplosEn los siguientes ejemplos se requiere una función de IAM cuya política conceda permiso a eventos deCloudWatch y que incluya events.amazonaws.com como entidad de confianza. En este ejemplo se creauna función llamada CWEvents, que establece su relación de confianza y política de funciones.

static void Main(){ var client = new AmazonIdentityManagementServiceClient(); // Create a role and it's trust relationship policy var role = client.CreateRole(new CreateRoleRequest { RoleName = "CWEvents", AssumeRolePolicyDocument = @"{""Statement"":[{""Principal"":{""Service"":[""events.amazonaws.com""]}," + @"""Effect"":""Allow"",""Action"":[""sts:AssumeRole""]}]}" }).Role; // Create a role policy and add it to the role string policy = GenerateRolePolicyDocument(); var request = new CreatePolicyRequest { PolicyName = "DemoCWPermissions", PolicyDocument = policy }; try { var createPolicyResponse = client.CreatePolicy(request); } catch (EntityAlreadyExistsException) { Console.WriteLine ("Policy 'DemoCWPermissions' already exits."); } var request2 = new AttachRolePolicyRequest() { PolicyArn = "arn:aws:iam::192484417122:policy/DemoCWPermissions", RoleName = "CWEvents" }; try { var response = client.AttachRolePolicy(request2); //managedpolicy Console.WriteLine("Policy DemoCWPermissions attached to Role TestUser"); } catch (NoSuchEntityException) { Console.WriteLine ("Policy 'DemoCWPermissions' does not exist"); } catch (InvalidInputException) { Console.WriteLine ("One of the parameters is incorrect"); }

}public static string GenerateRolePolicyDocument()

142

Page 147: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEnvío de eventos a eventos de Amazon CloudWatch

{ /* This method produces the following managed policy: "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsFullAccess", "Effect": "Allow", "Action": "events:*", "Resource": "*" }, { "Sid": "IAMPassRoleForCloudWatchEvents", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/AWS_Events_Invoke_Targets" } ] } */ var actionList = new ActionIdentifier("events:*"); var actions = new List<ActionIdentifier>(); actions.Add(actionList); var resource = new Resource("*"); var resources = new List<Resource>(); resources.Add(resource); var statement = new Amazon.Auth.AccessControlPolicy.Statement (Amazon.Auth.AccessControlPolicy.Statement.StatementEffect.Allow) { Actions = actions, Id = "CloudWatchEventsFullAccess", Resources = resources }; var statements = new List<Amazon.Auth.AccessControlPolicy.Statement>(); statements.Add(statement); var actionList2 = new ActionIdentifier("iam:PassRole"); var actions2 = new List<ActionIdentifier>(); actions2.Add(actionList2); var resource2 = new Resource("arn:aws:iam::*:role/AWS_Events_Invoke_Targets"); var resources2 = new List<Resource>(); resources2.Add(resource2); var statement2 = new Amazon.Auth.AccessControlPolicy.Statement(Amazon.Auth.AccessControlPolicy.Statement.StatementEffect.Allow) { Actions = actions2, Id = "IAMPassRoleForCloudWatchEvents", Resources = resources2 };

statements.Add(statement2); var policy = new Policy { Id = "DemoEC2Permissions", Version = "2012-10-17", Statements = statements }; return policy.ToJson();}

Crear una regla programadaCree una instancia AmazonCloudWatchEventsClient y un objeto PutRuleRequest que contengan losparámetros necesarios para especificar la nueva regla programada, que incluye lo siguiente:

• Un nombre para la regla

143

Page 148: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideEnvío de eventos a eventos de Amazon CloudWatch

• El ARN de la función de IAM creado anteriormente• Una expresión para programar la activación de la regla cada cinco minutos

Llame al método PutRule para crear la regla. PutRuleResponse devuelve al ARN de la regla nueva oactualizada.

AmazonCloudWatchEventsClient client = new AmazonCloudWatchEventsClient();

var putRuleRequest = new PutRuleRequest{ Name = "DEMO_EVENT", RoleArn = "IAM_ROLE_ARN", ScheduleExpression = "rate(5 minutes)", State = RuleState.ENABLED};

var putRuleResponse = client.PutRule(putRuleRequest);Console.WriteLine("Successfully set the rule {0}", putRuleResponse.RuleArn);

Añadir un destino de la función de LambdaCree una instancia AmazonCloudWatchEventsClient y un objeto PutTargetsRequest que contengan losparámetros necesarios para especificar la regla a la que desea asociar el destino, incluido el ARN de lafunción de Lambda creada. Llame al método PutTargets de la instancia AmazonCloudWatchClient.

AmazonCloudWatchEventsClient client = new AmazonCloudWatchEventsClient();

var putTargetRequest = new PutTargetsRequest{ Rule = "DEMO_EVENT", Targets = { new Target { Arn = "LAMBDA_FUNCTION_ARN", Id = "myCloudWatchEventsTarget"} }};client.PutTargets(putTargetRequest);

Enviar eventosCree una instancia AmazonCloudWatchEventsClient y un objeto PutEventsRequest que contengan losparámetros necesarios para enviar eventos. Para cada evento, incluya el origen del evento, los ARN decualquier recurso afectado por el evento y detalles del evento. Llame al método PutEvents de la instanciaAmazonCloudWatchClient.

AmazonCloudWatchEventsClient client = new AmazonCloudWatchEventsClient();

var putEventsRequest = new PutEventsRequest{ Entries = new List<PutEventsRequestEntry> { new PutEventsRequestEntry { Detail = @"{ ""key1"" : ""value1"", ""key2"" : ""value2"" }", DetailType = "appRequestSubmitted", Resources = { "RESOURCE_ARN" }, Source = "com.compnay.myapp"

144

Page 149: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de filtros de suscripción en Amazon CloudWatch Logs

} }};client.PutEvents(putEventsRequest);

Uso de filtros de suscripción en Amazon CloudWatchLogsEn este ejemplo de .NET puede ver cómo:

• Listar un filtro de suscripción en CloudWatch Logs• Crear o eliminar un filtro de suscripción en CloudWatch Logs

El escenarioLas suscripciones proporcionan acceso a la fuente en tiempo real de eventos de registro de los registrosde CloudWatch y envía esa fuente a otros servicios como, por ejemplo, Amazon Kinesis Data Streamso AWS Lambda para el procesamiento personalizado, análisis o carga en otros sistemas. Un filtro desuscripción define el patrón que utilizar para filtrar los eventos de registro que se envían al recurso deAWS. En este ejemplo se muestra cómo listar, crear y eliminar un filtro de suscripción en CloudWatchLogs. El destino de los eventos de registro es un rol de Lambda.

En este ejemplo se usa el AWS SDK for .NET para administrar filtros de suscripción mediante estosmétodos de la clase AmazonCloudWatchLogsClient:

• DescribeSubscriptionFilters• PutSubscriptionFilter• DeleteSubscriptionFilter

Para obtener más información acerca de las suscripciones a CloudWatch Logs, consulte Real-timeProcessing of Log Data with Subscriptions en Amazon CloudWatch Logs User Guide.

Tareas previas necesariasPara configurar y ejecutar este ejemplo, primero debe:

• Prepararse para utilizar Amazon CloudWatch.• Instalar y configurar el AWS SDK for .NET.

Describir los filtros de suscripción existentesCree un objeto AmazonCloudWatchLogsClient. Cree un objeto DescribeSubscriptionFiltersRequest quecontenga los parámetros necesarios para describir sus filtros existentes. Incluya el nombre del grupo deregistros y el número máximo de filtros que desea describir. Llame al método DescribeSubscriptionFilters.

public static void DescribeSubscriptionFilters(){ var client = new AmazonCloudWatchLogsClient(); var request = new Amazon.CloudWatchLogs.Model.DescribeSubscriptionFiltersRequest() { LogGroupName = "GROUP_NAME", Limit = 5 };

145

Page 150: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideUso de filtros de suscripción en Amazon CloudWatch Logs

try { var response = client.DescribeSubscriptionFilters(request); } catch (Amazon.CloudWatchLogs.Model.ResourceNotFoundException e) { Console.WriteLine(e.Message); }}

Crear un filtro de suscripciónCree un objeto AmazonCloudWatchLogsClient. Cree un objeto PutSubscriptionFilterRequest quecontenga los parámetros necesarios para crear un filtro, incluido el ARN del rol de Lambda de destino, elnombre del filtro, el patrón de cadena para el filtrado y el nombre del grupo de registros. Llame al métodoPutSubscriptionFilter.

public static void PutSubscriptionFilters(){ var client = new AmazonCloudWatchLogsClient(); var request = new Amazon.CloudWatchLogs.Model.PutSubscriptionFilterRequest() { DestinationArn = "LAMBDA_FUNCTION_ARN", FilterName = "FILTER_NAME", FilterPattern = "ERROR", LogGroupName = "Log_Group" }; try { var response = client.PutSubscriptionFilter(request); } catch (InvalidParameterException e) { Console.WriteLine(e.Message); }}

Eliminar un filtro de suscripciónCree un objeto AmazonCloudWatchLogsClient. Cree un objeto DeleteSubscriptionFilterRequest quecontenga los parámetros necesarios para eliminar un filtro, incluidos los nombres del filtro y el grupo deregistros. Llame al método DeleteSubscriptionFilter.

public static void DeleteSubscriptionFilter(){ var client = new AmazonCloudWatchLogsClient(); var request = new Amazon.CloudWatchLogs.Model.DeleteSubscriptionFilterRequest() { LogGroupName = "GROUP_NAME", FilterName = "FILTER" }; try { var response = client.DeleteSubscriptionFilter(request); } catch (Amazon.CloudWatchLogs.Model.ResourceNotFoundException e) { Console.WriteLine(e.Message); }}

146

Page 151: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer GuideProgramación de AWS OpsWorks

para trabajar con pilas y aplicaciones

Programación de AWS OpsWorks para trabajar conpilas y aplicaciones

El AWS SDK for .NET es compatible con AWS OpsWorks, la cual ofrece una forma sencilla y flexible decrear y gestionar pilas y aplicaciones. AWS OpsWorks permite aprovisionar recursos de AWS, administrarsu configuración, implementar aplicaciones en dichos recursos y monitorear su buen estado. Para obtenermás información, consulte OpsWorks.

El SDK proporciona API para programar con AWS OpsWorks. Estas API suelen incluir conjuntos deobjetos de solicitud y respuesta coincidentes que se corresponden con las llamadas a la API basada enHTTP y que se centran en sus propias construcciones de nivel de servicios correspondientes.

Para obtener información acerca de la referencia de la API relacionada, consulte Amazon.OpsWorks yAmazon.OpsWorks.Model en AWS SDK for .NET Reference.

Soporte de programación para servicios de AWSadicionales

El AWS SDK for .NET admite la programación de servicios de AWS, además de los que se describen enlos ejemplos de código. Para obtener información acerca de cómo programar servicios específicos con elAWS SDK for .NET, consulte la AWS SDK for .NET API Reference.

Además de los espacios de nombres para servicios de AWS individuales, el AWS SDK for .NET tambiénproporciona las siguientes API:

Area Descripción Recursos

AWS Support Acceso mediante programacióna casos de AWS Support ycaracterísticas de TrustedAdvisor.

Consulte Amazon.AWSSupport yAmazon.AWSSupport.Model.

General Clases auxiliares yenumeraciones.

Consulte Amazon y Amazon.Util.

En otra información de programación general del AWS SDK for .NET se incluye lo siguiente:

• Anulación de puntos de enlace en el AWS SDK para .NET• Ciclos de vida de los objetos de .NET

147

Page 152: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer Guide

Recursos adicionalesPágina de inicio de AWS SDK para .NET

Para obtener más información sobre el AWS SDK for .NET, vaya a la página de inicio del SDK en http://aws.amazon.com/sdk-for-net/.

Documentación de referencia del SDK

La documentación de referencia del SDK incluye la capacidad de explorar y buscar entre todo elcódigo incluido en el SDK. En ella se incluye documentación exhaustiva, ejemplos de uso e incluso lacapacidad de explorar el origen del método. Para obtener más información, consulte la AWS SDK for .NETReference.

Foros de AWS

Consulte los foros de AWS para platear preguntas o realizar comentarios acerca de AWS. En cada páginade la documentación se incluye un botón Go to the forums en la parte superior de la página que le dirige alforo asociado. Los ingenieros de AWS monitorean los foros y responden a las preguntas, los comentarios ylos problemas. También puede suscribirse a las fuentes RSS de cualquiera de los foros.

AWS Toolkit for Visual Studio

Si utiliza Microsoft Visual Studio IDE, debería consultar la Guía del usuario de AWS Toolkit for VisualStudio.

148

Page 153: AWS SDK para · El AWS SDK for .NET facilita a los desarrolladores de Windows la creación de aplicaciones de .NET que aprovechen la rentabilidad, escalabilidad y fiabilidad de servicios

AWS SDK para .NET Developer Guide

Historial de revisiónEn la siguiente tabla se describen los cambios importantes que se han realizado en la Guía paradesarrolladores de AWS SDK para .NET desde la última versión.

Última actualización de la documentación principal: 28 de julio de 2015

Cambiar | Descripción Fecha de la versión

Nueva versión del SDK |Versión 3 del AWS SDKfor .NET publicada.

28 de julio de 2015

149