ChaliceとMySQLをローカル環境で動かしてみた

はじめに

業務の中で、ChaliceとMySQLをローカル環境で検証する必要がありました。
今回はSQLAlchemy+PyMySQLを利用したデモ用コードを用いて、その際の手順をご共有出来ればと思います。

目次

検証環境

  • macOS:M2
  • Docker:27.4.0
  • Docker Compose:v2.31.0-desktop.2
  • Chalice:1.31.3
  • Python:3.12.8

今回のファイル構成

ファイル構成は以下のとおりです。

Chaliceとは?

AWSが提供しているサーバーレスアプリケーションを作成するためのフレームワークです。
今回はChaliceを用いて、ローカル環境でAPIを構築します。

ローカル環境にMySQLコンテナを立てる

Docker Composeを使用して、MySQLコンテナを立てます。

MySQL初期データを配置

データベースの作成とテーブルの作成を行います。
Path:./mysql/DB/init.sql

MySQL設定ファイルを配置

Path:./mysql/my.cnf

MySQLコンテナを作成

docker-compose.yamlを作成

以下の設定で、コンテナを作成します。
Path:./docker-compose.yaml

MySQLコンテナの立ち上げ

Chalice側の実装

Chaliceとその他パッケージのインストール

requirements.txtを作成

今回作成するrequirements.txtは以下になります。
Path:./local-test/requirements.txt

パッケージのインストール

requirements.txtからパッケージをインストールします。

Chaliceプロジェクトを作成

新規のChaliceプロジェクトを作成します。
今回はlocal-testという名前でプロジェクトを作成します。

tips

Chaliceのコード中にboto3を使用する記述があると、Chaliceをローカル環境で使用する際にも、
chalice local実行時に~/.aws/credentialsを確認して、AWSの認証情報を取得するようです。
今回はローカル環境だけでChaliceを使用するので、認証情報の設定は不要になります。

config.jsonを設定

以下のようにconfig.jsonを書き換えます。
環境変数として、データベースの情報を記述しています。
Path:./local-test/.chalice/config.json

検証用のコードを作成

今回の検証では、ユーザー登録などを想定したデモ用コードを以下のように作成しました。

データベースの接続

Path:./local-test/database.py

モデル定義

Userモデルを定義しています。
Path:./local-test/models/user.py

データベース情報の取得・更新処理

データベースとのやりとりについて、記述しています。
Path:./local-test/repositories/user_repository.py

ロジック

ビジネスロジックを記述しています。
Path:./local-test/services/user_service.py

セッション管理

データベースのセッションを管理するための、デコレーターを記述しています。
ロジックの部分で使用します。
Path:./local-test/util.py

ルーティング処理

どのようなリクエストに対して、どのようなレスポンスを返すかを記述しています。
Chaliceで実行されるメインとなるファイルです。
Path:./local-test/app.py

動作検証

ローカル環境でChaliceを起動

Chaliceを起動します。ステージを指定せずにchalice localだけで実行すると、
config.jsonで指定した環境変数が読み込まれないので注意が必要です。
デフォルトで、http://127.0.0.1:8000でホストされます。

curlコマンドでリクエストを送ってみる

ユーザーの登録

リクエスト

レスポンス

ログイン

リクエスト

レスポンス

ユーザー情報取得

リクエスト

レスポンス

まとめ

以上、ローカル環境でChaliceとMySQLを連携するデモをご紹介しました。
カジュアルにローカル環境でAPIを構築して、試行錯誤できる点はとても便利だと思います。
みなさまの開発アイデアを形にする際に、本記事が少しでもお役に立てれば幸いです。

投稿者プロフィール

nonaka
2024年11月にスカイアーチネットワークスに中途入社しました。
AWSとCDKを勉強中です。

好きなもの:アニメ、読書、テニス

ABOUTこの記事をかいた人

2024年11月にスカイアーチネットワークスに中途入社しました。 AWSとCDKを勉強中です。 好きなもの:アニメ、読書、テニス