がじぇ

お金と家電とプログラミングのブログ

AWS LambdaからAutifyのテスト結果を取得→失敗していたらPagerDutyで通知させるスクリプト

TL;DR(要約)

  • このコードは、AWS Lambdaを使用してAutifyのAPIを呼び出し、テスト結果を取得するPythonスクリプトです。
  • 取得した結果が失敗の場合、PagerDutyに通知します。
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)

コードの解説

以下、コードの解説を行います。

  1. 必要なライブラリをインポートします。

    • sys, os, traceback, json, boto3, logging, requests, pypd
  2. ロガーを設定します。

    • ログレベルをINFOに設定しています。
  3. 環境変数からAutify APIキー、Autify URL、PagerDutyのインテグレーションキーを取得します。

  4. lambda_handler関数を定義します。

    • AutifyのAPIを呼び出して、テストの実行結果を取得します。
    • 取得したテスト結果のリストから最新のテスト結果を取得し、それが成功か失敗かを判断します。
    • テストが成功した場合、ログに成功メッセージを出力します。
    • テストが失敗した場合、PagerDutyに通知します。
  5. メイン関数でlambda_handler関数を呼び出します。

    • エラーが発生した場合、スタックトレースをログに出力し、終了ステータス1で終了します。
    • 最後に終了ステータス0で終了します。

Autifyのテスト結果を監視し、問題が発生した場合にPagerDutyを通じて通知することで、開発チームが迅速に対応できるようになります。

これにより、問題が長期間放置されることを防ぎ、サービスの品質向上に貢献します。