AWS LambdaからAutifyのテスト結果を取得→失敗していたらPagerDutyで通知させるスクリプト
TL;DR(要約)
import sys
import os
import traceback
import json
import boto3
import logging
import requests
import pypd
# logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)
AUTIFY_API_KEY = os.environ["AUTIFY_API_KEY"]
AUTIFY_URL = os.environ["AUTIFY_URL"]
PAGERDUTY_INTEGRATION_KEY = os.environ["PAGERDUTY_INTEGRATION_KEY"]
def lambda_handler(event, context):
"""
AutifyのAPIを叩き、テストの実行結果を取得する。取得した結果が失敗の場合PagerDutyに通知する
"""
logger.info("func: {}".format(sys._getframe().f_code.co_name))
logger.info(f"event: {event}")
headers = {
"Authorization": "Bearer {}".format(AUTIFY_API_KEY)
}
r = requests.get(AUTIFY_URL, headers=headers)
test_results_list = r.json()
logger.info(f"test_results_list: {test_results_list}")
# 最新のテスト結果
latest_test_results = test_results_list[0]
logger.info(f"latest_test_results: {latest_test_results}")
print(latest_test_results)
latest_test_status = latest_test_results["status"]
if latest_test_status == "passed":
logger.info("message: The Autify Test Status was Success.")
return 200
# テスト結果
pypd.EventV2.create(data={
'routing_key': PAGERDUTY_INTEGRATION_KEY,
'event_action': 'trigger',
'payload': {
'summary': 'Autify Test Failed',
'severity': 'error',
'source': 'Autify Test Failed',
}
})
logger.info("message: The Autify Test was Failed, Notfiy Pagerduty.")
return 200
if __name__ == '__main__':
try:
# lambda_handler("event", "context")
lambda_handler(event, context)
except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info()
stack_trace = traceback.format_exception(
exc_type, exc_value, exc_traceback)
logger.error(''.join(stack_trace))
sys.exit(1)
finally:
sys.exit(0)
コードの解説
以下、コードの解説を行います。
必要なライブラリをインポートします。
- sys, os, traceback, json, boto3, logging, requests, pypd
ロガーを設定します。
- ログレベルをINFOに設定しています。
lambda_handler関数を定義します。- AutifyのAPIを呼び出して、テストの実行結果を取得します。
- 取得したテスト結果のリストから最新のテスト結果を取得し、それが成功か失敗かを判断します。
- テストが成功した場合、ログに成功メッセージを出力します。
- テストが失敗した場合、PagerDutyに通知します。
メイン関数で
lambda_handler関数を呼び出します。- エラーが発生した場合、スタックトレースをログに出力し、終了ステータス1で終了します。
- 最後に終了ステータス0で終了します。
Autifyのテスト結果を監視し、問題が発生した場合にPagerDutyを通じて通知することで、開発チームが迅速に対応できるようになります。
これにより、問題が長期間放置されることを防ぎ、サービスの品質向上に貢献します。
