日: 2023年6月15日

  • AWS CloudWatch Logsからユーザーエージェントデータを分析し、OSとブラウザのシェアを視覚化する

    AWS CloudWatch Logsからユーザーエージェントデータを分析し、OSとブラウザのシェアを視覚化する

    イントロダクション:

    AWS CloudWatch Logsは、AWSリソース、アプリケーション、サービスのログデータを監視して保存するためのサービスです。

    この記事では、CloudWatch Logsからユーザーエージェントデータを収集し、PythonとGoogle スプレッドシートを使用してOSとブラウザのシェアを視覚化する方法を解説します。

    これはウェブサイトやアプリケーションのユーザー体験を最適化するために非常に有益です。

    手順1: CloudWatch Logsからログを取得する

    まず、CloudWatch Logsからユーザーエージェントデータを含むログを取得する必要があります。

    AWS Management Consoleにログインし、CloudWatch Logsのページに移動します。

    1. ロググループを選択し、ログストリームを開きます。

    2. クエリを使用してログデータをフィルターします。以下は、ユーザーエージェント情報を含むログエントリを抽出するサンプルクエリです。

    fields @timestamp, @message
    | parse @message /(?<ip>[\d\.]+) - - \[(?<timestamp>[^\]]+)\] "(?<http_method>[^"]+)" (?<status_code>[^ ]+) (?<size>[^ ]+) "(?<referrer>[^"]*)" "(?<user_agent>[^"]+)"/
    | stats count(*) by user_agent
    1. 上記のクエリをCloudWatch Logs Insightsのクエリエディタに貼り付け、実行します。

    2. 結果をCSVファイルとしてエクスポートします。

    手順2: Pythonを使用してログデータを解析する

    ログデータが得られたら、Pythonを使用して分析します。

    この記事では、user_agentsというPythonライブラリを使用します。

    このライブラリは、ユーザーエージェント文字列を解析して、デバイス、OS、ブラウザに関する情報を抽出するのに役立ちます。

    user_agents ライブラリをインストールします。

    pip install pyyaml ua-parser user-agents

    次に、以下のPythonスクリプトを使用して、ユーザーエージェント文字列からデバイス、OSバージョン、ブラウザ、ブラウザバージョンを抽出し、CSVファイルに出力します。

    import csv
    from user_agents import parse
    # ログファイルの読み込み
    with open('logs.csv', 'r') as file:
    logs = csv.DictReader(file)
    # 結果を保存するためのリスト
    results = []
    # 各ログエントリを処理
    for log in logs:
    user_agent = log['user_agent']
    count = log['count']
    # user_agents ライブラリでユーザーエージェント文字列を解析
    ua = parse(user_agent)
    device_type = 'Mobile' if ua.is_mobile else 'Tablet' if ua.is_tablet else 'PC'
    os = f"{ua.os.family} {ua.os.version_string}"
    browser = f"{ua.browser.family}"
    browser_version = f"{ua.browser.version_string}"
    # 結果をリストに追加
    results.append([device_type, os, browser, browser_version, count])
    # 結果を新しいCSVファイルに出力
    with open('parsed_logs.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Device', 'OS Version', 'Browser', 'Browser Version', 'Count'])
    writer.writerows(results)

    手順3: Google スプレッドシートでデータを視覚化する

    最後に、Google スプレッドシートでデータを視覚化します。

    1. Google スプレッドシートを開き、手順2で生成された parsed_logs.csv をインポートします。

    2. ピボットテーブルを作成します。これには、データ範囲を選択し、「データ」メニューから「ピボットテーブル」を作成します。

    3. ピボットテーブルエディターで、「行」に分析したいカテゴリ(例:Device, OS Version, Browser)を追加し、「値」に「Count」を追加して合計を計算します。

    4. ピボットテーブルのデータを選択し、「挿入」メニューから「グラフ」を選択して円グラフを作成します。これで、OSやブラウザのシェアを視覚化することができます。

    結論:

    CloudWatch Logsからのログデータ分析は、アプリケーションのパフォーマンスとユーザー体験を向上させるのに役立つ重要なステップです。

    このチュートリアルでは、Pythonのuser_agents ライブラリを使用してユーザーエージェントデータを解析し、Google スプレッドシートで視覚化する方法を紹介しました。

    この情報は、デバイスやブラウザの最適化、または特定のOSバージョン向けの機能開発に役立てれば幸いです。

  • Cognito 認証情報を活用した AWS Lambda の効果的なユーザー管理

    Cognito 認証情報を活用した AWS Lambda の効果的なユーザー管理

    導入

    現代のビジネス環境において、アプリケーションのセキュリティとユーザー管理は重要な柱です。AWS Lambda と Amazon Cognito を組み合わせることで、高度にスケーラブルでセキュアなサービスを効率よく構築できます。本記事では、Amazon Cognito で認証されたユーザーの情報を AWS Lambda で取得し、ビジネスプロセスに統合する方法に焦点を当てます。

    ビジネスの利点

    Amazon Cognito と AWS Lambda の組み合わせは、以下のビジネス上の利点を提供します。

    • セキュリティの強化: ユーザー認証情報を適切に処理することで、不正アクセスを防ぎます。
    • コスト効率: サーバーレスアーキテクチャを利用することで、リソースの利用に応じて課金され、余分なコストを削減します。
    • 拡張性: 需要に応じて自動的にスケールします。これにより、ビジネスが拡大してもパフォーマンスが維持されます。

    実装

    以下は、AWS Lambda 関数で Cognito の認証が通ったユーザーからメールアドレスを取得するステップバイステップのガイドです。

    ステップ1: IDトークンの取得

    まず、AWS Lambda 関数で HTTP リクエストのヘッダーから ID トークンを取得します。これは、Amazon Cognito によって発行された JWT(JSON Web Token)です。

    id_token = request.headers.get("x-amzn-oidc-data", "")

    ステップ2: トークンのデコード

    次に、JWT のペイロード部分をデコードします。JWT は3つの部分(ヘッダー、ペイロード、署名)で構成されており、ペイロードにはユーザー情報が含まれています。

    token_parts = id_token.split('.')
    payload_encoded = token_parts[1]
    padding_needed = 4 - len(payload_encoded) % 4
    payload_encoded += "=" * padding_needed
    payload_decoded = base64.b64decode(payload_encoded)
    payload_json = json.loads(payload_decoded.decode("utf-8"))

    ステップ3: メールアドレスの抽出

    最後に、デコードされたペイロードからメールアドレスを抽出します。

    email = payload_json['email']

    まとめ

    Amazon CognitoとAWS Lambdaを組み合わせることで、セキュアでスケーラブルなユーザー管理を実現し、ビジネスプロセスを効率化することができます。ユーザー認証情報の適切な処理は、アプリケーションのセキュリティを強化し、顧客の信頼を築く上で不可欠です。

    今回解説した方法を使用すると、簡潔にユーザーのメールアドレスを取得でき、これをビジネスロジックやユーザー通知など、さまざまな用途で活用することができます。