Implementa i canarini CloudWatch Synthetics utilizzando Terraform - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementa i canarini CloudWatch Synthetics utilizzando Terraform

Creato da Dhrubajyoti Mukherjee (AWS) e Jean-Francois Landreau (AWS)

Archivio di codice: distribuisci i canari Synthetics CloudWatch con Terraform

Ambiente: produzione

Tecnologie: DevOps; Produttività aziendale DevelopmentAndTesting; Infrastruttura; App Web e mobili

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

Riepilogo

È importante convalidare lo stato di un sistema dal punto di vista del cliente e confermare che i clienti siano in grado di connettersi. Ciò è più difficile quando i clienti non chiamano costantemente l'endpoint. Amazon CloudWatch Synthetics supporta la creazione di canaries, in grado di testare endpoint pubblici e privati. Utilizzando canaries, puoi conoscere lo stato di un sistema anche se non è in uso. Questi canarini sono script Node.js Puppeteer o script Python Selenium.

Questo modello descrive come utilizzare HashiCorp Terraform per distribuire canary che testano endpoint privati. Incorpora uno script Puppeteer che verifica se viene restituito un URL. 200-OK Lo script Terraform può quindi essere integrato con lo script che distribuisce l'endpoint privato. Puoi anche modificare la soluzione per monitorare gli endpoint pubblici.

Prerequisiti e limitazioni

Prerequisiti

  • Un account Amazon Web Services (AWS) attivo con un cloud privato virtuale (VPC) e sottoreti private

  • L'URL dell'endpoint raggiungibile dalle sottoreti private

  • Terraform installato nell'ambiente di distribuzione

Limitazioni

La soluzione attuale funziona per le seguenti versioni di runtime di CloudWatch Synthetics:

  • syn-nodejs-puppeteer-3.4

  • syn-nodejs-puppeteer-3,5

  • syn-nodejs-puppeteer-3,6

  • syn-nodejs-puppeteer-3,7

Man mano che vengono rilasciate nuove versioni di runtime, potrebbe essere necessario aggiornare la soluzione corrente. Sarà inoltre necessario modificare la soluzione per stare al passo con gli aggiornamenti di sicurezza.

Versioni del prodotto

  • Terraform 1.3.0

Architettura

Amazon CloudWatch Synthetics è basato su CloudWatch, Lambda e Amazon Simple Storage Service (Amazon S3). Amazon CloudWatch offre una procedura guidata per creare i canarini e una dashboard che mostra lo stato delle corse dei canarini. La funzione Lambda esegue lo script. Amazon S3 archivia i log e gli screenshot delle corse Canary.

Questo modello simula un endpoint privato tramite un'istanza Amazon Elastic Compute Cloud (Amazon EC2) distribuita nelle sottoreti di destinazione. La funzione Lambda richiede interfacce di rete elastiche nel VPC in cui viene distribuito l'endpoint privato.

La descrizione segue il diagramma.

Il diagramma mostra:

  1. Il canarino Synthetics avvia la funzione Lambda canary.

  2. La funzione Lambda canary si connette all'interfaccia elastic network.

  3. La funzione Lambda canary monitora lo stato dell'endpoint.

  4. Il Synthetics Canary invia i dati di esecuzione al bucket e alle metriche S3. CloudWatch

  5. Viene avviato un CloudWatch allarme in base alle metriche.

  6. L' CloudWatch allarme avvia l'argomento Amazon Simple Notification Service (Amazon SNS).

Strumenti

Servizi AWS

  • Amazon ti CloudWatch aiuta a monitorare i parametri delle tue risorse AWS e delle applicazioni che esegui su AWS in tempo reale.

  • AWS Lambda è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.

  • Amazon Simple Notification Service (Amazon SNS) ti aiuta a coordinare e gestire lo scambio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail.

  • Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

  • Amazon Virtual Private Cloud (Amazon VPC) ti aiuta a lanciare le risorse AWS in una rete virtuale che hai definito. Questa rete virtuale è simile a una rete tradizionale che gestiresti nel tuo data center, con i vantaggi dell'utilizzo dell'infrastruttura scalabile di AWS. Questo modello utilizza endpoint VPC e interfacce di rete elastiche.

Altri servizi

  • HashiCorp Terraform è uno strumento open source di infrastruttura come codice (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. Questo modello utilizza Terraform per implementare l'infrastruttura.

  • Puppeteer è una libreria Node.js. Il runtime CloudWatch Synthetics utilizza il framework Puppeteer.

Codice

La soluzione è disponibile nel repository cloud. GitHub watch-synthetics-canary-terraform Per ulteriori informazioni, consulta la sezione Informazioni aggiuntive.

Epiche

AttivitàDescrizioneCompetenze richieste

Raccogli i requisiti per il monitoraggio dell'URL privato.

Raccogli la definizione completa dell'URL: dominio, parametri e intestazioni. Per comunicare in privato con Amazon S3 e CloudWatch Amazon, utilizza gli endpoint VPC. Nota come il VPC e le sottoreti sono accessibili all'endpoint. Considerate la frequenza delle corse dei canarini.

Architetto del cloud, amministratore di rete

Modifica la soluzione esistente per monitorare l'URL privato.

Modifica il terraform.tfvars file:

  • name— Il nome del tuo canarino.

  • runtime_version— La versione runtime del canarino. Si consiglia di utilizzare syn-nodejs-puppeteer -3.7.

  • take_screenshot— Se è necessario scattare uno screenshot.

  • api_hostname— Il nome host dell'endpoint monitorato.

  • api_path— Il percorso dell'endpoint monitorato.

  • vpc_id— L'ID VPC utilizzato dalla funzione Lambda canary.

  • subnet_ids— Gli ID di sottorete utilizzati dalla funzione Lambda canary.

  • frequency— La frequenza di funzionamento del canarino in minuti.

  • alert_sns_topic— L'argomento SNS a cui viene inviata la notifica di CloudWatch allarme.

Architetto del cloud

Implementa e gestisci la soluzione.

Per distribuire la soluzione, procedi come segue:

  1. Dalla cloudwatch-synthetics-canary-terraform directory del tuo ambiente di sviluppo, inizializza Terraform.

    terraform init
  2. Pianifica e rivedi le modifiche.

    terraform plan
  3. Distribuire la soluzione.

    terraform apply
Architetto del cloud, DevOps ingegnere

Risoluzione dei problemi

ProblemaSoluzione

L'eliminazione delle risorse assegnate si blocca.

Elimina manualmente la funzione Canary Lambda, l'elastic network interface corrispondente e il gruppo di sicurezza, in quest'ordine.

Risorse correlate

Informazioni aggiuntive

Artefatti del repository

Gli artefatti del repository hanno la seguente struttura.

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

Il main.tf file contiene il modulo principale e distribuisce due sottomoduli:

  • canary-infraimplementa l'infrastruttura necessaria per le isole canarie.

  • canarydispiega i canarini.

I parametri di input per la soluzione si trovano nel terraform.tfvars file. È possibile utilizzare il seguente esempio di codice per creare un canarino.

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 }

Segue il file.var corrispondente.

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"

Pulizia della soluzione

Se si esegue il test in un ambiente di sviluppo, è possibile ripulire la soluzione per evitare costi aggiuntivi.

  1. Nella Console di gestione AWS, accedi alla console Amazon S3. Svuota il bucket Amazon S3 creato dalla soluzione. Assicurati di eseguire un backup dei dati, se necessario.

  2. Nel tuo ambiente di sviluppo, dalla cloudwatch-synthetics-canary-terraform directory, esegui il destroy comando.

    terraform destroy