Gerenciamento do estado da sessão ASP.NET com Amazon DynamoDB - AWS SDK for .NET

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gerenciamento do estado da sessão ASP.NET com Amazon DynamoDB

nota

As informações neste tópico são específicas para projetos baseados no .NET Framework e noAWS SDK for .NETVersão 3.3 e anterior.

Atenção

Este tópico é específico do ASP.NET; as informações neste tópico não são necessariamente aplicáveis ao ASP.NET Core.

Os aplicativos ASP.NET costumam armazenar dados de estado da sessão na memória. Contudo, essa abordagem não oferece uma boa escalabilidade. Após o aplicativo crescer além de um único servidor web, o estado de sessão deverá ser compartilhado entre servidores. Uma solução comum é configurar um servidor de estado de sessão dedicada com o Microsoft SQL Server, mas essa abordagem tem inconvenientes: você precisa administrar outra máquina; o servidor de estado de sessão é um ponto único de falha; e o servidor de estado de sessão pode se tornar um gargalo de desempenho.

DynamoDB, um armazenamento de banco de dados NoSQL doAWSO, oferece uma solução econômica para compartilhar o estado da sessão entre servidores Web sem incorrer em nenhum desses inconvenientes.

nota

Não importa a solução que você escolher, esteja ciente de que o Amazon DynamoDB impõe limites sobre o tamanho de um item. Nenhum dos registros que você armazena no DynamoDB podem exceder esse limite. Para obter mais informações, consulteLimites no DynamoDBNo Guia do desenvolvedor do Amazon DynamoDB.

O AWS SDK for .NET inclui AWS.SessionProvider.dll, que contém um provedor de estado de sessão ASP.NET. Também inclui oAmazonDynamoDBSessionProviderSampleExemplo, que demonstra como usar o Amazon DynamoDB como provedor de estado de sessão.

Para obter mais informações sobre como usar o estado de sessão com aplicativos ASP.NET, consulte oDocumentação da Microsoft.

Crie uma tabela do ASP.NET_SessionState

Ao iniciar o aplicativo, ele procura pela tabela do Amazon DynamoDB de nome, por padrão,ASP.NET_SessionState. Recomendamos que você crie essa tabela antes de executar seu aplicativo pela primeira vez.

Para criar a tabela ASP.NET_SessionState

  1. Selecione Create Table (Criar tabela). O assistente para Create Table (Criar tabela) é aberto.

  2. Na caixa de texto Table name (nome da tabela), digite ASP.NET_SessionState.

  3. No campo Primary key (chave primária), digite SessionId e defina o tipo como String.

  4. Quando todas as suas opções forem inseridas como as desejar, selecione Create (Criar).

A tabela ASP.NET_SessionState estará pronta para uso quando o status mudar de CREATING para ACTIVE.

nota

Se você decidir não criar a tabela de antemão, o provedor do estado da sessão criará a tabela durante a inicialização. Consulte as opções de web.config abaixo para ver uma lista dos atributos que atuam como parâmetros de configuração para a tabela de estado da sessão. Se o provedor criar a tabela, ela usará estes parâmetros.

Configure o provedor de estado da sessão

Para configurar um aplicativo ASP.NET para usar o DynamoDB como servidor de estado da sessão

  1. Adicione referências tanto a AWSSDK.dll quanto a AWS.SessionProvider.dll ao seu projeto do Visual Studio ASP.NET. Essas montagens estão disponíveis por meio dePacotes NuGetou porinstalando montagens manualmente.

    Em versões anteriores do SDK, a funcionalidade do provedor do estado da sessão estava contida em AWS.Extension.dll. Para melhorar a usabilidade, a funcionalidade foi movida para AWS.SessionProvider.dll. Para obter mais informações, consulte a postagem do blogAWS.Extensionrenomeando.

  2. Edite o arquivo Web.config do seu aplicativo. No elemento system.web, substitua o elemento sessionState existente pelo seguinte fragmento XML:

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

    O perfil representa oAWSCredenciais usadas para se comunicar com o DynamoDB para armazenar e recuperar o estado da sessão. Se você estiver usando oAWS SDK for .NETe estão especificando um perfil naappSettingsseção de seu aplicativoWeb.configarquivo, você não precisa especificar um perfil naprovidersseção; oAWSO código do cliente .NET descobrirá no momento da execução. Para obter mais informações, consulteConfigurar oAWS SDK for .NETAplicativo.

    Se o servidor web estiver sendo executado na instância do Amazon EC2 configurada para usar as funções do IAM com as instâncias do EC2, você não precisará especificar nenhuma credencial naWeb.configfile. Neste caso, oAWSO cliente .NET usará as credenciais da função do IAM. Para obter mais informações, consulte Como conceder acesso usando uma função do IAM e Considerações sobre segurança.

Opções de Web.config

Você pode usar os seguintes atributos de configuração na seção providers do seu arquivo Web.config:

AWSAccessKey

ID de chave de acesso a usar. Isso pode ser definido na seção providers ou appSettings. É recomendável não usar esta configuração. Em vez disso, especifique as credenciais usando AWSProfileName para especificar um perfil.

AWSSecretKey

Chave de secreta a ser usada. Isso pode ser definido na seção providers ou appSettings. É recomendável não usar esta configuração. Em vez disso, especifique as credenciais usando AWSProfileName para especificar um perfil.

AWSProfileName

O nome de perfil associado com as credenciais que você deseja usar. Para obter mais informações, consulteConfigurar oAWS SDK for .NETAplicativo.

Região

Atributo string obrigatório. OAWSNa qual usar o Amazon DynamoDB. Para uma lista deAWSregiões, consulteRegiões e endpoints do DynamoDB.

Aplicativo

Atributo string opcional. O valor do atributo Application é usado para particionar os dados de sessão na tabela, de forma que a tabela possa ser usada para mais de um aplicativo.

Tabela

Atributo string opcional. O nome da tabela usada para armazenar dados da sessão. O padrão é ASP.NET_SessionState.

ReadCapacityUnits

Atributo int opcional. As unidades de capacidade de leitura a serem usadas se o provedor criar a tabela. O padrão é 10.

WriteCapacityUnits

Atributo int opcional. As unidades de capacidade de gravação a serem usadas se o provedor criar a tabela. O padrão é 5.

CreateIfNotExist

Atributo boolean opcional. O atributo CreateIfNotExist gerencia se o provedor criará automaticamente a tabela, caso ela ainda não exista. O padrão é verdadeiro. Se esse indicador for definido como falso e a tabela não existir, será emitida uma exceção.

Considerações sobre segurança

Depois que a tabela do DynamoDB for criada e o aplicativo ser configurado, as sessões poderão ser usadas como com qualquer outro provedor de sessão.

Como uma melhor prática de segurança, recomendamos a execução de seus aplicativos com as credenciais de um usuário do Guia do usuário do IAM. Você pode usar oConsole de gerenciamento do IAMou oAWS Toolkit for Visual Studiopara criar usuários do IAM e definir políticas de acesso.

O provedor de estado da sessão precisa poder chamar as operações DeleteItem, DescribeTable, GetItem, PutItem e UpdateItem para a tabela que armazena os dados da sessão. As políticas de exemplo a seguir podem ser usadas para restringir o usuário do IAM somente às operações necessárias pelo provedor para uma instância do DynamoDB executada em 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" } ] }