Np-Urのデータ分析教室

オーブンソースデータなどWeb上から入手できるデータを用いて、RとPython両方使って分析した結果を書いていきます

AWS + Shiny ServerでShinyアプリケーションを公開する方法

本記事は、Shiny Advent Calendar 2017の22日目の記事です。


Shiny100本ノックの第22弾です!

これまで、下記記事などでShinyアプリケーションを「どうやって作るか?」ということを中心に行ってきました。
www.randpy.tokyo
www.randpy.tokyo

今回は、作ったアプリケーションを「公開する」というフェーズをやってみます。

一番シンプルな方法は、https://www.shinyapps.io/での公開です。
ですが、自身で管理しているサーバー上で公開したい、ということもあるかと思います。

ということで、今回はAWS(Amazon Web Service)上にShinyアプリケーションを置いて公開してみましょう。

AWSの準備

Shiny云々の前に、まずAWSにてインスタンスのセットアップを行う必要があります。

もし、この辺りがよく分からない場合は、以前にセットアップ手順を紹介したので、そちらをご覧ください。
www.randpy.tokyo

こちらに従ってまずはAWSのインスタンスを立ち上げましょう。
インスタンスを立ち上げる手順はほとんど一緒ですが、Shinyアプリケーションを立ち上げるために、追加でShiny用のポートを設定する必要があります。

AWS上でR(ついでにR studioも)を使用する方法を世界一簡単に解説したでは、Rstudioを使うために、セキュリティグループの設定で、カスタムTCPを選択し「8787」のポートを設定しました。

それと同じように、カスタムTCPを選択し「3838」を追加してください。またソース(アクセスできる場所)は任意の場所としてください。そうしないと、全世界の人の公開されないので。
f:id:Np-Ur:20171222211050p:plain

Shiny Server をインストール

インスタンスが立ち上がったらAWSにログインしましょう。
ログイン方法も、AWS上でR(ついでにR studioも)を使用する方法を世界一簡単に解説したでWindowsユーザー・Macユーザー向けにそれぞれ紹介しています。参考にしながらログインしてください。

ログインできたら、早速R・Rstudioをインストールしていきましょう。

$ sudo yum update
$ sudo yum install R
$ wget https://download2.rstudio.org/rstudio-server-rhel-1.1.383-x86_64.rpm
$ sudo yum install --nogpgcheck rstudio-server-rhel-1.1.383-x86_64.rpm

ただし、こちらの「https://download2.rstudio.org/rstudio-server-rhel-1.1.383-x86_64.rpm」のURL部分は、https://www.rstudio.com/products/rstudio/download-server/にある最新バージョンのRstudioに適宜置き換えてください。

RとRstudioが入ったら、Shiny Server・Shinyライブラリをインストールしましょう。

$ sudo su - -c "R -e \"install.packages('shiny', repos='https://cran.rstudio.com/')\""
$ wget https://download3.rstudio.org/centos5.9/x86_64/shiny-server-1.5.6.875-rh5-x86_64.rpm
$ sudo yum install --nogpgcheck shiny-server-1.5.6.875-rh5-x86_64.rpm

先ほどと同様に、こちらの「https://download3.rstudio.org/centos5.9/x86_64/shiny-server-1.5.6.875-rh5-x86_64.rpm」のURL部分は、https://www.rstudio.com/products/shiny/download-server/にある最新バージョンに置き換えてください。

そうしましたら、インスタンスにアクセスできる各ユーザーがそれぞれShinyアプリケーションを作れるように、以下を実行してください。

$ sudo /opt/shiny-server/bin/deploy-example user-dirs
$ mkdir ~/ShinyApps

Rstudioで作って公開まで

インストールが終わったらRstudioを立ち上げてみましょう。と、その前にパスワードを設定する必要があるので、以下コマンドで設定してください。

$ sudo passwd ec2-user

その後、

$ sudo rstudio-server start

を実行するとRstudioが立ち上がります。実行後、「http://[IPv4 パブリック IP]:8787」にブラウザでアクセスしてください。RstudioがAWS上で立ち上がっていることが確認できます。
f:id:Np-Ur:20171222221348p:plain

なお、「IPv4 パブリック IP」部分は、以下のようなインスタンス画面にて確認することができるので、それをコピペしましょう。
f:id:Np-Ur:20170605212813p:plain

事前にShinyライブラリを入れているので、PC上で行っていたのと同じようにShinyアプリケーションを作ることができます。

恐らくRstudio立ち上げ時は、ホームディレクトリにいると思います。そこで、先ほど作った「ShinyApps」ディレクトリに移動してください。
f:id:Np-Ur:20171222224702p:plain

ShinyAppsディレクトリに移動し、例えば以下のShinyアプリケーションを作ったとしましょう。
www.randpy.tokyo

アプリの名前を「clustering」とすると、
ー ShinyApps
 ー clustering
  ー server.R
  ー ui.R

という構成になっていると思います。

この状態で「http://[IPv4 パブリック IP]:3838/ec2-user/clustering」にアクセスしてみてください。
Shinyアプリケーションが公開されていることが分かります。
f:id:Np-Ur:20171222222922p:plain
意外や意外、結構簡単にAWS上で公開することができました!

なお、現在はec2-userというユーザー名でログインしていますが、もし別ユーザーでShinyアプリケーションを作った場合は
「http://[IPv4 パブリック IP]:3838/ユーザー名/アプリケーション名」という風にアクセス先のURLを変更すればOKです。

まとめ

今回は、AWS上でShinyアプリケーションを管理し、公開する方法まで紹介しました。

なお、インスタンス作成時の設定で、3838のポートは「どこからでもアクセス可能」という風に設定にしていましたが、ここにIPアドレス制限をかければ社内だけで公開、ということもできます。

また、公開するにあたって

  • パスワードを設定
  • httpをhttps

なども対応が可能です。
この辺りは機会がありましたら、改めて紹介したいと思います。

皆様も、是非作ったShinyアプリケーションを、AWS等のサーバーを使って全世界に公開してみてください!



使わなくなったインスタンスは必ず停止しておいてください。そうしないとどんどん費用がかさんでしまいます…。