67
Niigata.NET #1 アプリしか作れないけど Azureに触ってみた 2015/10/10 @nemuzuka

アプリしか作れないけどAzureに触ってみた #ngtnet

Embed Size (px)

Citation preview

Page 1: アプリしか作れないけどAzureに触ってみた #ngtnet

Niigata.NET #1 アプリしか作れないけどAzureに触ってみた2015/10/10 @nemuzuka

Page 2: アプリしか作れないけどAzureに触ってみた #ngtnet

自己紹介• 片桐 一宗(かたぎり かずむね)

• id:nemuzuka / @nemuzuka

• サーバサイドにJavaを使用したWebアプリケーションの開発を主にしております

• フリーランス(vss.jp.net)

• あまりMSの製品、テクノロジーに触っていません。

• 強いて言えば方眼紙としてアイツを...

Page 3: アプリしか作れないけどAzureに触ってみた #ngtnet

.NETコミュニティですが、 .NET要素ゼロでお送りします

Page 4: アプリしか作れないけどAzureに触ってみた #ngtnet

個人事業主なのですが、 サービスも立ち上げています。

[Salon de Karte]

Page 5: アプリしか作れないけどAzureに触ってみた #ngtnet

主なサービス維持コスト

1,099円/月(VPS 1台)

Page 6: アプリしか作れないけどAzureに触ってみた #ngtnet

問題点

• VPSの停止=サービスの停止

• サービスを止めたくない

• AWS等で冗長化構成を組めばいい

• それなりにコストがかかる

• そんなにお金も生み出していないサービスの維持費を(勉強の為とは言え)掛けられない

Page 7: アプリしか作れないけどAzureに触ってみた #ngtnet

「VPSが落ちませんように」と願う毎日

Page 8: アプリしか作れないけどAzureに触ってみた #ngtnet

ある日、石野さん(@AILight)よりBizSparkの存在を知る

Page 9: アプリしか作れないけどAzureに触ってみた #ngtnet

BizSpark

こ れ だ http://www.microsoft.com/ja-jp/ventures/BizSpark.aspx

Page 10: アプリしか作れないけどAzureに触ってみた #ngtnet

3年間祈る必要無くなるかも

Page 11: アプリしか作れないけどAzureに触ってみた #ngtnet

ということで申し込み (割とすんなり行けました)

Page 12: アプリしか作れないけどAzureに触ってみた #ngtnet

Mission 1.

「Salon de Karte」を Azure上で動作させろ

Page 13: アプリしか作れないけどAzureに触ってみた #ngtnet

Q. そのアプリどんな構成?

Page 14: アプリしか作れないけどAzureに触ってみた #ngtnet

A. こんな構成のWebアプリ

Apache Tomcat PostgreSQLScala

S3

この辺をAzure上へ移行する

Page 15: アプリしか作れないけどAzureに触ってみた #ngtnet

Azureの中で何が使えそう?

• Web Apps

• SQL Database

• Virtual Machines

Page 16: アプリしか作れないけどAzureに触ってみた #ngtnet

1. Web Apps

• いろいろ面倒見てくれる

• スケール

• ユーザ数が増えてもボタン1つでAPサーバ増やせる!

• 負荷によって自動スケール

• SQL Database(SQL Server)やMySQLもまとめて入れることもできるみたい

• デプロイ

• warファイルをgitでpushすれば良い

• 前のバージョンに戻したいなーってのも管理コンソールから簡単に!

• ミドルウェアは決め打ち

• Javaの場合、IIS + (Tomcat | Jetty) AWSで言うところの

Beanstalk

Page 17: アプリしか作れないけどAzureに触ってみた #ngtnet

2. SQL Database

• 管理はMSにお任せできるSQL Server

• 何か困ったら札束で殴れば良…

AWSで言うところの

RDS for SQL Server

Page 18: アプリしか作れないけどAzureに触ってみた #ngtnet

3. Virtual Machines

• 仮想マシン

• 好き勝手できる

• エンドポイント

• 外部との通信許可。ファイヤーウォールでポートを空ける感じ

• SSH(22) / HTTP(80) とか

• この設定がしっかりしていれば外部からの不正アクセスも防げる気がする AWSで言うところの

EC2

Page 19: アプリしか作れないけどAzureに触ってみた #ngtnet

どれを使いましょう?

• APサーバ

• Web Apps

• Virtual Machines

• DBサーバ

• SQL Database

• Virtual Machines

Javaが使えてスケールも 簡単にやってくれそうなので

アプリが SQL Serverなら楽だった…

Page 20: アプリしか作れないけどAzureに触ってみた #ngtnet

まずは Web Appsの設定

Page 21: アプリしか作れないけどAzureに触ってみた #ngtnet

Web Apps設定(1)

Page 22: アプリしか作れないけどAzureに触ってみた #ngtnet

Web Apps設定(2)

Javaを使用するように[構成]を設定

Page 23: アプリしか作れないけどAzureに触ってみた #ngtnet

Web Apps設定(3)

warを作って Gitリポジトリにpush

$ git push azure master

Page 24: アプリしか作れないけどAzureに触ってみた #ngtnet

以上。

Page 25: アプリしか作れないけどAzureに触ってみた #ngtnet

やだ・・・簡単・・・

• RDBMSもSQL Server / MySQLにしておけばWebAppsだけでシステム構築ができそう

• ネットワークとかよく知らなくてもサービスが止まらない環境に仕上げられるのはすごい

• 困ったら札束の力で解決というのも潔い

• モジュールのバージョンupはwarを再度pushすれば良い

• (warだから?)キャッシュが残ってて、前の奴を削除する必要があった…

Page 26: アプリしか作れないけどAzureに触ってみた #ngtnet

続いて Virtual Machinesの設定

Page 27: アプリしか作れないけどAzureに触ってみた #ngtnet

Virtual Machines設定(1)

OSを選択して(今回はLinux)

クライアント側で 認証用のキーを作成して、UP (SSH接続時に使用)

Page 28: アプリしか作れないけどAzureに触ってみた #ngtnet

Virtual Machines設定(2)

ネットワークを設定

Page 29: アプリしか作れないけどAzureに触ってみた #ngtnet

できたー

Page 30: アプリしか作れないけどAzureに触ってみた #ngtnet

後はSSHでログインして PostgreSQLを

ソースからコンパイルして インストール。

※日本語の全文検索する都合上 コンパイルがいるのです

Page 31: アプリしか作れないけどAzureに触ってみた #ngtnet

接続先をゴニョゴニョして…

Page 32: アプリしか作れないけどAzureに触ってみた #ngtnet

ログイン画面がでたー!

Page 33: アプリしか作れないけどAzureに触ってみた #ngtnet

画像もS3に上がるー!

これ

Page 34: アプリしか作れないけどAzureに触ってみた #ngtnet

割とあっさりできました。

Page 35: アプリしか作れないけどAzureに触ってみた #ngtnet

ちょっと待って。

Page 36: アプリしか作れないけどAzureに触ってみた #ngtnet

Web Appsと Virtual Machinesの

つなぎ込みはどうしてる?

Page 37: アプリしか作れないけどAzureに触ってみた #ngtnet

あ…

Virtual Machinesのエンドポイントで

port 5432開放!

Page 38: アプリしか作れないけどAzureに触ってみた #ngtnet

アッー!$ view /usr/local/pgsql/data/pg_hba.conf

host all all 0.0.0.0/0 trust

postgresにはどのIPアドレスからでも 接続できるよ!

Page 39: アプリしか作れないけどAzureに触ってみた #ngtnet

何故こんな設定にした

• WebAppsからの接続アドレスは変わることがある(らしい)ため

この中のどれか

Page 40: アプリしか作れないけどAzureに触ってみた #ngtnet

非常にマズイ

Page 41: アプリしか作れないけどAzureに触ってみた #ngtnet

接続先URLを知っていれば 誰でもDBが覗けてしまう…

Page 42: アプリしか作れないけどAzureに触ってみた #ngtnet

Mission 2.

DBサーバを 不正な外部アクセスから守れ!

※Web AppsはMSの威信にかけて不正侵入できないでしょうからスルー

Page 43: アプリしか作れないけどAzureに触ってみた #ngtnet

何故不正アクセスされることになるか• Web Apps と Virtual MachinesがパブリックなIPで通信してるから

アプリはこいつを指定してた

Page 44: アプリしか作れないけどAzureに触ってみた #ngtnet

今はこんな感じ

IIS Tomcat

PostgreSQL

S3

Web Apps

Virtual Machines VIP(ドメイン)で やりとしてるので、 Web Appsだけでなく インターネット上の全てと繋がることができる

VIPは変わる(ことがある)し、 インターネット経由でアクセスするので通信距離が長くなる

Page 45: アプリしか作れないけどAzureに触ってみた #ngtnet

余計なものは 見せなきゃ良いじゃない

A. 内部ネットワーク

Page 46: アプリしか作れないけどAzureに触ってみた #ngtnet

Q. ネットワーク設計の ご経験は?

A. 既に準備されてるもんじゃないんですか?(38歳 自営業)

Page 47: アプリしか作れないけどAzureに触ってみた #ngtnet

恐る恐るはじめてみました

Page 48: アプリしか作れないけどAzureに触ってみた #ngtnet

要は、こうなれば良いんでしょ?

IIS Tomcat

PostgreSQL

S3

Web Apps

Virtual Machines

local IPでやり取りする

仮想ネットワーク

公開するのは Web Appsだけ

Page 49: アプリしか作れないけどAzureに触ってみた #ngtnet

仮想ネットワークを作ろう

Page 50: アプリしか作れないけどAzureに触ってみた #ngtnet

仮想ネットワークの設定(1)

これ重要

Page 51: アプリしか作れないけどAzureに触ってみた #ngtnet

仮想ネットワークの設定(2)

Web Appsのセグメント

Virtual Machinesのセグメント

Page 52: アプリしか作れないけどAzureに触ってみた #ngtnet

仮想ネットワーク上に Virtual Machinesを作ろう

Page 53: アプリしか作れないけどAzureに触ってみた #ngtnet

後乗せできません

• 仮想ネットワークに参加する仮想マシンは、作成時に指定する必要がある

これ重要

Page 54: アプリしか作れないけどAzureに触ってみた #ngtnet

仮想マシン作成後

仮想マシンが追加される

ゲートウェイの作成も行う

Page 55: アプリしか作れないけどAzureに触ってみた #ngtnet

仮想ネットワーク上に Web Appsを乗せよう

Page 56: アプリしか作れないけどAzureに触ってみた #ngtnet

後乗せできます

• ポータルサイトから設定します

Web Appsのダッシュボードから これクリック

Page 57: アプリしか作れないけどAzureに触ってみた #ngtnet

Web Appsのネットワーク設定

• VNET統合のセットアップをクリックします

作成した 仮想ネットワークを 指定します

Page 58: アプリしか作れないけどAzureに触ってみた #ngtnet

しばらくすると設定されます

Page 59: アプリしか作れないけどAzureに触ってみた #ngtnet

接続先の情報も内部IPで安心

• Web Apps上のDB接続文字列

• jdbc:postgresql://10.0.1.4:5432/データベース名

• PostgreSQLの設定

• 仮想マシンのエンドポイント

$ view /usr/local/pgsql/data/pg_hba.conf

host all all 10.0.0.0/24 trust

Page 60: アプリしか作れないけどAzureに触ってみた #ngtnet

参考サイト

• しばやん雑記

• http://blog.shibayan.jp/entry/20140911/1410430147

• ブチザッキ

• https://buchizo.wordpress.com/2014/09/11/azure-web%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AEvpn%E6%8E%A5%E7%B6%9A/

Page 61: アプリしか作れないけどAzureに触ってみた #ngtnet

Mission 3.

サービスとして提供せよ

Page 62: アプリしか作れないけどAzureに触ってみた #ngtnet

まだまだやることあるんですよー• 独自ドメイン化

• SSL証明書の設定

• サーバ増えた際のHttpSessionの扱い

• 今のままだとLBが今まで通信してたサーバに割り振ってくれないと困る

• LBがStickeyにできればまだ良いんだけど…

• 違うサーバに割り振られても大丈夫なようにするには

• Tomcat上のSession情報をSQL Serverにつっこむ…?

• クライアント証明書設定

• URL毎に異なるクライアント証明書仕込みたい

• Web AppsのIISでできる?

• DBの冗長化

[HttpSession] クライアントに紐づくデータを サーバ上のメモリに持つ (カート内の商品情報とか)

Page 63: アプリしか作れないけどAzureに触ってみた #ngtnet

間に合いませんでした…

Page 64: アプリしか作れないけどAzureに触ってみた #ngtnet

できたところまで

https://vss-web.azurewebsites.net/ admin@azure / 123456

Page 65: アプリしか作れないけどAzureに触ってみた #ngtnet

Azure使ってみての感想• 普通のWebアプリなら大きな問題ないと思う

• Azureに上げる為のソースの修正

• 一時ファイル書き込む箇所 ←これだけ

• 多分、.NET使ってればサーバが増えても問題ないんですよね?

• コスト

• Web Apps(¥8,976/月~)

• 仮想ネットワーク上に配置するのにStandardにする必要あり

• 仮想マシン(¥6,834/月~)

• さらにトラフィック分の課金がある

• ドキュメントが見つけにくい

BizSparkの無料枠

¥15,500/月…

Page 66: アプリしか作れないけどAzureに触ってみた #ngtnet

まとめ• Web Appsでできることで収まれば、後は気にしなくて良い

• 基本、金で解決

• PaaSでできること以上のことをやろうとした場合、仮想マシンを揃えることになるのはAWSも一緒

• 仮想マシン運用だとコストはそれほど下がらない

• PostgreSQLで日本語の全文検索を使用する場合、仮想マシンからは逃れられない

• ネットワークの設定はごちゃごちゃしてなくて簡単

• ヒトリでデキター

• しばらくは祈り続けます

Page 67: アプリしか作れないけどAzureに触ってみた #ngtnet

ご清聴 ありがとうございました