SORACOMでの
Java/AWS活用
JJUG CCC fall 2015
ハッシュタグは
#jjug_ccc
#ccc_ef4
でお願いします!
• 名前:片山 暁雄
• 所属:株式会社ソラコム
–シニアソフトウェアエンジニア
• ID: @c9katayama
SORACOMの紹介
株式会社ソラコム
創業者:玉川 憲
元AWSエバンジェリスト
IoT向け
通信プラットフォームの
提供
IoT(Internet of Things)
インターネット クラウドモノ
IoTの課題
インターネット クラウドモノ
接続方法 セキュリティ
通信プロトコル
接続方法
インターネットモノ ・有線LAN
場所の制約
・無線LAN
事前設定が難あり
・3G/LTEの通信は便利
初期費用、通信費高い
長期固定契約
クラウド
セキュリティ/通信プロトコル
・暗号化
暗号化実装が必要
デバイスには高負荷
・認証
認証情報の個別設定必須
パスワードの変更難
・通信プロトコル
通信フォーマットや
通信先変更は困難
インターネット
ソラコムでの解決策
インターネット クラウドモノ
専用線
NTTドコモ
の交換局
モノ インターネット
パケット交換
帯域制御
顧客管理
課金 API
クラウド
3G/LTE
専用線
モノがAWSクラウドに直結
IoT向けのプログラマブルなデータ通信を提供
3G/LTE
API
《 SORACOM Air 》
専用線
インターネット
SORACOM Air
NTTドコモ
の交換局
お客様
① SIMを購入して
モノに挿す
API
Webコンソール③Webから
コントロール
②APIでコントロール
SORACOM Air
• API
• 通信速度の変更
• SIMの停止/解約
• 通信量/利用料の取得
• タグ付け、グループ
• DNS設定 etc
• SDK/CLIも提供
システムの自動化
SIMの一括管理
《 SORACOM Beam 》
専用線
SORACOMからインターネット経由で
データを転送する場合には暗号化が必要
3G/LTE
API
インターネット
専用線
• データの暗号化
• SIMのIDを使った認証
• 通信先サーバの動的な変更
• プロトコル変換
SORACOM Beam
3G/LTE
インターネット
Beam
モノ
デバイスとクラウド間の通信の省力化
お客様
システム
専用線
NTTドコモ
の交換局
簡易で最低限のデータを
送受信するプロトコル
(Raw TCP socket,UDP等)
暗号化プロトコル
(HTTPS等)
AWSのクラウドサービスに直結
AWS
Beamで直接各種AWSのサービスに
専用線
NTTドコモ
の交換局
Amazon
Kinesis
Amazon
Redshift
Amazon
DynamoDB
デバイスからのデータ
を直接AWSのクラ...
SORACOMのアーキテクチャ
専用線
NTTドコモ
の交換局
モノ インターネット
パケット交換
帯域制御
顧客管理
課金 API
クラウド
3G/LTE
パケット転送
帯域制御
アクセス制御
Beam処理
回線・セッション管理
認証
課金
イベント通知
API
コンソール
Polaris Dipper
Hubble
監視・デプロイ
PolarisとDipper
マイクロサービス化された
機能コンポーネント群
セッション管理 認証 課金
API Gateway
3G/LTE API
API
インターネット通信
パケット転送
帯域制御
…
Amazon DynamoDB
呼び出された時だけ処理が実行/課金される
イベント駆動型のサービス
• 直接呼び出す(アプリケーションから)
• AWSサービスのイベントきっかけで呼び出す
• スケジュール呼び出し
AWS Lambda
イベント
• データが格納された時に加工する
• データ変更の履歴の記録
• DBレコード変更のイベント時に履歴テーブルに記録
• 変更時を顧客に通知
• 定期的な処理
• DB上の数値を集計してSlackにpost
• 定期的に値を確認して有効でないデ...
•Java8
•Node.js
•Python
使える言語
ライブラリの設定
compile(“com.amazonaws:aws-java-sdk-lambda: XXX")
開発
import com.amazonaws.services.lambda.runtime.Context;
public...
デプロイ
・ZIPを作ってアップロード
・エンドリポイントのpublicメソッドを指定
・メモリ量とタイムアウトを指定
・呼び出し元の設定
SORACOM API
• SORACOM API
• https://dev.soracom.io/jp/docs/api/
• Swagger
• http://swagger.io/
• HTML/CSS/JavaScriptで作られたAPIフロントエンド
• https://github.com/swagger-api/swagger-ui
• Swagger形式のJSONがあれば、APIの表示と実行が可能
• http:...
"paths": {
"/pet": {
"post": {
"consumes": [ "application/json” ],
"description": "",
"operationId": "addPet",
"parameters...
•SpringMVCのControllerからSwagger用のJSONを生
成
Gradle設定:
compile("io.springfox:springfox-swagger2:2.2.0”)
@SpringBootApplication
@EnableSwagger2 <- Springfoxのコントローラーがena...
Controller/Model
• 特別なアノテーションをつけなくてもOK
SpringFoxのコントロール
クラスにアクセス
(/v2/api-docs)
JSONメタ情報収集
Swaggerのアノテーションで装飾
JSON
•Springfoxのコントローラーにアクセスすれば、常
に最新のファイルが生成される
•静的Webサイトに載せる場合は、吐き出したJSON
をそのままデプロイすればOK
• Testクラスのmock mvcで生成すると便利
生成されるJSON...
•SwaggerのJSONから、
asciidocやmarkdownが作れる
•asciidocからHTMLやPDFが生
成できる
Springfox-static-docs
buildscript {
dependencies {
classpath "org.asciidoctor:asciidoctor-gradle-plugin:1.5.2"
classpath 'org.asciidoctor:asciid...
SORACOMならではの話
•SIMカードの生産
• SIMの在庫管理
• SIMの生産(通称:SIM焼き)
• SIMのラベル貼り
• SIMの検品
• SIMの受注
• SIMの発送
• SIMの解約
SORACOMならではの話
SIM管理システム
バーコードリーダー
カードリーダー
プリンタ
• JavaからICカードを読み書きするためのクラ
ス群
• 標準JDKに入っている
• ICカードはISO/IEC7816という規格もの
• SIMだけでなくクレジットカードや住基
カードもこの規格がベース
javax.smartcardio
import javax.smartcardio.*;
List<CardTerminal> terminals
=TerminalFactory.getDefault().list();
CardTerminal terminal = ter...
注意点
• Eclipseだとjavax.smartcardioはデフォルトでは認識されない
• JRE設定->Access Rulesからアクセスを許可する
さいごに
SORACOM Developer Conference
http://ascii.jp/elem/000/001/066/1066736/
今後のスケジュール
• 12月7日 AWSとの共催セミナー(大阪)
• IoTプラットフォームとAWS IoT
• 12月10日 AWSとの共催セミナー(東京)
• IoTプラットフォームとAWS IoT
• 12月11日 SORACOM Us...
《 株式会社ソラコムのビジョン 》
世界中のモノと人をつなげ
共鳴する社会へ
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山
Upcoming SlideShare
Loading in...5
×

日本 Java ユーザーグループ JJUG CCC 2015 Fall by ソラコム 片山

498
-1

Published on

2015/11/25 日本 Java ユーザーグループ JJUG CCC 2015 Fall ソラコム シニアソフトウェアエンジニア 片山の登壇スライドです

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
498
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide
  • SIMを見せる?!
  • SIMを見せる?!
  • SIMを見せる?!
  • SIMを見せる?!
  • SIMを見せる?!
  • 日本 Java ユーザーグループ JJUG CCC 2015 Fall by ソラコム 片山

    1. 1. SORACOMでの Java/AWS活用 JJUG CCC fall 2015
    2. 2. ハッシュタグは #jjug_ccc #ccc_ef4 でお願いします!
    3. 3. • 名前:片山 暁雄 • 所属:株式会社ソラコム –シニアソフトウェアエンジニア • ID: @c9katayama
    4. 4. SORACOMの紹介
    5. 5. 株式会社ソラコム 創業者:玉川 憲 元AWSエバンジェリスト IoT向け 通信プラットフォームの 提供
    6. 6. IoT(Internet of Things) インターネット クラウドモノ
    7. 7. IoTの課題 インターネット クラウドモノ 接続方法 セキュリティ 通信プロトコル
    8. 8. 接続方法 インターネットモノ ・有線LAN 場所の制約 ・無線LAN 事前設定が難あり ・3G/LTEの通信は便利 初期費用、通信費高い 長期固定契約
    9. 9. クラウド セキュリティ/通信プロトコル ・暗号化 暗号化実装が必要 デバイスには高負荷 ・認証 認証情報の個別設定必須 パスワードの変更難 ・通信プロトコル 通信フォーマットや 通信先変更は困難 インターネット
    10. 10. ソラコムでの解決策 インターネット クラウドモノ
    11. 11. 専用線 NTTドコモ の交換局 モノ インターネット パケット交換 帯域制御 顧客管理 課金 API クラウド 3G/LTE
    12. 12. 専用線 モノがAWSクラウドに直結 IoT向けのプログラマブルなデータ通信を提供 3G/LTE API
    13. 13. 《 SORACOM Air 》
    14. 14. 専用線 インターネット SORACOM Air NTTドコモ の交換局 お客様 ① SIMを購入して モノに挿す API Webコンソール③Webから コントロール ②APIでコントロール
    15. 15. SORACOM Air • API • 通信速度の変更 • SIMの停止/解約 • 通信量/利用料の取得 • タグ付け、グループ • DNS設定 etc • SDK/CLIも提供 システムの自動化 SIMの一括管理
    16. 16. 《 SORACOM Beam 》
    17. 17. 専用線 SORACOMからインターネット経由で データを転送する場合には暗号化が必要 3G/LTE API インターネット
    18. 18. 専用線 • データの暗号化 • SIMのIDを使った認証 • 通信先サーバの動的な変更 • プロトコル変換 SORACOM Beam 3G/LTE インターネット Beam モノ
    19. 19. デバイスとクラウド間の通信の省力化 お客様 システム 専用線 NTTドコモ の交換局 簡易で最低限のデータを 送受信するプロトコル (Raw TCP socket,UDP等) 暗号化プロトコル (HTTPS等)
    20. 20. AWSのクラウドサービスに直結 AWS Beamで直接各種AWSのサービスに 専用線 NTTドコモ の交換局 Amazon Kinesis Amazon Redshift Amazon DynamoDB デバイスからのデータ を直接AWSのクラウド サービスに入力 Amazon S3
    21. 21. SORACOMのアーキテクチャ
    22. 22. 専用線 NTTドコモ の交換局 モノ インターネット パケット交換 帯域制御 顧客管理 課金 API クラウド 3G/LTE
    23. 23. パケット転送 帯域制御 アクセス制御 Beam処理 回線・セッション管理 認証 課金 イベント通知 API コンソール Polaris Dipper Hubble 監視・デプロイ
    24. 24. PolarisとDipper マイクロサービス化された 機能コンポーネント群 セッション管理 認証 課金 API Gateway 3G/LTE API API インターネット通信 パケット転送 帯域制御 … Amazon DynamoDB
    25. 25. 呼び出された時だけ処理が実行/課金される イベント駆動型のサービス • 直接呼び出す(アプリケーションから) • AWSサービスのイベントきっかけで呼び出す • スケジュール呼び出し AWS Lambda イベント
    26. 26. • データが格納された時に加工する • データ変更の履歴の記録 • DBレコード変更のイベント時に履歴テーブルに記録 • 変更時を顧客に通知 • 定期的な処理 • DB上の数値を集計してSlackにpost • 定期的に値を確認して有効でないデータを削除する 例えば・・
    27. 27. •Java8 •Node.js •Python 使える言語
    28. 28. ライブラリの設定 compile(“com.amazonaws:aws-java-sdk-lambda: XXX") 開発 import com.amazonaws.services.lambda.runtime.Context; public class LambdaMain { public String handle(Context context) { return ""; } コードの実装
    29. 29. デプロイ ・ZIPを作ってアップロード ・エンドリポイントのpublicメソッドを指定 ・メモリ量とタイムアウトを指定 ・呼び出し元の設定
    30. 30. SORACOM API
    31. 31. • SORACOM API • https://dev.soracom.io/jp/docs/api/ • Swagger • http://swagger.io/
    32. 32. • HTML/CSS/JavaScriptで作られたAPIフロントエンド • https://github.com/swagger-api/swagger-ui • Swagger形式のJSONがあれば、APIの表示と実行が可能 • http://petstore.swagger.io/ SwaggerUI
    33. 33. "paths": { "/pet": { "post": { "consumes": [ "application/json” ], "description": "", "operationId": "addPet", "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/Pet” } } ], "produces": [ "application/json" ], "responses": { "405": { "description": "Invalid input" } }, "Pet": { "properties": { "category": { "$ref": "#/definitions/Category" }, "id": { "format": "int64", "type": "integer" }, "name": { "example": "doggie", "type": "string" }, "photoUrls": { "items": { "type": "string" }, "type": "array", "xml": { "name": "photoUrl", "wrapped": true } },
    34. 34. •SpringMVCのControllerからSwagger用のJSONを生 成
    35. 35. Gradle設定: compile("io.springfox:springfox-swagger2:2.2.0”) @SpringBootApplication @EnableSwagger2 <- Springfoxのコントローラーがenableになる public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public Docket restApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()).select() .paths(ant("/api/**")).build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() SpringBoot 設定:
    36. 36. Controller/Model • 特別なアノテーションをつけなくてもOK SpringFoxのコントロール クラスにアクセス (/v2/api-docs) JSONメタ情報収集
    37. 37. Swaggerのアノテーションで装飾 JSON
    38. 38. •Springfoxのコントローラーにアクセスすれば、常 に最新のファイルが生成される •静的Webサイトに載せる場合は、吐き出したJSON をそのままデプロイすればOK • Testクラスのmock mvcで生成すると便利 生成されるJSONファイル
    39. 39. •SwaggerのJSONから、 asciidocやmarkdownが作れる •asciidocからHTMLやPDFが生 成できる Springfox-static-docs
    40. 40. buildscript { dependencies { classpath "org.asciidoctor:asciidoctor-gradle-plugin:1.5.2" classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.6' } } apply plugin: "org.asciidoctor.convert” testCompile("io.springfox:springfox-staticdocs:2.2.2") asciidoctor { dependsOn test sourceDir = new File("build/api-docs/asciidoc/generated") backends = ['html5', 'pdf'] } Gradle設定
    41. 41. SORACOMならではの話
    42. 42. •SIMカードの生産 • SIMの在庫管理 • SIMの生産(通称:SIM焼き) • SIMのラベル貼り • SIMの検品 • SIMの受注 • SIMの発送 • SIMの解約 SORACOMならではの話
    43. 43. SIM管理システム バーコードリーダー カードリーダー プリンタ
    44. 44. • JavaからICカードを読み書きするためのクラ ス群 • 標準JDKに入っている • ICカードはISO/IEC7816という規格もの • SIMだけでなくクレジットカードや住基 カードもこの規格がベース javax.smartcardio
    45. 45. import javax.smartcardio.*; List<CardTerminal> terminals =TerminalFactory.getDefault().list(); CardTerminal terminal = terminals.get(0); Card card = terminal.connect("*"); CardChannel channel = card.getBasicChannel(); byte[] c1 = {(byte)0x00,(byte)0xA4};//コマンド ResponseAPDU r = channel.transmit(new CommandAPDU(c1)); byte[] a = r.getData(); // disconnect card.disconnect(false); カードリーダーの取得 カードへの接続 コマンド実行
    46. 46. 注意点 • Eclipseだとjavax.smartcardioはデフォルトでは認識されない • JRE設定->Access Rulesからアクセスを許可する
    47. 47. さいごに
    48. 48. SORACOM Developer Conference http://ascii.jp/elem/000/001/066/1066736/
    49. 49. 今後のスケジュール • 12月7日 AWSとの共催セミナー(大阪) • IoTプラットフォームとAWS IoT • 12月10日 AWSとの共催セミナー(東京) • IoTプラットフォームとAWS IoT • 12月11日 SORACOM User Group • 1月27日 SORACOM Conference
    50. 50. 《 株式会社ソラコムのビジョン 》 世界中のモノと人をつなげ 共鳴する社会へ
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×