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のクラウド
サービスに入力
Amazon S3
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 class LambdaMain {
public String handle(Context context) {
return "";
}
コードの実装
デプロイ
・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://petstore.swagger.io/
SwaggerUI
"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
}
},
•SpringMVCのControllerからSwagger用のJSONを生
成
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
設定:
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: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設定
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 = 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);
カードリーダーの取得
カードへの接続
コマンド実行
注意点
• 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 User Group
• 1月27日 SORACOM Conference
《 株式会社ソラコムのビジョン 》
世界中のモノと人をつなげ
共鳴する社会へ
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山

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

Editor's Notes

  • #12 SIMを見せる?!
  • #13 SIMを見せる?!
  • #18 SIMを見せる?!
  • #19 SIMを見せる?!
  • #23 SIMを見せる?!