Scrivere uno script canary Python - Amazon CloudWatch

Scrivere uno script canary Python

Questo script passa come esecuzione riuscita e restituisce una stringa. Per vedere come appare un canary fallito, passare “fail = False” a “fail = True”

def basic_custom_script(): # Insert your code here # Perform multi-step pass/fail check # Log decisions made and results to /tmp # Be sure to wait for all your code paths to complete # before returning control back to Synthetics. # In that way, your canary will not finish and report success # before your code has finished executing fail = False if fail: raise Exception("Failed basicCanary check.") return "Successfully completed basicCanary checks." def handler(event, context): return basic_custom_script()

Impacchettamento dei file canary Python

Se disponi di più di un file .py o lo script ha una dipendenza, puoi raggrupparli tutti in un unico file ZIP. Se utilizzi il runtime syn-python-selenium-1.1, il file ZIP deve contenere il file del canary principale con estensione py all'interno di una cartella python, ad esempio python/my_canary_filename.py. Se utilizzi un tempo syn-python-selenium-1.1 o successivo, puoi utilizzare una cartella diversa, ad·esempio python/myFolder/my_canary_filename.py.

Questo file ZIP deve contenere tutte le cartelle e i file necessari, ma gli altri file non devono essere presenti nella cartella python.

Assicurati di impostare il punto di ingresso dello script del tuo canary in modo che my_canary_filename.functionName corrisponda al nome del file e al nome della funzione del punto di ingresso dello script. Se utilizzi il runtime syn-python-selenium-1.0, functionName deve corrispondere·a handler. Se utilizzi un tempo syn-python-selenium-1.1 o successivo, questa limitazione del nome del gestore non si applica e puoi anche archiviare il canary in una cartella separata, ad esempio python/myFolder/my_canary_filename.py. Se lo archivi in una cartella separata, definisci il percorso nel punto di ingresso dello script, ad esempio myFolder/my_canary_filename.functionName.

Modifica di uno script Selenium esistente da utilizzare come canary di Synthetics

Puoi modificare rapidamente uno script esistente per Python e Selenium da utilizzare come canary. Per ulteriori informazioni su Selenium, consulta www.selenium.dev/.

Per questo esempio, inizieremo con il seguente script Selenium:

from selenium import webdriver def basic_selenium_script(): browser = webdriver.Chrome() browser.get('https://example.com') browser.save_screenshot('loaded.png') basic_selenium_script()

Le fasi di conversione sono le seguenti.

Per convertire uno script selenio da usare come canary
  1. Modifica l'istruzione import per utilizzare Selenium dal modulo aws_synthetics:

    from aws_synthetics.selenium import synthetics_webdriver as webdriver

    Il modulo Selenium di aws_synthetics assicura che il canary possa emettere parametri e log, generare un file HAR e lavorare con altre funzionalità di CloudWatch Synthetics.

  2. Crea una funzione del gestore e chiama il tuo metodo Selenium. Il gestore è la funzione del punto di ingresso per lo script.

    Se utilizzi un tempo syn-python-selenium-1.0, la funzione del gestore deve essere denominata handler. Se utilizzi un tempo syn-python-selenium-1.1 o successivo, la funzione può avere un nome qualsiasi, purché corrisponda a quello utilizzato nello script. Inoltre, se utilizzi un tempo syn-python-selenium-1.1 o successivo, puoi archiviare gli script in qualsiasi cartella e definire quest'ultima nel nome del gestore.

    def handler(event, context): basic_selenium_script()

Lo script viene ora aggiornato per essere un canary di CloudWatch Synthetics. Ecco lo script aggiornato:

Il webdriver è un'istanza della classe SyntheticsWebDriver e il browser restituito da webdriver.Chrome() è un'istanza di SyntheticsBrowser.

from aws_synthetics.selenium import synthetics_webdriver as webdriver def basic_selenium_script(): browser = webdriver.Chrome() browser.get('https://example.com') browser.save_screenshot('loaded.png') def handler(event, context): basic_selenium_script()

Modifica di uno script Puppeteer Synthetics esistente per autenticare certificati non standard

Un caso d'uso importante per i canary di Synthetics è il monitoraggio dei propri endpoint. Se vuoi monitorare un endpoint che non è ancora pronto per il traffico esterno, questo tipo di monitoraggio può talvolta implicare l'assenza di un certificato valido firmato da un'autorità di certificazione terza e affidabile.

Due possibili soluzioni a questo scenario sono le seguenti:

Non sei limitato a queste due opzioni quando usi i canary CloudWatch Synthetics. Puoi estendere queste funzionalità e aggiungere la tua logica aziendale ampliando il codice canary.

Nota

I canary Synthetics in esecuzione su runtime Python hanno nativamente il flag --ignore-certificate-errors abilitato, quindi non dovrebbero avere problemi a raggiungere siti con configurazioni di certificati non standard.