【A1】Delphiテクニカルセッション「オンプレからクラウドに移行する中、新旧含め様々なデバイスと接続しないといけない要求にDelphiのクラウド接続で応えてみる」
システムプランベネックス 研究開発室
毛利春幸

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

1
2

アジェンダ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

アジェンダ• AWS C3 データ送受信• EC2(Amazon Linux)でXMLを使う• Azure WEBSITEでSOAP• Azure Storage• Azure Table(NoSQL)• Couchbase 問合せしてみる

3

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2
4

業務概要

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

会社での業務弊社 カラオケシステム「カラオケの◎人」の完全子会社で カラオケシステムを作っている会社です
フロント精算POSや採点履歴などを「カラ鉄ナビアプリ」などiOS / Androidアプリとの連動やカラオケメーカ(DAM/JOYSOUND)機器の外部コントロールをするマイコンハードを作っています

5

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

旧端末はLinux(K◎lix2)で組んでます• もう10年ぐらいたちますがまだ健在です

まだまだ現役1000以上部屋で利用
6

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

マイコン基板とか作ったりしてます• 8Bit(Z80)が主だったりもします7

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

会員サーバ• 私が担当している部分• 200万ユーザカード会員の管理をオンプレサーバDelphiで組んでいます• 現在20台オーバーのDCサーバあり• 70店舗(1500部屋)からほぼ24時間アクセスがあります• iOS / Androidコンシューマ向けアプリ接続も常にある状態です

8

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

管理内容• 会員情報管理• 楽曲の再生履歴(採点履歴)• モバイル会員キャリア決済の有効期間管理• POSからの会員年会費決済有効期限管理

9

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

仕事柄いろんなデバイスへのアクセスが必要になります• 端末Linux端末 / デンモク(WindowsCE) / Android 2.3• マイコンハード端末
Z80デバイス / arm(Linux) / DaVinci(TI)• POSや店舗のサーバVB• モバイルPHP / iOS(Objective-C) / Android(Java)
こんないろんなデバイスがクロスポイントで繋がっています

10

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Web屋さんの要望PHP例
xmlの接続で良いですか？

“xml”わからないです
どんなの返してもらえますか？

CSVかなんかの形式で返します(※今はJSONでもｘｍｌでもOKだと思いますが
これ５年ほど前だとこんな会話でした)
11

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

マイコン屋さんとの打合せでRS232Cな返事はAckな
はい

固定長なそれ以上長いとオーバーフローするからあっはい

最後の1Byteはサムチェックな
はいはい12

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

スマホ屋さんとの打合せでCSVで吐いてるんでそれでお願いします

JSONじゃないの？
他のインターフェイスと共通にしたいんです

JSONじゃないの？
この部分はJSONで 吐き出しますね。。。

13

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

要望や文化が様々です• Web(PHP) 最近JSONでOKになってきましたがCSVもあります• マイコン端末側 できるだけ固定長で簡単にしてほしい(RS232Cとか)• iOS / Android JSONで送って欲しい• VB側 CSVフォーマットで欲しい14

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

SOAPやDataSnapは便利なんですが• 先ほどのスライドでも説明致しましたが弊社では様々なデバイスとの接続が必要になるので文化的にDataSnapは使えません• Server側も様々な部署との連動が必要なのでWindowsだけではなくPHP(Linux)との連動が必要になります

15

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

サーバ側はオンプレからクラウドへ新旧含め様々なデバイスに接続しないといけないのですが サーバ側はDCだけの事なので末端のデバイス無関係に簡単に思われオンプレからクラウドに変えないと行けないシーンが出てきます
クラウドサービスは各社それぞれサービス内容が違うので オンプレで作った実行ファイルが使えなかったり します。

16

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

XE7はクラウドに親切です
http://docwiki.embarcadero.com/images/RADStudio/XE7/e/thumb/3/3f/RAD_Cloud.j
pg/767px-RAD_Cloud.jpg

ここから絵勝手に拝借しました

17

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

各社クラウドサービスでどの様な事ができるのかデモしてみたいと思います• 今回デモするのはAmazon Web Servicesと Microsoft Azureです18

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Amazon LinuxとDelphi(マルチデバイス)テスト• (ec2) Amazon Linux (PHP) instanceとDelphi• Xml通信, バイナリ通信• TAmazonStorageServiceを使ってs3接続

19

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

AWSでlaunch instanceでLinux• せっかくなんでAmazon Linuxを立ててみました

Macからsshでログインし ApacheやPHPを確認します

20

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Apacheとphpなどの環境• Apacheとphpを動かします
phpinfo(); が動けば良いのかと思います21

今回テストなのでelastic IPにはしません

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Apache(php) ＋
fuse-2.9.3とs3fs-1.74でs3バケットとマウント
Ec2 Amazon Linux

Apache(php)“s３ｆｓ”でマウント
S3 バケット

22

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphiからec2経由でs3にファイル移動• インターネットからWeb経由でs3にDataを置く
Ec2 Amazon Linux

Apache(php)“s３ｆｓ”でマウント
S3 バケット

Delphiアプリ

ここまでは普通のhttpアクセスとなんら変わりないです23

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ001

24

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

TAmazonStorageServiceでs3• インターネットからWeb経由でs3にDataを置く
S3 バケット

Delphiアプリ.ListBuckets(); //バケットのリスト取得. GetBucket(); //S3 バケット内容を取得

25

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ00226

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

TAmazonStorageService• TAmazonStorageServiceでBucketリストとObjectのリストを取得するソース

27

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Object名を指定してGetObject

28

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Amazon Linux(php)XMLをDelphiで読む• Amazon Linux(php)でXMLを構築します
Delphi側は

Ec2 Amazon Linux

Delphiアプリ

XMLApache(php)

php側はrequire_once("XML/Serializer.php");$serializer = new XML_Serializer($option);
echo $serializer->serialize($data);

29

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ00330

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

TRESTClientで取得したXML• TRESTClientで取得したXMLをparse後TClientDataSetに格納してTStringGridに対してライブバインディングしています

31

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Microsoft AzureとDelphi• Microsoft Azureは下記のようなサービスがあります←IISだけを提供頂けるサービス←仮想マシン Amazonで言うec2みたいな←SQL Server←ストレージAmazonで言うc3みたいな

32

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Azure 「WEBSITE」でISAPI• WEBSITEサービスはIISだけ提供されるので管理が楽です• DelphiはISAPI用のdllを作る事が出来ます• Azureの「WEBSITE」サービスは標準でDLL実行を禁止しています。ローカルのIISマネージャーからDLLを実行許可する事ができます

33

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ローカルのIISマネージャでAzureのWEBSITEの設定を行う• ローカルのIISで接続しHandler MappingsのISAPI-DLLをEnabledにする必要があります

34

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ00435

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Azure 「WEBSITE」でDelphiのTWebModule(SOAP)を実行します• Delphiで作成したDLLが実行できました36

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

DelphiからAzureストレージBlobを取得する• Azureにも”aws”と同じくストレージサービスがあります ストレージのContainerに格納したファイル(Blob)を取得してみます

37

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ00538

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ContainerのListからBlobファイルをダウンロード

39

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Azureにもawsにも NoSQL データベースが存在してDelphiから操作できます• Azure Storageには3つのServiceがあります←これStorageです←たぶんこれがNoSQL?
←よくわかりません• AWSには DynamoDBです40

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

TAzureTableServiceで操作できます
TCloudTableRow←これで行の内容を作る
TAzureTableService.InsertEntity ←これにTable名を指定して↑を引数に渡す↑これでセットできます
このDataの取得方法はQueryEntities()でTList<TCloudTableRow>が返ります

41

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ00642

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Couchbaseに接続する• CouchbaseはJSONドキュメントで管理する
NoSQLデータベースです43

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

“aws”のec2のCouchbaseにDelph接続する• CouchbaseのドキュメントはRESTで取得できます
Ec2 Amazon Linux

Delphiアプリ

JSON

CouchbaseServer

Response.JSONValueをTJSONObjectにキャストして使います
後はTJSONValueとかTJSONArrayとかお好きに

44

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Couchbaseのドキュメントデータ• Couchbase のdefault Bucketsにいくつかのデータを入れてみました

45

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ00746

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

まとめ

47

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

まとめ• Amazon aws も Microsoft AzureもTCloudService 継承したサービスが使えます• Azure WEBSITEはDelphiのDLLも使えます• TRESTClientはJSONがparseできるのでCouchbaseのData取得で使えます

48

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Appendix

49

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Appendix• なし

50

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Q&A

51

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。