パーソンリンク アドベントカレンダー 3日目です🎉
案件で外部監視のために調査したAWSの機能紹介をします。
概要
CloudWatch Syntheticsとは、CloudWatchの機能の一つで外部監査を実現するサービスです。
外部監視とは外部から見た接続状況の監視です。
CloudWatch Syntheticsを利用するためにまずCanaryを作成します。
Canaryとはスケジュールに沿って実行されるスクリプトであり、実態はLambdaレイヤです。
Canaryの設計図にGUIワークフロービルダーを選ぶと、フォーム形式で検証するためのアクションを指定できます。
要素のクリックや存在確認などを行えるため、死活監視だけでなく簡単なE2Eテストもできます。
セレクタはXpath指定です。
上記アクションをそれぞれ指定した際のPythonのスクリプトです。
customer_actions_1などの関数が、フォームで指定したアクションになります。
import asyncio
from aws_synthetics.selenium import synthetics_webdriver as syn_webdriver
from aws_synthetics.common import synthetics_logger as logger, synthetics_configuration
TIMEOUT = 10
async def main():
url = "https://example.com"
browser = syn_webdriver.Chrome()
# Set synthetics configuration
synthetics_configuration.set_config({
"screenshot_on_step_start" : True,
"screenshot_on_step_success": True,
"screenshot_on_step_failure": True
});
# ページがロードできることを確認する
def navigate_to_page():
browser.implicitly_wait(TIMEOUT)
browser.get(url)
await syn_webdriver.execute_step("navigateToUrl", navigate_to_page)
# Execute customer steps
# ページ内の要素をクリックする
def customer_actions_1():
browser.find_element_by_xpath("//h1[@id='success']").click()
await syn_webdriver.execute_step('click', customer_actions_1)
# 要素が存在することを確認する
def customer_actions_2():
browser.find_element_by_xpath("//h1[@id='success']")
await syn_webdriver.execute_step('verifySelector', customer_actions_2)
# ターゲット要素内の文字列を確認する
def customer_actions_3():
browser.find_element_by_xpath("//h1[@id='success'][contains(text(),'sample text')]")
await syn_webdriver.execute_step('verifyText', customer_actions_3)
# ターゲット要素にテキストを入力する
def customer_actions_4():
browser.find_element_by_xpath("//h1[@id='success']").send_keys("sample text")
await syn_webdriver.execute_step('input', customer_actions_4)
# 要素をクリックしてナビゲーションを期待する
def customer_actions_5():
browser.find_element_by_xpath("//h1[@id='success']").click()
await syn_webdriver.execute_step('redirection', customer_actions_5)
logger.info("Canary successfully executed")
async def handler(event, context):
# user defined log statements using synthetics_logger
logger.info("Selenium Python workflow canary")
return await main()
確認
可用性 > Step のタブで実行結果が確認できます。
削除
検証用などで消す場合、Canaryによって作成された関連リソースは自動的に削除されないので、以下も削除する必要があります。
・Lambda関数とレイヤー
・CloudWatchアラーム
・CloudWatchLogsのロググループ
・AmazonS3オブジェクトとバケット
・IAMロール
参考