Administración del estado de la sesión de ASP.NET con Amazon DynamoDB - AWS SDK for .NET

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

Administración del estado de la sesión de ASP.NET con Amazon DynamoDB

nota

La información de este tema es específica de los proyectos basados en .NET Framework y elAWS SDK for .NETversión 3.3 y anterior.

aviso

Este tema es específico de ASP.NET; la información de este tema no es necesariamente aplicable a ASP.NET Core.

A menudo, las aplicaciones de ASP.NET almacenan datos de estado en la memoria. Sin embargo, este enfoque no escala bien. En cuanto una aplicación se extiende más allá de un solo servidor web, el estado de la sesión debe compartirse entre los servidores. Una solución habitual es configurar un servidor de estado 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 propio servidor 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 deAWSes una solución eficaz para compartir el estado de sesión entre servidores web sin ninguno de los anteriores inconvenientes.

nota

Independientemente de la solución que elija, debe recordar que Amazon DynamoDB aplica límites al tamaño de un elemento. Ninguno de los registros que almacene en DynamoDB puede superar dicho límite. Para obtener más información, consulteLímites en DynamoDBen la guía para desarrolladores de Amazon DynamoDB.

El AWS SDK for .NET incluye AWS.SessionProvider.dll, que contiene un proveedor de estado de sesión de ASP.NET. También incluye laAmazonDynamoDBSessionProviderSample, que explica cómo usar Amazon DynamoDB como proveedor de estado de sesión.

Para obtener más información sobre el uso de estados de sesión con las aplicaciones ASP.NET, consulte elDocumentación de Microsoft.

Creación de la tabla ASP.NET_SessionState

Al arrancar, la aplicación busca una tabla de Amazon DynamoDB llamada de forma predeterminada,ASP.NET_SessionState. Le recomendamos que cree esta tabla antes de ejecutar la aplicación por primera vez.

Para crear la tabla ASP.NET_SessionState

  1. Seleccione Create Table (Crear tabla). Se abrirá el asistente Create Table (Crear tabla).

  2. En el cuadro de texto Table name (Nombre de tabla), escriba ASP.NET_SessionState.

  3. En el campo Primary key (Clave principal), especifique SessionId y luego indique el tipo String.

  4. Después de configurar todas las opciones, elija Create (Crear).

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

nota

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

Configuración del proveedor de estado de sesión

Para 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 Studio ASP.NET. Estos ensamblajes están disponibles a través dePaquetes NuGeto porinstalar ensamblajes manualmente.

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

  2. Edite el archivo Web.config de la aplicación. En el elemento system.web, sustituya el elemento sessionState 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 laAWSLas credenciales se utilizan para comunicar con DynamoDB para almacenar y recuperar el estado de la sesión. Si utiliza laAWS SDK for .NETy están especificando un perfil en el campoappSettingsde la secciónWeb.config, no es necesario que especifique un perfil en laproviders; la secciónAWSEl código del cliente .NET lo encontrará en tiempo de ejecución. Para obtener más información, consulteConfiguración de suAWS SDK for .NETAplicación.

    Si el servidor web se ejecuta en una instancia Amazon EC2 configurada para utilizar roles de IAM para instancias EC2, entonces no será necesario especificar ninguna credencial en elWeb.configfile. En este caso, el campoAWS.NET del cliente utilizará las credenciales de la función de IAM. Para obtener más información, consulte Conceder acceso mediante un rol de IAM y Consideraciones de seguridad.

Opciones de Web.config

Puede utilizar los siguientes atributos de configuración de la sección providers de su archivo Web.config:

AWSAccessKey

Es el ID de clave de acceso que se debe utilizar. Se puede definir tanto en la sección providers como 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 la sección appSettings. Le recomendamos que no utilice esta configuración. En su lugar, especifique las 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, consulteConfiguración de suAWS SDK for .NETAplicación.

Región

Es un atributo string obligatorio. LaAWSregión en la que utilizar Amazon DynamoDB. Para obtener una lista deAWSregiones, consulteRegiones y puntos de enlace: DynamoDB.

Aplicación

Es un atributo string opcional. El valor del atributo Application se utiliza para dividir los datos de sesió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 de sesiones. 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 el proveedor 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 el proveedor crea la tabla. El valor predeterminado es 5.

CreateIfNotExist

Es un atributo boolean opcional. El atributo CreateIfNotExist controla si el proveedor creará la tabla automáticamente en el caso de que no exista. El valor predeterminado es true. Si se marca como falso y la tabla no existe, se lanzará una excepción.

Consideraciones de seguridad

Una vez creada la tabla DynamoDB y configurada la aplicación, las sesiones se pueden utilizar como con cualquier otro proveedor de sesiones.

Como práctica recomendada de seguridad, le aconsejamos que ejecute las aplicaciones con las credenciales de un usuario de la Guía del usuario de IAM. Puede utilizar laConsola de administración de IAMo elAWS Toolkit for Visual Studiopara 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. La siguiente política de ejemplo puede utilizarse para limitar las operaciones que puede realizar el usuario de IAM a las que necesita el proveedor para una instancia DynamoDB que se ejecuta en us-west-2:

{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "1", "Effect" : "Allow", "Action" : [ "dynamodb:DeleteItem", "dynamodb:DescribeTable", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource" : "arn:aws:dynamodb:us-west-2:{<YOUR-AWS-ACCOUNT-ID>}:table/ASP.NET_SessionState" } ] }