Déployez des CloudWatch canaris Synthetics à l'aide de Terraform - Recommandations AWS

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.

Déployez des CloudWatch canaris Synthetics à l'aide de Terraform

Créé par Dhrubajyoti Mukherjee () et Jean-Francois Landreau () AWS AWS

Référentiel de code : Déployez CloudWatch les canaris Synthetics avec Terraform

Environnement : Production

Technologies : DevOps productivité des entreprises DevelopmentAndTesting, infrastructure, applications Web et mobiles

AWSservices : Amazon CloudWatch ; Amazon S3 ; Amazon SNS ; Amazon VPC ; AWS Identity and Access Management

Récapitulatif

Il est important de valider l'état d'un système du point de vue du client et de confirmer que les clients sont en mesure de se connecter. Cela est plus difficile lorsque les clients n'appellent pas constamment le terminal. Amazon CloudWatch Synthetics prend en charge la création de canaris, qui peuvent tester des points de terminaison publics et privés. En utilisant des canaris, vous pouvez connaître l'état d'un système même s'il n'est pas utilisé. Ces canaris sont soit des scripts Node.js Puppeteer, soit des scripts Python Selenium.

Ce modèle décrit comment utiliser HashiCorp Terraform pour déployer des canaris qui testent des points de terminaison privés. Il intègre un script Puppeteer qui teste si un revient. URL 200-OK Le script Terraform peut ensuite être intégré au script qui déploie le point de terminaison privé. Vous pouvez également modifier la solution pour surveiller les points de terminaison publics.

Conditions préalables et limitations

Prérequis

  • Un compte Amazon Web Services (AWS) actif avec un cloud privé virtuel (VPC) et des sous-réseaux privés

  • Le point URL de terminaison accessible depuis les sous-réseaux privés

  • Terraform installé dans l'environnement de déploiement

Limites

La solution actuelle fonctionne pour les versions d'exécution de CloudWatch Synthetics suivantes :

  • syn-nodejs-puppeteer-3,4

  • syn-nodejs-puppeteer-3,5

  • syn-nodejs-puppeteer-3,6

  • syn-nodejs-puppeteer-3,7

Au fur et à mesure que de nouvelles versions d'exécution sont publiées, vous devrez peut-être mettre à jour la solution actuelle. Vous devrez également modifier la solution pour suivre les mises à jour de sécurité.

Versions du produit

  • Terraform 1.3.0

Architecture

Amazon CloudWatch Synthetics est basé sur CloudWatch Lambda et Amazon Simple Storage Service (Amazon S3). Amazon CloudWatch propose un assistant pour créer les canaris et un tableau de bord qui affiche l'état des canaris. La fonction Lambda exécute le script. Amazon S3 stocke les journaux et les captures d'écran des Canary Runs.

Ce modèle simule un point de terminaison privé via une instance Amazon Elastic Compute Cloud (AmazonEC2) déployée dans les sous-réseaux ciblés. La fonction Lambda nécessite des interfaces réseau élastiques VPC là où le point de terminaison privé est déployé.

La description suit le schéma.

Le diagramme décrit les éléments suivants :

  1. Le Synthetics Canary lance la fonction Lambda Canary.

  2. La fonction Lambda Canary se connecte à l'interface Elastic Network.

  3. La fonction Canary Lambda surveille l'état du terminal.

  4. Le Synthetics Canary envoie les données d'exécution vers le compartiment S3 et les métriques. CloudWatch

  5. Une CloudWatch alarme est déclenchée sur la base des métriques.

  6. L' CloudWatch alarme lance la rubrique Amazon Simple Notification Service (AmazonSNS).

Outils

AWSservices

  • Amazon vous CloudWatch aide à surveiller les indicateurs de vos AWS ressources et des applications que vous utilisez AWS en temps réel.

  • AWSLambda est un service de calcul qui vous permet d'exécuter du code sans avoir à approvisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

  • Amazon Simple Notification Service (AmazonSNS) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.

  • Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

  • Amazon Virtual Private Cloud (AmazonVPC) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages de l'utilisation de l'infrastructure évolutive deAWS. Ce modèle utilise des VPC points de terminaison et des interfaces réseau élastiques.

Autres services

  • HashiCorp Terraform est un outil open source d'infrastructure sous forme de code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources cloud. Ce modèle utilise Terraform pour déployer l'infrastructure.

  • Puppeteer est une bibliothèque Node.js. Le runtime CloudWatch Synthetics utilise le framework Puppeteer.

Code

La solution est disponible dans le référentiel GitHub cloud watch-synthetics-canary -terraform. Pour plus d'informations, consultez la section Informations supplémentaires.

Épopées

TâcheDescriptionCompétences requises

Rassemblez les exigences relatives à la surveillance du privéURL.

Rassemblez la URL définition complète : domaine, paramètres et en-têtes. Pour communiquer en privé avec Amazon S3 et Amazon CloudWatch, utilisez des VPC points de terminaison. Notez comment les sous-réseaux VPC et sont accessibles au point de terminaison. Tenez compte de la fréquence des courses de canaris.

Architecte cloud, administrateur réseau

Modifiez la solution existante pour surveiller le privéURL.

Modifiez le terraform.tfvars fichier :

  • name— Le nom de votre canari.

  • runtime_version— La version d'exécution du Canary. Nous recommandons d'utiliser syn-nodejs-puppeteer -3.7.

  • take_screenshot— Si une capture d'écran doit être prise.

  • api_hostname— Le nom d'hôte du point de terminaison surveillé.

  • api_path— Le chemin du point de terminaison surveillé.

  • vpc_id— L'VPCID utilisé par la fonction Lambda Canary.

  • subnet_ids— Le sous-réseau IDs utilisé par la fonction Lambda Canary.

  • frequency— La fréquence de course du canari en minutes.

  • alert_sns_topic— Le SNS sujet auquel la notification CloudWatch d'alarme est envoyée.

Architecte du cloud

Déployez et exploitez la solution.

Pour déployer la solution, procédez comme suit :

  1. Depuis le cloudwatch-synthetics-canary-terraform répertoire de votre environnement de développement, initialisez Terraform.

    terraform init
  2. Planifiez et passez en revue les modifications.

    terraform plan
  3. Déployez la solution.

    terraform apply
Architecte cloud, DevOps ingénieur

Résolution des problèmes

ProblèmeSolution

La suppression des ressources provisionnées est bloquée.

Supprimez manuellement la fonction Lambda Canary, l'interface Elastic Network correspondante et le groupe de sécurité, dans cet ordre.

Ressources connexes

Informations supplémentaires

Artefacts du référentiel

La structure des artefacts du référentiel est la suivante.

. ├── README.md ├── main.tf ├── modules │   ├── canary │   └── canary-infra ├── terraform.tfvars ├── tf.plan └── variable.tf

Le main.tf fichier contient le module principal et déploie deux sous-modules :

  • canary-infradéploie l'infrastructure requise pour les canaris.

  • canarydéploie les canaris.

Les paramètres d'entrée de la solution se trouvent dans le terraform.tfvars fichier. Vous pouvez utiliser l'exemple de code suivant pour créer un canari.

module "canary" { source = "./modules/canary" name = var.name runtime_version = var.runtime_version take_screenshot = var.take_screenshot api_hostname = var.api_hostname api_path = var.api_path reports-bucket = module.canary_infra.reports-bucket role = module.canary_infra.role security_group_id = module.canary_infra.security_group_id subnet_ids = var.subnet_ids frequency = var.frequency alert_sns_topic = var.alert_sns_topic }

Le fichier .var correspondant suit.

name = "my-canary" runtime_version = "syn-nodejs-puppeteer-3.7" take_screenshot = false api_hostname = "mydomain.internal" api_path = "/path?param=value" vpc_id = "vpc_id" subnet_ids = ["subnet_id1"] frequency = 5 alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"

Nettoyage de la solution

Si vous testez cela dans un environnement de développement, vous pouvez nettoyer la solution pour éviter des coûts supplémentaires.

  1. Sur la console AWS de gestion, accédez à la console Amazon S3. Videz le compartiment Amazon S3 créé par la solution. Assurez-vous de faire une sauvegarde des données, si nécessaire.

  2. Dans votre environnement de développement, depuis le cloudwatch-synthetics-canary-terraform répertoire, exécutez la destroy commande.

    terraform destroy