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.

ApexからAWS IoT叩いてみた話

1,010 views

Published on

Salesforce × AWS IoTの可能性を模索する

Published in: Technology
  • Be the first to comment

ApexからAWS IoT叩いてみた話

  1. 1. ApexからAWS IoT叩いてみた話 株式会社ウフル 田実 誠
  2. 2. Who Am I? 名前:田実 誠 会社&ロール: 株式会社ウフルでデベロッパー的な。 最近のお仕事: Marketing Cloud(ExactTarget)とか Herokuとか Salesforceとか Github:tzmfreedom Twitter:@tzm_freedom Blog:http://freedom-man.com/blog/
  3. 3. IoT Cloudまだー?
  4. 4. ということで今日は IoT Cloud ApexからAWS IoTを叩いてみた、というお話
  5. 5. 詳しくはブログで。サンプルはgithubにあるよー Blog: http://freedom-man.com/blog/apex-awsiot/ Code: https://github.com/tzmfreedom/apex_awsiot
  6. 6. AWS IoTとは? https://aws.amazon.com/jp/iot/ ・MQTT Broker(仲介役となるサーバー・サービス) ・認証(SigV4、X.509証明書)、暗号化(TLSv1.2) ・デバイスのメタデータ管理(Things) ・デバイスの状態管理(Device Shadow) ・ルールエンジンによるAWSの各種サービスとのつなぎ込み(AWS Lambdaも呼べる!) ・Amazon得意のスケーラビリティ ・100万メッセージあたり $5~$8 2015年末にベータが取れて一般公開に!!
  7. 7. AWS IoTとは? 基本的にはMQTTを使ってデバイスからデータを取得したり、リモートコントロールしたり そういったIoT向けのサービス
  8. 8. AWS IoT × Salesforce(妄想) • HTTPのAPIではThingsやDevice Shadowを閲覧、更新、削除、作成できる →Things(メタデータ)やDevice Shadow(属性値)、つまりデバイスを管理できる。 ※SORACOMのSIM(回線)管理とかもすると、IoTに関わる部分を一元管理できそう (http://appirio.co.jp/category/tech-blog/2015/10/soracom-salesforce/) • MQTTのTopicに対してHTTPのAPIでPublishができる →Rules Engineを利用したAWSサービスとのつなぎ込み(本来のIoT的な使い方ではないかもしれないが…) SNS→任意のユーザ、サービスに色んな方法で通知(メール、MobilePush、HTTP) S3やDynamoDB→構造化、非構造化データの格納 SQS→外部に対して非同期にワークフローを投げる Lambda→5分以内なら何でも(?)できる Kinesis→ ApexからのHTTPなPublishではビッグデータな感じじゃないので利用用途無いかも しかも、これらのRules EngineとActionの管理を、Salesforceのようにノンコーディングで実現出来る!
  9. 9. SalesforceからAWSのAPIを叩く方法 ・Salesforce謹製?のAppExchangeのパッケージを使う →EC2とS3しか使えない https://developer.salesforce.com/page/JP_Amazon_Toolkit ・JavaScriptのSDKを使う →画面限定 https://aws.amazon.com/jp/sdk-for-browser/ ・頑張ってApexで書く(ブログはコレ) →Apex適用できるところにはどこでもOKだが、書くの辛い
  10. 10. 自前で叩く:Signature Version4 • AWSのAPIの署名方式 https://docs.aws.amazon.com/ja_jp/general/latest/gr/signature-version- 4.html • 現在は署名方式としてVersion2, Version4があり、Version4が一番署名の強度が強く、ほぼ 全てのサービスでVersion4が利用できるようになっている。新しく発表されるサービスのAPIはだいた いSignature Version4に対応している。 • 結構複雑で辛い(他の言語だったらSDKが提供されているのに…orz) ・HTTPプロキシ(HTTPSをMITMしてくれる良い感じなやつ) 例)Fiddler, Charles, mitmproxy →これでAWS CLIなどのHTTPリクエストをキャプチャして各APIのリクエスト方法を何となく把握する。 ・Apexで実装している例 http://www.terrasky.co.jp/blog/2013/131031_001313.php https://doc.terrasky.com/pages/viewpage.action?pageId=9998331 叩くときに便利なツールとか参考になるサイト↓
  11. 11. Signature Version4の辛み CanonicalRequest = HTTPRequestMethod + '¥n' + CanonicalURI + '¥n' + CanonicalQueryString + '¥n' + CanonicalHeaders + '¥n' + SignedHeaders + '¥n' + HexEncode(Hash(RequestPayload)) StringToSign = Algorithm + '¥n' + RequestDate + '¥n' + CredentialScope + '¥n' + HashedCanonicalRequest)) kSecret = Your AWS Secret Access Key kDate = HMAC("AWS4" + kSecret, Date) kRegion = HMAC(kDate, Region) kService = HMAC(kRegion, Service) kSigning = HMAC(kService, "aws4_request") HexEncode(HMAC(derived-signing-key, string-to-sign)) Authorization: algorithm Credential=access key ID/credential scope, SignedHeaders=SignedHeaders, Signature=signature
  12. 12. 嫌な予感しかしないDemo AWS IoT AWS Lambda レコード作成 ProcessBuilder Chatter ※ProcessBuilderから直接Chatterを叩かない無駄に技術を使った構成 乃木坂 AKB 48 46 46 48
  13. 13. Process Builder
  14. 14. var fs = require("fs"); var jsforce = require('jsforce'); var username = “********"; var password = “*******"; var loginUrl = "https://login.salesforce.com"; exports.handler = function(event, context) { var conn = new jsforce.Connection({ loginUrl : loginUrl }); var chatter_body = { body: { messageSegments: [{ type: 'Text', text: event.name + " => " + event.number }] } }; conn.login(username, password, function(err, res) { conn.chatter .resource("/feeds/record/" + event.parent_id + "/feed-items") .create(chatter_body, function(err, result) { context.done(null, 'chatter de lambda'); }); }); }; SELECT name, parent_id, CASE name WHEN '乃木坂' THEN '46' WHEN 'AKB' THEN '48' ELSE '48' END AS number FROM 'Idol' Rules EngineとLambda
  15. 15. まとめ ・SalesforceからAWS IoTのAPI叩けると、端末管理とかも出来そうで素敵。 SORACOMの回線管理と組み合わせるともっと素敵。 ・AWS IoTのRules Engineを活用すると、IoTじゃなくても面白いこと出来そう (AWSサービスの前段のGatewayと考えることで柔軟なシステム構成?) ・自前でSignature Version 4叩くの辛い →でも一度作ると使いまわせて便利!
  16. 16. つまり…
  17. 17. IoT Cloudまだー?
  18. 18. ご清聴ありがとうございました!

×