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 런타임을 사용하는 경우 functionNamehandler여야 합니다. syn-python-selenium-1.1 이상을 사용 중인 경우 이 핸들러 이름 제한은 적용되지 않으며 canary를 별도의 폴더에 저장할 수도 있습니다(예: python/myFolder/my_canary_filename.py). 별도의 폴더에 저장하는 경우 스크립트 진입점에 해당 경로를 지정합니다(예: myFolder/my_canary_filename.functionName).

기존 Selenium 스크립트를 변경하여 Synthetics canary로 사용

canary로 사용할 기존의 Python 및 Selenium 스크립트를 빠르게 수정할 수 있습니다. 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()

변환 단계는 다음과 같습니다.

canary로 사용할 Selenium 스크립트를 변환하려면
  1. 다음과 같이 aws_synthetics 모듈의 Selenium을 사용하도록 import 문을 변경합니다.

    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는 비표준 인증서 구성을 가진 사이트에 도달하는 데 문제가 없어야 합니다.