Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation du gestionnaire de session DynamoDB avec la version 3 AWS SDK for PHP
Le gestionnaire de session DynamoDB est un gestionnaire de session personnalisé pour PHP qui permet aux développeurs d'utiliser Amazon DynamoDB comme magasin de sessions. L'utilisation de DynamoDB pour le stockage de sessions atténue les problèmes liés à la gestion des sessions dans une application Web distribuée en déplaçant les sessions du système de fichiers local vers un emplacement partagé. DynamoDB est rapide, évolutif, facile à configurer et gère automatiquement la réplication de vos données.
Le gestionnaire de session DynamoDB utilise cette session_set_save_handler()
fonction pour connecter les opérations DynamoDB aux fonctions de session natives de PHP afin de permettre
Pour plus d'informations sur le service DynamoDB, consultez la page d'accueil d'Amazon DynamoDB
Utilisation de base
Étape 1 : enregistrer le gestionnaire
Tout d'abord, instanciez et enregistrez le gestionnaire de sessions.
use Aws\DynamoDb\SessionHandler; $dynamoDb = new Aws\DynamoDb\DynamoDbClient([ 'region'=>'us-east-1' // Since version 3.277.10 of the SDK, ]); // the 'version' parameter defaults to 'latest'. $sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions' ]); $sessionHandler->register();
Étape 2. Créez un tableau pour enregistrer vos sessions
Avant de pouvoir utiliser le gestionnaire de session, vous devez créer un tableau dans lequel stocker les sessions. Vous pouvez le faire à l'avance en utilisant la AWS console pour Amazon DynamoDB
Lorsque vous créez ce tableau, utilisez « id » pour le nom de la clé primaire. Nous vous recommandons également de configurer un attribut de durée de vie en utilisant l'attribut « expires » pour bénéficier du nettoyage automatique de la mémoire des sessions.
Étape 3. Utilisez les sessions PHP comme vous le feriez normalement
Une fois que le gestionnaire de session est enregistré et que le tableau existe, vous pouvez écrire et lire depuis la session à l'aide de la variable superglobale $_SESSION
, tout comme vous le feriez normalement avec le gestionnaire de sessions par défaut de PHP. Le gestionnaire de session DynamoDB encapsule et résume les interactions avec DynamoDB et vous permet d'utiliser simplement les fonctions et l'interface de session natives de PHP.
// Start the session session_start(); // Alter the session data $_SESSION['user.name'] = 'jeremy'; $_SESSION['user.role'] = 'admin'; // Close the session (optional, but recommended) session_write_close();
Configuration
Vous pouvez configurer le comportement du gestionnaire de session à l'aide des options suivantes. Toutes les options sont facultatives, mais veillez à comprendre les valeurs par défaut.
-
table_name
-
Nom de la table DynamoDB dans laquelle les sessions doivent être stockées. La valeur par défaut est
'sessions'
. -
hash_key
-
Nom de la clé de hachage dans le tableau des sessions DynamoDB. La valeur par défaut est
'id'
. -
data_attribute
-
Nom de l'attribut dans la table des sessions DynamoDB dans lequel les données de session sont stockées. La valeur par défaut est
'data'
. -
data_attribute_type
-
Type de l'attribut dans la table des sessions DynamoDB dans lequel les données de session sont stockées. La valeur par défaut est
'string'
, mais elle peut éventuellement être définie sur'binary'
. -
session_lifetime
-
La durée de vie d'une session inactive avant de devoir être nettoyée de la mémoire. Si elle n'est pas fournie, la valeur réelle de la durée de vie utilisée sera
ini_get('session.gc_maxlifetime')
. -
session_lifetime_attribute
-
Nom de l'attribut dans le tableau des sessions DynamoDB dans lequel le délai d'expiration des sessions est enregistré. La valeur par défaut est
'expires'
. -
consistent_read
-
Indique si le gestionnaire de session doit utiliser des lectures cohérentes pour l'opération
GetItem
. L’argument par défaut esttrue
. -
locking
-
Indique s'il faut utiliser le verrouillage de session. L’argument par défaut est
false
. -
batch_config
-
Configuration utilisée pour la suppression par lots pendant le nettoyage de la mémoire. Ces options sont transmises directement aux objets WriteRequestBatchDynamoDB. Déclenchez manuellement le nettoyage de la mémoire via
SessionHandler::garbageCollect()
. -
max_lock_wait_time
-
Durée maximale (en secondes) pendant laquelle le gestionnaire de session doit attendre l'acquisition d'un verrouillage avant d'abandonner. La valeur par défaut est
10
et est utilisée uniquement avec le verrouillage de session. -
min_lock_retry_microtime
-
Durée minimale (en microsecondes) pendant laquelle le gestionnaire de session doit attendre entre deux tentatives d'acquisition d'un verrouillage. La valeur par défaut est
10000
et est utilisée uniquement avec le verrouillage de session. -
max_lock_retry_microtime
-
Durée maximale (en microsecondes) pendant laquelle le gestionnaire de session doit attendre entre deux tentatives d'acquisition d'un verrouillage. La valeur par défaut est
50000
et est utilisée uniquement avec le verrouillage de session.
Pour configurer le Gestionnaire de sessions, spécifiez les options de configuration lorsque vous instanciez le gestionnaire. Le code suivant est un exemple avec toutes les options de configuration spécifiées.
$sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions', 'hash_key' => 'id', 'data_attribute' => 'data', 'data_attribute_type' => 'string', 'session_lifetime' => 3600, 'session_lifetime_attribute' => 'expires', 'consistent_read' => true, 'locking' => false, 'batch_config' => [], 'max_lock_wait_time' => 10, 'min_lock_retry_microtime' => 5000, 'max_lock_retry_microtime' => 50000, ]);
Tarification
Outre les frais de stockage et de transfert de données, les coûts associés à l'utilisation de DynamoDB sont calculés en fonction de la capacité de débit allouée à votre table (voir les détails de tarification d'Amazon DynamoDB
Une unité de capacité de lecture représente une lecture à cohérence forte par seconde (ou deux lectures cohérentes à terme par seconde) pour des éléments dont la taille peut atteindre jusqu'à 4 Ko. Une unité de capacité d'écriture représente une écriture par seconde pour des éléments dont la taille peut atteindre jusqu'à 1 Ko.
Enfin, le débit et les coûts nécessaires pour votre tableau de sessions seront corrélés au trafic attendu et à la taille de session. Le tableau suivant explique le nombre d'opérations de lecture et d'écriture effectuées sur votre table DynamoDB pour chacune des fonctions de session.
Lecture via |
|
Lecture via |
|
Écriture via |
|
Suppression via |
|
Nettoyage de la mémoire |
|
Verrouillage de session
Le gestionnaire de session DynamoDB prend en charge le verrouillage de session pessimiste afin d'imiter le comportement du gestionnaire de session par défaut de PHP. Par défaut, cette fonctionnalité est désactivée dans le gestionnaire de session DynamoDB car elle peut entraver les performances et augmenter les coûts, en particulier lorsqu'une application accède à la session à l'aide de requêtes Ajax ou d'iframes. Demandez-vous bien si votre application nécessite le verrouillage de session avant l'activation de celle-ci.
Pour activer le verrouillage de session, paramétrez l'option 'locking'
sur true
lorsque vous instanciez SessionHandler
.
$sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions', 'locking' => true, ]);
Collecte des ordures
Configurez un attribut de la TTL dans votre tableau DynamoDB, à l'aide de l'attribut « expires ». Ainsi, la mémoire de vos sessions sera automatiquement nettoyée et vous n'aurez pas à le faire vous-même.
Le gestionnaire de session DynamoDB prend également en charge la collecte des déchets de session à l'aide d'une série d'opérations et. Scan
BatchWriteItem
En raison de la nature du fonctionnement de l'opération Scan
, et afin de trouver et supprimer toutes les sessions expirées, le processus de nettoyage de la mémoire peut exiger un débit alloué élevé.
Pour cette raison, nous ne prenons pas en charge le nettoyage de la mémoire automatisé. Une meilleure pratique consiste à planifier le nettoyage de la mémoire pendant les heures creuses, lorsqu'un pic de débit consommé ne perturbera pas le reste de l'application. Par exemple, vous pouvez avoir une tâche cron nocturne déclenchant un script pour exécuter le nettoyage de la mémoire. Ce script doit faire quelque chose de similaire à ce qui suit.
$sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions', 'batch_config' => [ 'batch_size' => 25, 'before' => function ($command) { echo "About to delete a batch of expired sessions.\n"; } ] ]); $sessionHandler->garbageCollect();
Vous pouvez également utiliser l'option 'before'
au sein de 'batch_config'
pour introduire des délais sur les opérations BatchWriteItem
qui sont effectuées par le processus de nettoyage de la mémoire. Cela augmentera le temps nécessaire à la collecte des déchets, mais cela peut vous aider à répartir les demandes effectuées par le gestionnaire de session DynamoDB afin de vous aider à rester proche ou dans les limites de votre capacité de débit allouée pendant la collecte des déchets.
$sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions', 'batch_config' => [ 'before' => function ($command) { $command['@http']['delay'] = 5000; } ] ]); $sessionHandler->garbageCollect();
Bonnes pratiques
-
Créez votre tableau de sessions dans AWS la région la plus proche géographiquement de vos serveurs d'applications ou dans la même région que celles-ci. Cela garantit la latence la plus faible entre votre application et la base de données DynamoDB.
-
Choisissez avec soin la capacité de débit alloué de votre tableau de sessions. Prenez en compte le trafic attendu pour votre application et la taille attendue de vos sessions. Vous pouvez également utiliser le mode de capacité de lecture/écriture « à la demande » pour votre tableau.
-
Surveillez le débit consommé via la console AWS de gestion ou Amazon CloudWatch, et ajustez vos paramètres de débit selon les besoins pour répondre aux exigences de votre application.
-
Maintenez des sessions de petite taille (idéalement inférieures à 1 Ko). Les sessions de petite taille sont plus performantes et nécessitent moins de capacité de débit alloué.
-
N'utilisez pas le verrouillage de session, sauf si votre application le nécessite.
-
Au lieu d'utiliser les déclencheurs de nettoyage de la mémoire de session intégrés de PHP, programmez votre nettoyage de la mémoire via une tâche cron ou autre mécanisme de planification, pour qu'elle s'exécute pendant les heures creuses. Utilisez l'option
'batch_config'
à votre avantage.
Autorisations IAM requises
Pour utiliser SessionHhandler DynamoDB, vos informations d'identification configurées doivent être autorisées à utiliser la table DynamoDB que vous avez créée lors d'une étape précédente. La politique IAM suivante contient les autorisations minimales dont vous avez besoin. Pour appliquer cette politique, remplacez la valeur de la ressource par le nom de ressource Amazon (ARN) de la table que vous avez créée précédemment. Pour plus d'informations sur la création et l'attachement de politiques IAM, consultez la section Gestion des politiques IAM dans le Guide de l'utilisateur IAM.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:GetItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:Scan", "dynamodb:BatchWriteItem" ], "Effect": "Allow", "Resource": "arn:aws:dynamodb:<region>:<account-id>:table/<table-name>" } ] }