

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 撰寫 Python Canary 指令碼
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python"></a>

此指令碼作為成功執行傳遞，並傳回一個字串。若想查看失敗的 Canary 看起來是什麼樣子，請將 fail = False 變更為 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()
```

## 封裝 Python Canary 檔案
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_package"></a>

如果您有多個 .py 檔案，或者指令碼具有相依性，則可將其全部封裝到單一 ZIP 檔案中。如果您使用 `syn-python-selenium-1.1` 執行時間，ZIP 檔案在 `python` 資料夾中必須包含主要 Canary .py 檔案，例如 `python/my_canary_filename.py`。如果您使用的是 ` syn-python-selenium-1.1` 或更高版本，您可以選擇使用其他資料夾，例如 `python/myFolder/my_canary_filename.py`。

此 ZIP 檔案應包含所有必要的資料夾和檔案，但其他檔案不需要位於 `python` 資料夾中。

請務必將 Canary 的指令碼進入點設定為 ` my_canary_filename.functionName`，以符合指令碼進入點的檔案名稱和函數名稱。如果您使用的是 `syn-python-selenium-1.0` 執行時間，則 `functionName` 必須為 `handler`。如果您使用的是 ` syn-python-selenium-1.1` 或更高版本，此處理常式名稱限制就不適用，您還可以選擇將 Canary 存放在單獨的資料夾 (例如 ` python/myFolder/my_canary_filename.py`) 中。如果將其存放在單獨的資料夾中，請在指令碼進入點中指定該路徑，例如 ` myFolder/my_canary_filename.functionName`。

## 變更現有的 Selenium 指令碼以作為 Synthetics Canary 使用
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_Selenium"></a>

您可以快速修改 Python 和 Selenium 用作 Canary 的現有指令碼。如需 Selenium 的詳細資訊，請參閱 [ www.selenium.dev/。](https://www.selenium.dev/)

在此範例中，我們會從以下 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()
```

轉換步驟如下。

**若要將 Selenium 指令碼轉換可用作 Canary**

1. 將變更 `import` 陳述式，以使用來自 ` aws_synthetics` 模組的 Selenium：

   ```
   from aws_synthetics.selenium import synthetics_webdriver as webdriver
   ```

   來自 `aws_synthetics` 的 Selenium 模組可確保 Canary 能發射指標和日誌，產生 HAR 檔案，並使用其他 CloudWatch Synthetics 功能。

1. 建立一個處理常式函數並呼叫您的 Selenium 方法。處理常式是指令碼的進入點函數。

   如果您使用的是 `syn-python-selenium-1.0`，則處理常式函數必須命名為 `handler`。如果您使用的是 `syn-python-selenium-1.1` 或更高版本，函數可以具有任何名稱，但其必須與指令碼中使用的名稱相同。另外，如果您使用的是 `syn-python-selenium-1.1` 或更高版本，您可以將指令碼存放在任何資料夾下，並將該資料夾指定為處理常式名稱的一部分。

   ```
   def handler(event, context):
       basic_selenium_script()
   ```

指令碼現在已更新為 CloudWatch Synthetics Canary。這是更新後的指令碼：

`webdriver` 是 [ SyntheticsWebDriver](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver) 類別的執行個體，而 傳回的瀏覽器`webdriver.Chrome()`是 [ 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()
```

## 變更現有的 Puppeteer Synthetics 指令碼以驗證非標準憑證
<a name="Canaries_Non-Standard_Certificates"></a>

Synthetics Canary 的一個重要使用案例是您監控自己的端點。如果您想要監控尚未準備好處理外部流量的端點，此類監控有時意味著您可能未持有由可信第三方憑證授權機構簽署的有效憑證。

針對這種情況，有兩種可行的解決方案如下：
+ 若要驗證用戶端憑證，請參閱[如何使用 Amazon CloudWatch Synthetics 驗證身分驗證 – 第 2 部分](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-using-amazon-cloudwatch-synthetics-part-2/)。
+ 若要驗證自我簽署憑證，請參閱[如何在 Amazon CloudWatch Synthetics 中使用自我簽署憑證驗證身分驗證](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-with-self-signed-certificates-in-amazon-cloudwatch-synthetics/)

當您使用 CloudWatch Synthetics Canary 時，不限於這兩個選項。您可以透過擴展 Canary 程式碼來擴展這些功能，並新增商業邏輯。

**注意**  
在 Python 執行時期上執行的 Synthetics Canary 會先啟用 ` --ignore-certificate-errors` 旗標，因此這些 Canary 應該能夠順利存取採用非標準憑證組態的網站。