ご挨拶
みなさまこんにちは。今年は一ミリもMySQLに仕事で触れないまま終わりますので、過去のSpring BootアプリケーションをAzure Database for MySQLで開発運用してみた奮闘記
(以下奮闘記)を振り返ります。
こちらのサービスは2024年に良い知らせを受け取れましたし、MySQL 8.4も出たのでこちらを振り返り、事情が違う箇所だけ補足します。
アプリケーションの仕様・方式を決める
2020年
MySQLは5.7を利用しました。
データ移行の都合上、データ移行が必要なため他システム(AWS RDS for MySQLでMySQL5.6)と統一したいが、MySQL 5.6は新規構築できない理由があったので5.7を使っていました。
2024年の課題と対処
MySQL 8.4がリリースされています。認証や文字コードなど考慮事項はありますが、もうできるだけMySQL 8.4を利用したほうが良いでしょう。どこかで勇気を出さないとMySQL 5.7からバージョンアップできなくなるでしょう。
奮闘記の時はデータ移行上の関係で絵文字をサポートしませんでしたが、今なら絵文字サポートもできます。UXや運営を鑑みて今後も絵文字サポートは不要という考え方もできますが、アプリケーションや文字入力の仕様調整と操作説明も必要です。
プロキシ経由でMySQLに接続できるようにする
プロキシでMySQLやSSHが遮断され、開発者、運用者のPCから直接MySQLに接続できないため対応しました。
2020年
- 開発環境はPHPMyAdmin経由で接続
- トラブル防止のため、本番環境ではPHPMyAdminは利用しないポリシーにしました
- 大規模な開発環境での作業、本番作業は踏み台のMySQL Workbenchから実施
としていました
2024年の課題
- PHPMyAdminはPHPアプリケーションなのでセキュリティ上配慮が必要です。基本的には使わないほうが良いと思いました
- MySQL Workbenchの8.4 LTS Releaseがない
2024年に考えられる対処
MySQL Shell for VS Codeを使う
ローカル開発であれば、MySQL Shell for VS Codeやその他のSQLクライアントを使えると思います。プロキシを通す場合は、踏み台経由でポートフォワーディングするなど考慮が必要かもしれません。
本番操作時にはミスを起こさないよう、GUIの利用は避けたほうが良いかもしれません。
クラウドの機能を使う
クラウドシェルや踏み台サービスを利用するの良いと思います。
開発チームもクラウドのアカウントやロールが必要になりますが、安全ではない踏み台を独自構築するよりは安全を取りましょう。
- AWS
- Session Manager、EC2で踏み台を構築する
- CloudShellを利用する
- Azure
- Azure Linux仮想マシンで踏み台を構築する
- Azure CLIを利用する
実は奮闘記当時も、Azure CLIを使ってAzure上でMySQLを操作しているチームがいました。シェルの得意なメンバーが多数いたからです。
https://learn.microsoft.com/ja-jp/azure/mysql/flexible-server/connect-azure-cli
一方で開発チームはプロダクトオーナーにSQLを打ってでも受け入れしてほしい場合があり、PHPMyAdminが便利という事情もありました。
いずれにしろ安全な方法で誰でもデータアクセスをしたいものです。
環境によって動かないSQLがあった
2020年
事情がありMySQLのインストールがチームによって統一できなくなり、sql_modeの不統一でSQLが動作しないなど混乱を生みました。
2024年の課題
MySQLに限らず、アプリケーション開発のバックエンドはDockerで用意するとローカル環境の構築方法のブレをなくせます。
Spring Boot 3を利用すると、Testcontainersと連携してバックエンドの構築が簡単になります。バックエンド以外にモックサーバなど必要なサービスを簡単にDockerで動かせます。構築方法を統一できるので採用したほうが良かったです。
まとめ
奮闘記作成当初からは
- MySQL 8.4リリースに伴う変更
- ローカル開発環境構築方法の課題
がありました。
それ以外はMySQLバージョン依存しない課題解決なので、奮闘記の内容は今でも作者は違和感ありませんでした。
最後まで読んでいただきありがとうございました。
良い冬をお過ごしくださいませ🐬