Tensorflowを用いて機械学習のプログラミングを勉強していたのですが、作ったアプリをどんどん公開していきたいなという思いに駆られて、ここ半年サーバ構築に奮闘していました。試行錯誤したことを公開していきたいと思います。今回は構成についてのお話です。
使用している技術・環境は?
- クラウドサービス:AWS
- フロントエンド:HTML5、JavaScript(ネイティブ)、CSS
- Webサーバ:nginx、apache
- アプリケーションサーバ:Flask、PHP
- 機械学習ライブラリ:Tensorflow(Python)
具体的な構成は?
クラウドサービスはAWSでシンプルな構成にしています。WordPressサーバ(上記t2.micro)はロードバランス無しでAWSの無料枠のみで運用しています。t2.microのEC2インスタンスは基本的に1年間無料で使えるみたいなので嬉しいですね。AWSの無料枠については公式ページに詳細があります。
PythonのWebアプリケーションはAWSのサービスの1つであるElastic Beanstalkを使ってデプロイからサーバ立ち上げまで自動で行ってます。Elastic BeanstalkはHerokuのようなアプリケーションの実行環境です。大昔に自宅サーバやっていたころから技術は大幅に進歩して、苦労してアプリケーションサーバとかWebサーバを立ち上げたりする必要がないのは魅力です。ただし、PaaSなのでシステムの設定とかは見えにくいので、細かい設定とかつい気になってしまう人は慣れが必要だと思います。(設定しなくていいっていうのが鯖管経験のある人ほど不安かも…!?)
上記WordPressのサーバ(t2.micro)とPythonアプリケーションサーバ(t2.small)で連携しながら機械学習のアプリケーションを動かしています。実際に動いているアプリはこちら。
この構成のポイントは?
- WordPressサイト(主にブログ)とアプリを実行するサーバを分離している
- Elastic Beanstalkを使って、デプロイから起動まで自動化。さらにオートスケーリング。
- 機械学習アプリは完全REST API化して、Javascriptから呼び出すようにしている
まず、アプリを実行するサーバを分離した理由ですが、負荷がかかる部分を切り離したかったからです。AIや機械学習の推論には多くのリソースが必要になるので、Pythonアプリケーションサーバは高負荷時にオートスケーリング出来るようにしています(サーバ代が払えないので、現在オートスケーリング機能は停止しています笑)。一方、WordPressサーバはPV数が増えてきたらインスタンスのグレードアップをするぐらいで耐えれそうな雰囲気です。現状はt2.microの無料枠でも大丈夫です。
アプリはREST APIの機能のみのものをデプロイして、フロント部分はWordPress上からHTMLとJavascriptをベタ書きするという感じにしています。記事を下書き状態にして、プレビューで動作テストという荒業(笑)。見た目を少し変更したい時にアプリをデプロイし直さなくていいので便利です。
フロントも絡めた複雑なアプリを書く予定はないので、しばらくはこれでいいかなと思っています。
次回の解説予定
各構成(WordPressサーバ、Pythonサーバ、ネットワークのルーティング)を中心に困った点やおすすめの設定をご紹介させていただく予定です。
t2.micoroでWordPressを実行する際のおすすめ設定や、Pythonで機械学習をどのように実行しているのかを深堀りしていこうと思います。
よかったら次回もご覧ください!