[AWS] CloudWatch Synthetics에서 VPC 내외부 서비스 모니터링 시도
8470 단어 syntheticscanaryAWS
이번에 우리는 CloudWatch Synthetics를 사용하여 VPC의 안쪽과 바깥쪽에서 VPC 내에 구축된 사이트를 감시하려고 한다.
구성 시도:
1. VPC 준비
2.knowledge 구축
이번에는 감시 대상(동작이 있는 사이트라면 뭐든지)으로 Qiita와 비슷한 OSS의 Knowledge를 시도할 기회가 생겨서 사용했습니다.
이곳은 손댈 곳이 아니기 때문에 EC2Dockerhub 공용 이미지에서 그렇게 동작해 보았습니다.# docker run -d -p 8080:8080 koda/docker-knowledge:latest
시작 후 테스트용 글을 등록합니다.
3. CloudWatch Synthetics(Canary) 생성
여기서부터 본론이야.콘솔에서 CloudWatch Synthetics에서 Canary 만들기를 선택합니다.
생성 방법을 지정합니다.먼저 GUI 워크플로우 생성기를 시도합니다.
화면 아래에서 실행을 선택하십시오.이제 nodejs와python을 선택할 수 있습니다. 이번에python을 선택하십시오.
동일한 화면의 워크플로우 생성기에서 작업을 계속 설정합니다.다음 작업을 선택할 수 있습니다.
예를 들어, 검색 상자에 검색 키워드를 입력한 예는 다음과 같습니다.리본에서 를 클릭합니다.
같은 화면의 스크립트 편집기에서도 다음 코드가 자동으로 생성됩니다.# Execute customer steps
def customer_actions_1():
browser.find_element_by_xpath("//input[@id='navSearch'][contains(text(),'test')]")
await syn_webdriver.execute_step('verifyText', customer_actions_1)
마찬가지로 찾기 버튼을 누른 예에서 작업을 선택합니다. 클릭을 선택하고 선택기를 입력합니다.
이 지식 라이브러리 예시에서 id 속성도name 속성도 없기 때문에class로 검색을 강행합니다.자동으로 생성된 코드는 다음과 같습니다.# Execute customer steps
def customer_actions_1():
browser.find_element_by_xpath("//button[@class='btn-search']").click()
await syn_webdriver.execute_step('click', customer_actions_1)
이번에 최종적으로 다음과 같은 코드를 만들었다.내용은 설명과 같이 TopPage 액세스 → 검색 상자에 "test"를 입력하여 검색 → 검색 결과에 "test"가 있는지 확인합니다.import asyncio
from aws_synthetics.selenium import synthetics_webdriver as syn_webdriver
from aws_synthetics.common import synthetics_logger as logger, synthetics_configuration
TIMEOUT = 60
async def main():
private_url = "http://10.0.0.13:8080/open.knowledge/list"
public_url = "http://xx.xx.xx.xx:8080/open.knowledge/list"
browser = syn_webdriver.Chrome()
url = private_url # ここのみCanaryごとに編集
# synthetics設定(スクリーンショットの取得)
synthetics_configuration.set_config({
"screenshot_on_step_start" : True,
"screenshot_on_step_success": True,
"screenshot_on_step_failure": True
});
# TopPageにアクセス
def navigate_to_toppage():
browser.implicitly_wait(TIMEOUT)
browser.get(url)
await syn_webdriver.execute_step("navigateToTopPage", navigate_to_toppage)
# 検索ボックスにキーワード入力して検索
def input_search_word_and_search():
browser.find_element_by_xpath("//input[@id='navSearch']").send_keys("test")
browser.find_element_by_xpath("//button[@class='btn btn-default']").click()
await syn_webdriver.execute_step('inputSearchWordAndSearch', input_search_word_and_search)
# 記事があるか確認
def check_search_result():
browser.find_element_by_xpath("//div[@class='list-title'][contains(.,'test')]")
await syn_webdriver.execute_step('checkSearchResult', check_search_result)
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()
그 다음
# docker run -d -p 8080:8080 koda/docker-knowledge:latest
여기서부터 본론이야.콘솔에서 CloudWatch Synthetics에서 Canary 만들기를 선택합니다.
생성 방법을 지정합니다.먼저 GUI 워크플로우 생성기를 시도합니다.
화면 아래에서 실행을 선택하십시오.이제 nodejs와python을 선택할 수 있습니다. 이번에python을 선택하십시오.
동일한 화면의 워크플로우 생성기에서 작업을 계속 설정합니다.다음 작업을 선택할 수 있습니다.
예를 들어, 검색 상자에 검색 키워드를 입력한 예는 다음과 같습니다.리본에서 를 클릭합니다.
같은 화면의 스크립트 편집기에서도 다음 코드가 자동으로 생성됩니다.
# Execute customer steps
def customer_actions_1():
browser.find_element_by_xpath("//input[@id='navSearch'][contains(text(),'test')]")
await syn_webdriver.execute_step('verifyText', customer_actions_1)
마찬가지로 찾기 버튼을 누른 예에서 작업을 선택합니다. 클릭을 선택하고 선택기를 입력합니다.이 지식 라이브러리 예시에서 id 속성도name 속성도 없기 때문에class로 검색을 강행합니다.자동으로 생성된 코드는 다음과 같습니다.
# Execute customer steps
def customer_actions_1():
browser.find_element_by_xpath("//button[@class='btn-search']").click()
await syn_webdriver.execute_step('click', customer_actions_1)
이번에 최종적으로 다음과 같은 코드를 만들었다.내용은 설명과 같이 TopPage 액세스 → 검색 상자에 "test"를 입력하여 검색 → 검색 결과에 "test"가 있는지 확인합니다.import asyncio
from aws_synthetics.selenium import synthetics_webdriver as syn_webdriver
from aws_synthetics.common import synthetics_logger as logger, synthetics_configuration
TIMEOUT = 60
async def main():
private_url = "http://10.0.0.13:8080/open.knowledge/list"
public_url = "http://xx.xx.xx.xx:8080/open.knowledge/list"
browser = syn_webdriver.Chrome()
url = private_url # ここのみCanaryごとに編集
# synthetics設定(スクリーンショットの取得)
synthetics_configuration.set_config({
"screenshot_on_step_start" : True,
"screenshot_on_step_success": True,
"screenshot_on_step_failure": True
});
# TopPageにアクセス
def navigate_to_toppage():
browser.implicitly_wait(TIMEOUT)
browser.get(url)
await syn_webdriver.execute_step("navigateToTopPage", navigate_to_toppage)
# 検索ボックスにキーワード入力して検索
def input_search_word_and_search():
browser.find_element_by_xpath("//input[@id='navSearch']").send_keys("test")
browser.find_element_by_xpath("//button[@class='btn btn-default']").click()
await syn_webdriver.execute_step('inputSearchWordAndSearch', input_search_word_and_search)
# 記事があるか確認
def check_search_result():
browser.find_element_by_xpath("//div[@class='list-title'][contains(.,'test')]")
await syn_webdriver.execute_step('checkSearchResult', check_search_result)
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()
그 다음4. 테스트 및 결과 확인
테스트 결과는 다음과 같은 화면 스냅샷으로 표시됩니다.
전용 IP가 지정한 테스트 결과를 보십시오.실행 세부 정보에는 각 단계의 결과와 화면 스냅샷이 포함됩니다.
S3에 저장된 화면 스냅샷을 확인한 경우 읽어들이기 처리되었는지 확인할 수 있습니다.(주소 표시줄이 없기 때문에 결과는 완전히 같다) 공공 IP가 지정한 실행 결과도 똑같이 확인할 수 있다.
공공 액세스만 차단
테스트에서 EC2 보안 그룹을 변경하고 공용 IP 액세스를 거부하면 다음과 같은 오류가 발생합니다.저장된 캡처는 흰색 그림입니다.
전체적인 확인 결과를 보면 개인 IP 지정이 성공했음을 확인할 수 있다.둘 다 URL만 바꿔서 같은 스크립트를 실행하기 때문에 이런 상황에서 네트워크 경로에 문제가 있는지 추측할 수 있을 것 같습니다.
이번 검증 결과는 다음과 같다.
참고 자료
Reference
이 문제에 관하여([AWS] CloudWatch Synthetics에서 VPC 내외부 서비스 모니터링 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/VA_nakatsu/items/abf15ffcbb021bbe446a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)