nikkie-ftnextの日記

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

イベントレポート | 第27回 Pythonもくもく会 #mokupy (Azure VMにFlaskアプリをデプロイ)

はじめに

だんないよ、nikkieです。
4/30の#mokupyでAzureのVMCentOS)に
FlaskアプリケーションをデプロイしてHello Worldしてきました。

 

勉強会の概要

この勉強会について

主にPythonに関するやりたいことを各自持って来て、進めていく感じのゆるい会です。 もくもく開発をして情報共有したり、交流を深めることができればと思っています。 是非お気軽にご参加ください。(Python初心者の方でも大歓迎です!)

Pythonもくもく会御三家の一つ#mokupy。(※一個人の認識です)
GW開催ということもあってか盛況でした。
今回はお昼に食べたハンバーガーが美味しかった・・・(しみじみ)
 

取り組んだこと

以下の記事を参考に、AzureにLinuxVMを構築し、
Hello WorldするFlaskアプリケーションをApacheとmod_wsgiとで動作させました。
(以降では「30分記事」と呼びます)

qiita.com

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

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

 

業務でPaaSにデプロイしたところ、POSTするエンドポイントが500内部サーバエラーとなりハマっています。
代替手段が必要そうなので予習してみました。

 

VM作成

30分記事とバージョンを揃えるためCentOS6.8で検索。
CentOSは6系と7系でコマンドが変わる認識。大きな読み替えは無しで進めた方が成功しやすいと考えた。)
D2s_v3 Standardで動くものがあったので、費用を抑えるために
CentOS-based 6.8 HPC Rogue Wave Software (formerly OpenLogic)」を選択。

▼作成手順の参考

Azureに仮想マシン(CentOS)を構築する | OSS on Azure 技術ブログ

 

環境構築

mod_wsgiについて./configureするところですが、
Pythonを/usr/local/bin/python3.6にインストールしているので、
赤字のように修正が必要だと思います。

./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/bin/python3.6

(修正せずに進めたところ、/usr/local/bin/python3: No such file or directory というエラーが出た)

 

Apacheとmod_wsgiの設定
SSLまでやる余力がなかったため、30分記事を流用できず、Apacheのconfで一番苦労しました。
(mod_wsgiについてはadapter.wsgiを使いました)
Apacheのconfはmod_wsgiのドキュメントをもとにしました。
(Flaskのドキュメントにもwsgi関連の説明ページがあったが、
 簡略化されすぎていてほとんど初めてconf書く人間には理解できなかった。。)
 
ドキュメントの通りに書いても以下のエラーが出ていたのですが、
Invalid command 'WSGIScriptAlias', perhaps misspelled or defined by a module not included in the server configuration  
mod_wsgiがロードされていないらしいので、以下を参考に LoadModule の行を追加しました。

[Python] mod_wsgiを使ってPython3.6をApacheで動かす(CentOS6系) - YoheiM .NET

(なぜ30分記事と違ってロードされないのかは不明)

 

落とし穴:Azureのネットワークセキュリティグループの設定

Apacheのconfのエラーが消せたと思ったら、次はHello Worldのページが表示されない。。
error_logにも出てこないので、リクエストがVMまで届いていない感じ。
→80番ポートへのHTTPアクセスを許可する必要がありました。

Azure Portal を使用した VM へのポートの開放 | Microsoft Docs

 

束の間の安息と次なる課題

Hello Worldできたので「やったか!?」と思いきや
Hello Worldする別のGETアクセスポイントを追加すると500エラー。

これはブラウザからのアクセスによるのではなく、pythonコマンドでファイルを実行しても発生する。

今回は時間切れなので、引き続き取り組んでいきます。

 

感想

  • 環境構築がブラックボックスすぎて、エラーが自己解決できない不安あり。
    (アクセスポイント増やしたところFlaskアプリが動かなくなったのは
     環境構築に起因した問題でないことを祈るのみ)
  • VM作り直すたび、./configureからmakeするの大変だよなあ。(何回も繰り返したくない。。)
    →Docker使えばいいんじゃないか? Dockerに俄然興味出てきた。

 

ハマっている事象:WebAppsのFlaskにPOSTすると500エラー

最後にVMで構築することになった経緯を書いておきます。

PythonのWebサーバを立てよう
VM構築するよりPaaSの方が構築が簡単らしい
チュートリアルのとおりにやったら短時間でHello Worldできた

Azure に Python Web アプリを作成する | Microsoft Docs

→POSTのエンドポイント追加してみたら内部サーバエラー

この内部サーバエラーが解決できない。。

  • 何が原因かがわからない。(スタックトレースが見られていない。期待しているものは見られないのかもしれない)
  • Kuduを使うとIISスタックトレースは見られた。IISはまったく経験がなく提示している情報がつかめない。

今回診ていただいたところ、IIS関連(web.config)の設定ではないかという話ですが、
POSTだけ500エラーという挙動はやはり謎。
診ていただきありがとうございました。

 

もくもく会参加者の皆さま、1日お疲れさまでした&ありがとうございました。