Site icon Blog ARC Optimizer

Comment utiliser AWS Lambda dans Drupal


AWS Lambda@Edge vous permet d'exécuter des applications et des services sans vous soucier de la gestion de l'infrastructure. Votre application s'exécute toujours sur des serveurs, mais toute la gestion des serveurs est effectuée par le fournisseur de Cloud. Vous n'avez plus besoin de provisionner, faire évoluer et maintenir des serveurs pour exécuter vos applications, bases de données et systèmes de stockage. AWS distribue votre application Web à l'échelle mondiale pour qu'elle s'exécute à partir de dizaines de centres de données AWS dans les régions

AWS Lambda est utilisé pour développer des applications et des services basés sur une architecture sans serveur. Le concept de l'architecture sans serveur est "Concentrez-vous sur votre application, pas sur l'infrastructure". Cela signifie que les développeurs d'applications peuvent se concentrer sur l'écriture de la logique métier plutôt que sur l'infrastructure de serveur, le coût, la mise à l'échelle et la disponibilité.

Avec AWS Lambdavous pouvez exécuter votre code virtuellement pour tout type d'application ou de service sans gérer Infrastructures AWS. Il peut être utilisé pour développer des microservices et ces services peuvent être liés à n'importe quelle application pour effectuer une tâche spécifique.

Les fonctions AWS Lambda peuvent être téléchargées au format zip sur l'image du conteneur et la fonction Lambda automatiquement alloue de la mémoire, de la puissance d'exécution et exécute vos fonctions Lambda . Les fonctions Lambda peuvent être exécutées en fonction des événements prédéfinis. Les fonctions Lambda peuvent être exécutées par plus de 200 services AWSappelez-les directement depuis votre application Web ou votre application mobile. Les fonctions AWS Lambda peuvent être écrites dans vos langages de programmation préférés tels que Python, Node.js, Go, Java, Ruby, et bien d'autres. AWS SAM ou Docker CLI peuvent être utilisés pour créer, tester et déployer vos fonctions.

Avantage d'AWS Lambda

  • Aucun serveur à gérer
  • Coûts et évolutivité réduits.
  • Développement et déploiement plus rapides.
  • Réduction des dépenses en ressources humaines.
  • Concentrez-vous sur les besoins de l'entreprise.
  • Le moyen le plus simple d'exécuter votre code dans le cloud
  • Mise à l'échelle automatiquement et haute disponibilité (HA)
  • Connecte et étend les services cloud[19659007]Le code peut s'exécuter plus près de l'utilisateur final, ce qui diminue la latence

Comment ça marche

Prérequis pour utiliser la fonction AWS Lambda dans Drupal 8/9

  • Plateforme AWS Cloud[19659007]Le langage de programmation pris en charge par les fonctions AWS Lambda
  • Evénement pour exécuter les fonctions Lambda
  • Application Drupal 8/9

Cas d'utilisation des fonctions AWS Lambda dans Drupal

  • Effacer le cache CloudFront.
  • Générer des rapports et envoyez par e-mail.
  • Exécutez le planificateur.[19659007]Traitement de l'image après le téléchargement vers le compartiment AWS S3.
  • Transférer les données MySql vers le moteur de recherche, la file d'attente, etc.
  • Envoyer des e-mails en masse aux clients.
  • Traitement de fichiers en temps réel.
  • Flux en temps réel. Traitement.
  • Traitement des données.

Exemple d'effacement du cache CloudFront

  • Télécharger AWS SDK via composer manager composer require aws/aws-sdk-php
  • Créer un nom du module examples avec tous les fichiers requis.
  • Créez le fichier examples.module dans la racine

1. Fichier : modules/custom/examples/examples.module

clearCache($entity);
}

2. Fichier : modules/custom/examples/src/Service/AwsLambdaService.php

currentUser = Drupal::service('current_user');
  }

/**
* Obtenir l'URL de l'entité.
*
* @param objet $entity
* Objet entité.
*
* @chaîne de retour
* Retourner l'URL de l'entité.
*/
fonction privée getEntityUrl($entity) {
  $type = $entity->getEntityTypeId();
  // Manière universelle.
  if (!$entity->get('path')->isEmpty() && !empty($entity->get('path')->alias)) {
    $url = $entity->get('path')->alias ;
  }
  autre {
    // Si l'alias de l'URL est vide.
    $url = Url::fromRoute('entity.' . $type . '.canonical', [$type => $entity->id()])->toString();
  }
  renvoie $url ;
}

/**
* Effacer le wrapper de cache CloudFront.
*
* @param objet $entity
* Objet entité.
*/
fonction publique clearCache($entity) {
  $urlArray = [];
  if ($entity && $entity->bundle()) {
    // Mettez votre logique ici pour vider le cache de plusieurs pages.
    $urlArray[] = $this->getEntityUrl($entity);
    return $this->clearCloudFrontCache($urlArray);
  }
}

/**
* Videz le cache avant du cloud des pages CMS.
*
* @param tableau $urls
* Liste des URL dans le tableau.
*
* @return bool
* Renvoie TRUE en cas de succès et FALSE en cas d'échec.
*/
fonction publique clearCloudFrontCache (tableau $ urls) {
  essayer {
    // Réinitialise la valeur de l'index.
    sort($urls);
    // Obtenir le nom d'utilisateur et l'identifiant de messagerie actuels.
    // Passe aux fonctions Lambda pour savoir qui a vidé le cache.
    $user = $this->currentUser->getDisplayName() . ':' . $this->currentUser->getEmail();
    $client = LambdaClient::factory(
     [
       'version' => 'latest',
       'region' => 'ap-south-1',
     ]
    );
    // Récupère le nom des fonctions Lambda à partir de la variable d'environnement.
    // Nom 'arn:aws:lambda:ap-south-1:532738712:function:clearCache'.
    $lambda = getenv('LAMBDA_CMS_CAHE_CLEAR');
    if ($client && $client->invoke([
      'FunctionName' => 'function:' . $lambda,
      'Payload' => json_encode(['urls' => $urls, 'user' => $user]),
    ])) {
    Drupal::messenger()->addMessage(t('Cache vidé de %urls URL(s).', ['%urls' => implode(', ', $urls)]));
    renvoie VRAI ;
   }
  }
  catch (Exception $e) {
    $this->writeLog('clearCloudFrontCache', $e->getMessage(), $e->getCode(), 'error');
  }
  renvoie FAUX ;
}

3. Fonction AWS Lambda écrite en Python pour vider le cache.
Fichier : clear_cache.py

#!/usr/bin/env python3
# encodage : UTF-8

def lambda_handler(événement, suite) :
  essayer:
    urls = event.get('urls')
    utilisateur = événement.get('utilisateur')
    message = 'Cloud Front Cache effacé par %s des pages suivantes :' % utilisateur
    # Mettez votre logique ici pour vider le cache.
 sauf exception comme e :
    message = "ERREUR : Effacement du cache du CMS - Une erreur s'est produite : %s" % (str(e))
    imprimer (message)

4. Téléchargez votre code python au format zip sur AWS et obtenez le nom de la fonction comme image ci-dessous ]Les fonctions Lambda ne sont pas conçues pour les processus de longue durée.

  • Contrôle global réduit.
  • Les tests locaux deviennent difficiles.
  • Conclusion

    Avec AWS Lambda, nous pouvons minimiser le traitement, le calcul et la mémoire Drupal. Dans l'exemple ci-dessus, l'effacement du cache CloudFront est effectué par la fonction AWS Lambda. Comme dans l'exemple ci-dessus, nous pouvons créer davantage de fonctions AWS Lambda pour effectuer des tâches plus complexes et qui peuvent être exécutées en Appeler la fonction Lambda à partir de Drupal, exécuter la fonction Lambda par le planificateur AWS ou les services AWS.

    TROUVÉ CELA UTILE ? PARTAGEZ-LE




    Source link
    Quitter la version mobile