

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à.

# Scrivere uno script canary Python
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python"></a>

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
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_package"></a>

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
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_Selenium"></a>

Puoi modificare rapidamente uno script esistente per Python e Selenium da utilizzare come canary. [Per ulteriori informazioni su Selenium, vedere www.selenium.dev/.](https://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 canarino possa emettere metriche e registri, generare un file HAR e funzionare con altre funzionalità di Synthetics. CloudWatch 

1. 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 è ora aggiornato per essere un canarino CloudWatch Synthetics. Ecco lo script aggiornato:

`webdriver`È un'istanza della classe [ SyntheticsWebDriver](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver)e il browser restituito da `webdriver.Chrome()` è un'istanza di. [ SyntheticsBrowser](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_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
<a name="Canaries_Non-Standard_Certificates"></a>

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:
+ Per autenticare un certificato client, consulta [Come convalidare l'autenticazione utilizzando Amazon Synthetics CloudWatch ](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-using-amazon-cloudwatch-synthetics-part-2/) — Parte 2.
+ Per autenticare un certificato autofirmato, consulta [Come convalidare l'autenticazione con certificati autofirmati](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-with-self-signed-certificates-in-amazon-cloudwatch-synthetics/) in Amazon Synthetics CloudWatch

Non sei limitato a queste due opzioni quando usi i canarini 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.