はじめに
この記事は ハンズラボ Advent Calendar 2020 13日目の記事です。
Lambdaで実行計測を取りたくて始めたX-Rayでしたが、Djangoも出来そうだったので試してみました。
確認環境
- macOS
- python 3.7.8
- Django 3.1.4
AWS X-Ray デーモン
ローカルから実行するためにデーモンを公式からダウンロードします。
以下からOS X (実行可能ファイル)をダウンロードしてください。
https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-daemon.html
ZIPファイルがダウンロードされるので任意の場所に解凍してください。
# 解凍後作業ディレクトリを移動
cd ~/Downloads/aws-xray-daemon-macos-3.x
# 起動
./xray_mac -o -n ap-northeast-1
X-Ray IAM 作成
AWS管理コンソールから以下のAWS管理ポリシーを持つ、IAMユーザーを作成して認証情報を取得してください。
- AWSXrayWriteOnlyAccess
X-Ray プロファイル設定
取得した認証情報でデフォルトプロファイルを設定してください。
[default]
region = ap-northeast-1
output = json
[default]
aws_access_key_id = xxxxx
aws_secret_access_key = yyyyy
Django のセットアップ
# 作業ディレクトリ作成(任意)
mkdir ~/LocalProjects/django-xray
# 仮想環境の作成
python -m venv ~/envs/django-xray
# アクティベート
source ~/envs/django-xray/bin/activate
# バージョン
python --version
Python 3.7.8
# Django インストール
pip install Django
# x-ray インストール
pip install aws-xray-sdk
# Django バージョン
python -m django --version
3.1.4
# 作業ディレクトリ移動
cd ~/LocalProjects/django-xray
# Django プロジェクト新規作成
django-admin startproject mysite
# テストDB作成
./manage.py migrate
# テストユーザー作成
./manage.py createsuperuser
Username (leave blank to use 'daisuke-araki'): (任意)
Email address: (未入力)
Password: (任意)
Password (again): (任意)
Superuser created successfully.
Django の設定
X-Rayを使えるようにするために設定を変更します。
https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-sdk-python-configuration.html
AWS X-Ray ミドルウェアを追加する
1行目を追加します。
MIDDLEWARE = [
'aws_xray_sdk.ext.django.middleware.XRayMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'aws_xray_sdk.ext.django',
]
XRAY_RECORDER = {
'AUTO_INSTRUMENT': True,
'AWS_XRAY_CONTEXT_MISSING': 'LOG_ERROR',
'AWS_XRAY_DAEMON_ADDRESS': '127.0.0.1:2000',
'AWS_XRAY_TRACING_NAME': 'My application',
'SAMPLING': False,
}
動作確認
# Django の起動
./manage.py runserver 18080
ブラウザからDjango管理画面を開く
Safari で確認しました。
-
http://localhost:18080/admin/
を開く。 - 先程作成したユーザーでログインします。
- ユーザーを新規追加します。
結果の確認
AWS管理コンソールから X-Rayの状態を確認します。
Djangoのリクエストが自動計測されていることが確認できました。