撰寫 Python Canary 指令碼 - Amazon CloudWatch

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

撰寫 Python Canary 指令碼

此指令碼作為成功執行傳遞,並傳回一個字串。若想查看失敗的 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 檔案

如果您有多個 .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 使用

您可以快速修改 Python 和 Selenium 用作 Canary 的現有指令碼。如需 Selenium 的詳細資訊,請參閱 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 功能。

  2. 建立一個處理常式函數並呼叫您的 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。這是更新後的指令碼:

webdriverSyntheticsWebDriver 類別的執行個體,而 傳回的瀏覽器webdriver.Chrome()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 指令碼以驗證非標準憑證

Synthetics Canary 的一個重要使用案例是您監控自己的端點。如果您想要監控尚未準備好供外部流量使用的端點,此監控有時可能表示您沒有由信任的第三方憑證授權單位簽署的適當憑證。

此案例的兩個可能解決方案如下:

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

注意

在 Python 執行時間上執行的 Synthetics Canary 會先啟用 --ignore-certificate-errors旗標,因此這些 Canary 不應遇到任何使用非標準憑證組態到達網站的問題。