SlideShare a Scribd company logo
1 of 31
Download to read offline
PBOX on SoftLayer
第2回名古屋SoftLayer勉強会
2014.11.13
雪本 修一
Shuichi Yukimoto
株式会社MNU
代表取締役社長
電気通信大学の認定ベンチャーとして起業。
現在も現役プログラマとしてコードを書いている。
好きな言語はJavaScript,Scheme,Lisp,Python
SoftLayerを使い始めて一年ぐらい
弊社はSoftLyerのリフェラルパートナーです。
twitter:@nsas454
facebook:shuichi.yukimoto
今日の内容
Object Storageを使ったファイル共有アプリケー
ションをつくってみた。
ファイルサーバとしても十分使える!
Object Storageの便利な機能をしってもらおう!
せっかくなので、宣伝もしたい!
この機会に、ぜひ使ってみてください
PBOX
SoftLayer専用オンラインストレージアプリ
概要
• Object Storageを使ったファイル共有アプリ
• クライアントでのファイル更新をトリガにObject Storageにファイ
ルをアップロード
• 共有しているメンバのファイルを自動更新
• フォルダの権限を設定できる
• 共有URLからファイルをダウンロードできる
• 5Gを超える大きなファイルを扱える
• ダウンロードとアップロード処理を高速に行える
利用事例
• ObjectStorageをバックアップ先として利用す
るとき
• ファイル共有として利用したいとき
なぜObject Storageで?
DropBoxがAWSのS3を使っている。
AWSのS3でできるならSoftLayerのObject
Storageでも同じものが出来るんじゃないか?
Object Storage
概要
• 大容量ファイルを安全に保存する
• 保存されている全てのオブジェクトはURLを持つ
• 開発者はRESTful HTTP APIによってObjetcStorageシステムを
操作する
• オブジェクトはデフォルトでレプリカされ、一つのファイルが破
損しても自動修復される
• このレプリカは複数のデータセンターをまたがって保存され、
これによって、高い可用性が実現されている
Object Storageの制限
• ファイルアップロードの制限
• 5Gを超えるファイル
• カスタマー・ポータルでは20MBを超える
ファイルはアップロードできない
5G超えファイルについて
• 2つの方法がある
• Static Large Object (SLO)
• Dynamic Large Object (DLO)
• 共通するのはmanifestファイルを呼ばれるものを使用して、複数のObject
を1つのObjectに見せる
• manifestファイルの記述で複数のファイルを指定する
• swiftがmanifestファイルを1つの巨大なファイルとして特別に扱ってくれる
• 分割されたファイルは通常のobjectと同じ
Static Large Object
• manifestファイルにJSON型式で記述したファイ
ルをアップロードする
• アップロード手順
• ファイルを分割
• 分割したファイルをアップロード
• manifestファイルをアップロード
SLOの特徴
• ファイルの結合順はmanifestファイルで指定する
• 分割ファイルはどのコンテナのどのパスにおいてもよい
• 分割ファイルの名称は自由
• ファイルを更新する場合はmanifestファイルの更新も必須
• manifestファイルの記述に誤りがある場合、manifestファイルのアッ
プロード時にエラー
• 分割ファイルサイズは1MB以上なくてはならない
• 1000以上のファイルに分割できない
manifestファイルの仕様
[
{
"path": "mycontainer/objseg1",
"etag": "0228c7926b8b642dfb29554cd1f00963",
"size_bytes": 1468006
},
{
"path": "mycontainer/pseudodir/seg-obj2",
"etag": "5bfc9ea51a00b790717eeb934fb77b9b",
"size_bytes": 1572864
},
{
"path": "other-container/seg-final",
"etag": "b9c3da507d2557c1ddc51f27c54bae51",
"size_bytes": 256
}
]
Dynamic Large Object
• manifestファイルで指定したprefixにマッチするobject
を1つのファイルとして扱う
• DLOの作成手順
• manifestファイルをアップロード(最後でもよい)
• ファイルを分割する
• 分割したファイルをアップロード
DLOの特徴
• ファイルの結合順はobject名のソート順
• 分割ファイルはどの1つのコンテナに置く必要がある
• 分割ファイルの名称はソートで正しい順番になるよ
うに名付ける
• manifestファイルの更新なしで巨大ファイルを更新可能
• アップロード中にもダウンロードできる!
比較
SLO DLO
ファイルの結合順 manifestファイルで指定 ファイル名のソート順
コンテナの制限 制限なし 同一のコンテナ
manifestファイルの型式 JSON 空ファイル
Temporary URL
• ログインせずに特定のファイルに対する一時的な
アクセスを許す仕組み
• ・一時URLを知ってる人は誰でもアクセスできる
• ・GET HEAD PUT POST DELETEが可能(GET
以外試してない)
• ・Dropboxの共有リンクと似ている
Dropboxとの違い
• サーバは一時URLを管理しない
• 一時URLはサーバ側で作成しない。
• シークレットキーを元に誰か(クライアントな
ど)が作成する
一時URLの生成方法
シークレットキー、オブジェクトのパス、有効期限の3つ
から一時URLのシグネチャを生成し、クエリストリングを
オブジェクトのURLの後ろに付けることで一時URLとなる。
シークレットキー
• 一時URLを作成するための「鍵」
• アカウント毎に設定する
シークレットキーの設定
• ストレージURLにPOSTすることで設定できる
• ストレージURLとは認証後に帰ってくるベースURLのこと
例えばpboxなら
https://sng01.objectstorage.softlayer.net/v1/
AUTH_a26e5e6f-76-4604-af86-x4x2089085e7
となっている
このURLに 'X-Account-Meta-Temp-URL-Key' ヘッダを
付けてポストする
python-swiftclientでシークレットキーを設定する例
import swiftclient
SWIFT_AUTH_URL = 'https://sng01.objectstorage.softlayer.net/auth/v1.0/'
SWIFT_USERNAME = 'SLOS30001'
SWIFT_KEY =
'ea9556757661db7c55rewb6ae261f1315b69880df8be68ff27eed0erc56ee'
conn = swiftclient.Connection(SWIFT_AUTH_URL, SWIFT_USERNAME, SWIFT_KEY)
conn.post_account(headers={'X-Account-Meta-Temp-URL-Key': 'my key'})
シークレットキーの取得
import swiftclient
SWIFT_AUTH_URL = 'https://sng01.objectstorage.softlayer.net/auth/v1.0/'
SWIFT_USERNAME = 'SLOS30001'
SWIFT_KEY = 'ea9556757661db7c55rewbe261f1c2315b69880df8be68ff27eed0erc56ee'
conn = swiftclient.Connection(SWIFT_AUTH_URL, SWIFT_USERNAME, SWIFT_KEY)
r = conn.head_account()
r['x-account-meta-temp-url-key'] # -> 一時URL
一時URLの生成方法
シークレットキー、オブジェクトのパス、有効期限の3つ
から一時URLのシグネチャを生成し、クエリストリングを
オブジェクトのURLの後ろに付けることで一時URLとなる。
import hmac
from hashlib import sha1
from time import time
expire_minutes = 5 # 5分
expires = int(time() + expire_minutes*60)
method = 'GET'
key = '3ac1b5c36f4d52c91d0a' # シークレットキー
path = '/v1/AUTH_a26e5e6f-7755-494-af86-e4c20960e5e7/filesync/
6fcfb4afba2f822c7368d1c9ce08af1d51458bc8' # pbox_osx.zip
sig = hmac.new(key,
'%sn%sn%s' % (method, expires, path),
sha1).hexdigest()
query = '?temp_url_sig=%s&temp_url_expires=%s' % (sig, expires)
query += '&filename=' + 'pbox_osx.zip' # ダウンロード時のファイル名を設定できる
print 'https://sng01.objectstorage.softlayer.net'+ path + query # 一時
URL
ファイルアップロード/ダウ
ンロードの高速化
• PBOXではObject Storageにファイルを
アップロードする際に高速で処理を行えるよう
な機能を実装している。
• pboxはnginx + gunicornで構成されているが、ファイルのアッ
プロード、ダウンロード処理をgunicornでやるのは高コスト
• アップロード/ダウンロードには複雑な処理は必要無いにもか
かわらず、gunicornのセッションを専有するのは良くない!
ファイル
nginx gunicorn
object
Storage
フロントエンド バックエンド ストレージ
認証/リクエスト
PUT
• nginx拡張でなるべく多くの同時リクエストを
捌きつつ、静的ファイルの送受信を行う
ファイル
nginx
object
Storagegunicorn
redis
tornade
LUA
フロントエンド バックエンド ストレージ
PUT
PUTリクエスト
認証/ストレージ情報
ファイル
ファイル
nginx
nginx
gunicorn
object
Storage
object
Storagegunicorn
redis
tornade
LUA
Bad
Good
フロントエンド
フロントエンド
バックエンド ストレージ
バックエンド ストレージ
認証/リクエスト
PUT
PUT
PUTリクエスト
認証/ストレージ情報

More Related Content

What's hot

本気でPythonで宛名書きした話
本気でPythonで宛名書きした話本気でPythonで宛名書きした話
本気でPythonで宛名書きした話Satoshi Yamada
 
The tale of I and python / Python とのはなし
The tale of I and python / Python とのはなしThe tale of I and python / Python とのはなし
The tale of I and python / Python とのはなしTakanori Suzuki
 
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016Kei IWASAKI
 
DBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキルDBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキルSatoshi Yamada
 
20141112 Tech Valley #3 note - スタートアップでこだわったこと - takamaru
20141112 Tech Valley #3 note - スタートアップでこだわったこと - takamaru20141112 Tech Valley #3 note - スタートアップでこだわったこと - takamaru
20141112 Tech Valley #3 note - スタートアップでこだわったこと - takamaruShoei Takamaru
 
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...Shoei Takamaru
 
オリエンテーション
オリエンテーションオリエンテーション
オリエンテーションTakeshi Akutsu
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方Yusuke Wada
 
Contao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こうContao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こうTakahiro Kambe
 
新人教育と(Javaと)Python
新人教育と(Javaと)Python新人教育と(Javaと)Python
新人教育と(Javaと)Python7pairs
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01Takeshi Komiya
 
Pythonのプロファイリング
PythonのプロファイリングPythonのプロファイリング
Pythonのプロファイリングysakaguchi
 
Sphinx で手軽に作るドキュメント
Sphinx で手軽に作るドキュメントSphinx で手軽に作るドキュメント
Sphinx で手軽に作るドキュメントGo Yamada
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解するTakuya Nishimoto
 
他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法Takeshi Sugiyama
 

What's hot (19)

本気でPythonで宛名書きした話
本気でPythonで宛名書きした話本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
 
The tale of I and python / Python とのはなし
The tale of I and python / Python とのはなしThe tale of I and python / Python とのはなし
The tale of I and python / Python とのはなし
 
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
 
DBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキルDBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキル
 
20141112 Tech Valley #3 note - スタートアップでこだわったこと - takamaru
20141112 Tech Valley #3 note - スタートアップでこだわったこと - takamaru20141112 Tech Valley #3 note - スタートアップでこだわったこと - takamaru
20141112 Tech Valley #3 note - スタートアップでこだわったこと - takamaru
 
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
 
S09 t0 orientation
S09 t0 orientationS09 t0 orientation
S09 t0 orientation
 
オリエンテーション
オリエンテーションオリエンテーション
オリエンテーション
 
S02 t0 get_started
S02 t0 get_startedS02 t0 get_started
S02 t0 get_started
 
Softlayer勉強会#2
Softlayer勉強会#2Softlayer勉強会#2
Softlayer勉強会#2
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方
 
Contao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こうContao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こう
 
新人教育と(Javaと)Python
新人教育と(Javaと)Python新人教育と(Javaと)Python
新人教育と(Javaと)Python
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
 
Pythonのプロファイリング
PythonのプロファイリングPythonのプロファイリング
Pythonのプロファイリング
 
S01 t0 orientation
S01 t0 orientationS01 t0 orientation
S01 t0 orientation
 
Sphinx で手軽に作るドキュメント
Sphinx で手軽に作るドキュメントSphinx で手軽に作るドキュメント
Sphinx で手軽に作るドキュメント
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
 
他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法
 

Similar to 第2回名古屋SoftLayer勉強会 PBOX on SoftLayer

Soft layer APIの使い方と実装のポイント
Soft layer APIの使い方と実装のポイントSoft layer APIの使い方と実装のポイント
Soft layer APIの使い方と実装のポイントShuichi Yukimoto
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-pluginFumito Mizuno
 
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化Shuichi Yukimoto
 
5 mnu pbox_solftlayer_summit
5 mnu pbox_solftlayer_summit5 mnu pbox_solftlayer_summit
5 mnu pbox_solftlayer_summitchenree3
 
5 mnu pbox_solftlayer_summit
5 mnu pbox_solftlayer_summit5 mnu pbox_solftlayer_summit
5 mnu pbox_solftlayer_summitsoftlayerjp
 
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデルYuta Kashino
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in TokyoKyosuke Inoue
 
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Noritada Shimizu
 
Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04敦志 金谷
 
Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Takayuki Shimizukawa
 
Ocs2013 tokyo spring_plone
Ocs2013 tokyo spring_ploneOcs2013 tokyo spring_plone
Ocs2013 tokyo spring_ploneManabu Terada
 
Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3Shin Yamamoto
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplibShinya Okano
 
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃうフレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう株式会社オプト 仙台ラボラトリ
 
ChainerMNをDocker containerで動かす
ChainerMNをDocker containerで動かすChainerMNをDocker containerで動かす
ChainerMNをDocker containerで動かすDaisuke Taniwaki
 
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!Masahiko Sato
 

Similar to 第2回名古屋SoftLayer勉強会 PBOX on SoftLayer (20)

Pbox on softlayer
Pbox on softlayerPbox on softlayer
Pbox on softlayer
 
20090828 Webconlocal
20090828 Webconlocal20090828 Webconlocal
20090828 Webconlocal
 
Soft layer APIの使い方と実装のポイント
Soft layer APIの使い方と実装のポイントSoft layer APIの使い方と実装のポイント
Soft layer APIの使い方と実装のポイント
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
 
5 mnu pbox_solftlayer_summit
5 mnu pbox_solftlayer_summit5 mnu pbox_solftlayer_summit
5 mnu pbox_solftlayer_summit
 
5 mnu pbox_solftlayer_summit
5 mnu pbox_solftlayer_summit5 mnu pbox_solftlayer_summit
5 mnu pbox_solftlayer_summit
 
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in Tokyo
 
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
 
Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04
 
Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門
 
Emacs softLayer
Emacs softLayerEmacs softLayer
Emacs softLayer
 
Ocs2013 tokyo spring_plone
Ocs2013 tokyo spring_ploneOcs2013 tokyo spring_plone
Ocs2013 tokyo spring_plone
 
Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3
 
勉強会資料#1
勉強会資料#1勉強会資料#1
勉強会資料#1
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃうフレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう
 
ChainerMNをDocker containerで動かす
ChainerMNをDocker containerで動かすChainerMNをDocker containerで動かす
ChainerMNをDocker containerで動かす
 
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
 

More from Shuichi Yukimoto

More from Shuichi Yukimoto (10)

Ocif2016_go_web_freamwork
Ocif2016_go_web_freamworkOcif2016_go_web_freamwork
Ocif2016_go_web_freamwork
 
Slackbot_by_OpenWhisk
Slackbot_by_OpenWhiskSlackbot_by_OpenWhisk
Slackbot_by_OpenWhisk
 
Softlayer_API_openWhisk
Softlayer_API_openWhiskSoftlayer_API_openWhisk
Softlayer_API_openWhisk
 
Send grid softlayer_nagoya
Send grid softlayer_nagoyaSend grid softlayer_nagoya
Send grid softlayer_nagoya
 
Softlayer_bluemix-summit
Softlayer_bluemix-summitSoftlayer_bluemix-summit
Softlayer_bluemix-summit
 
Softlayer_summit
Softlayer_summitSoftlayer_summit
Softlayer_summit
 
SendGridを使ってみよう
SendGridを使ってみようSendGridを使ってみよう
SendGridを使ってみよう
 
Mnu_pbox
Mnu_pboxMnu_pbox
Mnu_pbox
 
Mnu特許説明スライド
Mnu特許説明スライドMnu特許説明スライド
Mnu特許説明スライド
 
第2回ビジネスモバイル研究会
第2回ビジネスモバイル研究会第2回ビジネスモバイル研究会
第2回ビジネスモバイル研究会
 

第2回名古屋SoftLayer勉強会 PBOX on SoftLayer