nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | Azureもくもく会@新宿 No.20 Azure Database for MySQLのSSLの調査、WebAppsでFlaskの循環importが発生しないようにする方法調査 #あずもく新宿

はじめに

だんないよ、nikkieです。
1時間ほどもくもくしてきたので、成果発表をベースにブログに残します。

勉強会の概要

Azureもくもく会@新宿 No.20 - connpass

みんなで集まって、Microsoft Azureに関する作業をする会です。
新しい機能を試したり周りと相談したりしてAzureを楽しみましょう。

20回記念の今回のテーマは「みんな好きなことをやろう!」でした。
業務でWebApps × Flask × Azure DB for MySQLを使っているのですが、調べきれていないところを調べる時間にしました。

調査事項

  • Azure DB for MySQLSSL設定
  • Web Apps × FlaskでDBを使うときのベストプラクティス?を調べる

Azure DB for MySQLSSL設定

MySQLWorkbenchやFlaskのアプリケーションでのSSL接続の方法を調べる時間的猶予がなく、
SSL接続を無効にして使ってきました。気になっていたので調べました。

以下のドキュメントを参考にするとよさそうです。
https://docs.microsoft.com/ja-jp/azure/mysql/howto-configure-ssl:tilte

  • ドキュメント中のリンクからSSL証明書を取得
  • MySQLWorkbenchから接続する場合
    • SSL CA Fileを設定する
  • Flaskのコードから接続する場合(Flask-SQLAlchemy使用)
    • 接続文字列にssl_ca=として取得したSSL証明書のパスを取得すればよさそう1
    • イメージ: mysql+pymysql://user:password@host/dbname?ssl_ca=ssl/ca_file/path

Web Apps × FlaskでDBを使うときのベストプラクティス?を調べる

気になっていたこと: 循環import
https://twitter.com/ftnext/status/1006188837519814656

Azure WebApps x Flaskの組合せで少しつまづいた。
wfastcgiはmain.py (1)をimportしているらしく、循環import (2)が発生した
(1)app.run するファイル(ローカルサーバ立てるのに走らせる)
(
2)main.py でappを作ってからSQLAlchemyのdbを作る(続

https://twitter.com/ftnext/status/1006189297639100416

循環import続き
main.py でSQLAlchemyのdb使ったモジュールimportしにいく →そのモジュールではmain.py からdbをimportする必要があるで循環発生
「SQLAlchemyのdb使ったモジュール」をmain.py の先頭から使っている関数の先頭に移したらエラーは消えた

ご助言いただきました。誠にありがとうございます!

教えていただいたThe Flask Mega-Tutorial Part IV: Database - miguelgrinberg.com
以前触ったことがあった2. Flaskチュートリアル — study flask 1 ドキュメントをもとに試行錯誤していました。

今回できたもの:https://gist.github.com/ftnext/63279bed7b1d0dbe0ab5015682fb78c0

感想

  • 既存の Azure App Service と Azure Database for MySQL の接続 | Microsoft Docsに「方法 1 - すべての IP アドレスを許可するファイアウォール ルールを作成する」とあるのを発見。元も子もない解決策のような。。
  • もしかしたらDockerでFlaskサーバを動かす方法確立しちゃうほうが早いかも(WebApps利用はベンダーロックインされるように思えてきた。。)←AKS調査の成果発表の影響もあるかも
  • CustomVisionServiceで物体検知が可能になっていることを知った(サッカーの試合シーンからサッカーボールを検知するデモ)。機械学習の結果がAPIからどんどん利用できるようになってるな〜。学習済みのモデルが返すJSONには精度順に検出した物体情報が含まれるとのことで、APIの仕様、気になります。

Azureの最新情報も収集でき、成果発表の機会もいただき、どうもありがとうございました。皆さまお疲れさまでした。

脚注


  1. 未検証です。今回調べた限りでは動作するのだろうと期待しています. http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine

  2. <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="main.app" /> https://github.com/Azure-Samples/python-docs-hello-world/blob/master/web.3.4.config#L4 の部分のことです。main.pyのappはこれでimportできるようなのですが、app/__init__.pyのmyappはどう書けばimportされるのでしょうか?(宿題事項)