Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

11,697 views

Published on

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

Published in: Technology
  • Be the first to comment

日本 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. 《 株式会社ソラコムのビジョン 》 世界中のモノと人をつなげ 共鳴する社会へ

×