Upgrade to Pro — share decks privately, control downloads, hide ads and more …

初めてのIoT with Python on AWS

smokeymonkey
September 12, 2015

初めてのIoT with Python on AWS

2015/9/12 PyCon mini Sapporo
http://sapporo.pycon.jp/2015/

smokeymonkey

September 12, 2015
Tweet

More Decks by smokeymonkey

Other Decks in Technology

Transcript

  1. classmethod.jp 5 ࣗݾ঺հ w Ϋϥεϝιουגࣜձࣾ w "84ίϯαϧςΟϯά෦ɹ෦௕ w ࡳຈΦϑΟεɹΤϦΞϚωʔδϟ w

    γχΞιϦϡʔγϣϯΞʔΩςΫτ w ಘҙͳ΋ͷ w ωοτϫʔΫηΩϡϦςΟ w ޷͖ͳ"84αʔϏε w 71$
  2. 6

  3. classmethod.jp 7 ࣗݾ঺հ w Ϋϥεϝιουגࣜձࣾ w "84ίϯαϧςΟϯά෦ɹ෦௕ w ࡳຈΦϑΟεɹΤϦΞϚωʔδϟ w

    γχΞιϦϡʔγϣϯΞʔΩςΫτ w ಘҙͳ΋ͷ w ωοτϫʔΫηΩϡϦςΟ w ޷͖ͳ"84αʔϏε w 71$
  4. classmethod.jp 11 w ʮϞϊͷΠϯλʔωοτʯ w Ϟϊ͕ɺΠϯλʔωοτΛհͯ͠ɺ৘ ใͷ΍ΓऔΓΛ͢Δ͜ͱ w Ϟϊˠ৘ใͷ΍ΓऔΓ͕Ͱ͖Δ΋ͷ w

    ύιίϯ w εϚʔτϑΥϯ w γϯάϧϘʔυίϯϐϡʔλ w σδλϧՈి *P5 *OUFSOFUPG5IJOHT ͱ͸
  5. classmethod.jp 13 w ӡૹंʹऔΓ෇͚ͨηϯαʔͰ૸ߦҐஔɺ଎ ౓ɺ೩අɺ૸ߦڑ཭ɺఀࢭճ਺ͳͲΛه࿥ w ˠΞΠυϦϯά΍೩ྉফඅΛ࡟ݮ w ˠ෼ੳʹΑΓӡૹܦ࿏Λ࠷దԽ w

    ೶Ոͷാͷ౔৕ʹؚ·Εͨਫ෼ϨϕϧΛه࿥ w ˠ౔৕Թ౓ɺ࣪౓ɺ೔ࣹྔɺӍྔΛܭଌ w ˠࠓޙͷಈ޲Λ෼ੳ *P5ʹΑͬͯԿ͕Ͱ͖Δͷ͔
  6. classmethod.jp 14 *P5ͷ Ұൠతͳ ߏ੒ཁૉ センサー デバイス ネットワーク サーバ 加速度度センサー

    温湿度度センサー GPS ジャイロスコープ e.t.c...... デジタル家電 Intel  Edison Raspberry  Pi Armadillo e.t.c...... 4G  LTE 3G Wi-‐‑‒Fi Bluetooth  LE e.t.c......
  7. classmethod.jp 15 w ೥୅ˠ w 530/ͷࡔଜઌੜ w ʮͲ͜Ͱ΋ίϯϐϡʔλʯ w ೥ˠ

    w 1"3$ͷϚʔΫɾϫΠβʔ w ʮϢϏΩλείϯϐϡʔςΟϯάʯ w ೥ˠ w ໺ଜ૯ݚ w ʮϢϏΩλεωοτϫʔΫʯ w ͋ΒΏΔ৔ॴͰ͋ΒΏΔϞϊ͕ωοτϫʔ Ϋʹͭͳ͕Δ *P5ͷ֓೦͸৽͍͠΋ͷͰ͸ແ͍
  8. classmethod.jp 16 w σόΠεͷීٴ w ίϯϐϡʔλνοϓͷੑೳ޲্ɺলిྗԽɺ௿Ձ ֨Խ w γϯάϧϘʔυίϯϐϡʔλͳͲͷۃখԽ w

    ωοτϫʔΫͷීٴ w 8J'Jͷීٴ w ((ͷ෮چ ֨҆4*.ؚΉ  w Ϋϥ΢υαʔϏεͷීٴ w "84($&"[VSFFUD w ߴੑೳͳαʔόϦιʔεΛɺखܰʹɺ֨҆ʹ࢖͑ ΔΑ͏ʹͳͬͨ ͳͥࠓ*P5ͳͷ͔
  9. classmethod.jp 19 "84Ͱ*P5ʹؔ࿈͢Δ ୅දతͳ αʔϏε w ଞʹ΋ͨ͘͞Μ͋Δ w ୅දతͳ΋ͷΛ͝঺հ センサー

    Amazon   Kinesis AWS   Lambda Amazon   DynamoDB Amazon   Redshift リアルタイム   ダッシュボー ド ビッグデータ   分析
  10. classmethod.jp w ϑϧϚωʔδυͳ/P42-σʔλϕʔεαʔϏε w ߴ଎ͰҰ؏ͨ͠ύϑΥʔϚϯε w ߴ͍εέʔϥϏϦςΟ w ΩʔόϦϡʔܕͱ+40/υΩϡϝϯτʹରԠ w

    σʔλॻ͖ࠐΈ͕ଟ͘ɺ͔ͭߋ৽͸݁Ռ੔߹ੑͰ୲อ ͞ΕΕ͹ྑ͍έʔεʹ޲͍ͯΔ w ߦಈϩά w ιγϟήͷϙΠϯτ w ϦΞϧλΠϜμογϡϘʔυ "NB[PO%ZOBNP%# 22
  11. classmethod.jp 4FOEFS *OUFM&EJTPO 27 import  boto3   from  boto3.session  import

     Session   import  mraa   import  time   account_̲id  =  '<YOUR_̲ACCOUNT_̲ID>'   identity_̲pool_̲id  =  '<YOUR_̲IDENTITY_̲POOL_̲ID>'   role_̲arn  =  '<YOUR_̲COGNITO_̲UNAUTH_̲ARN>'   aws_̲region  =  'us-‐‑‒east-‐‑‒1'   stream_̲name  =  '<YOUR_̲STREAM_̲NAME>'   partition_̲key  =  'PartitionKey' Boto3を使⽤用 mraaを使⽤用   ※Intel謹製のIOフレームワーク
  12. classmethod.jp 4FOEFS *OUFM&EJTPO 28 light  =  mraa.Aio(0)   client  =

     boto3.client('cognito-‐‑‒identity',  aws_̲region)   resp      =   client.get_̲id(AccountId=account_̲id,IdentityPoolId=identity_̲pool_̲id)   resp      =  client.get_̲open_̲id_̲token(IdentityId=resp['IdentityId'])   token    =  resp['Token']   client  =  boto3.client('sts')   assumeRole  =  client.assume_̲role_̲with_̲web_̲identity(        RoleArn                    =  role_̲arn,        RoleSessionName    =  'boto',        WebIdentityToken  =  token) Analog(0)が光センサー CognitoからToken取得 STSから   AssumeRole取得
  13. classmethod.jp 4FOEFS *OUFM&EJTPO 29 session  =  Session(      aws_̲access_̲key_̲id

             =  assumeRole['Credentials'] ['AccessKeyId'],      aws_̲secret_̲access_̲key  =  assumeRole['Credentials'] ['SecretAccessKey'],      aws_̲session_̲token          =  assumeRole['Credentials'] ['SessionToken'],      region_̲name                      =  aws_̲region   )   kinesis  =  session.client('kinesis')   Kinesis   clientを作成 AssumeRoleを認証情報として使⽤用
  14. classmethod.jp 4FOEFS *OUFM&EJTPO 30 while  True:        

     data  =  light.read()          time.sleep(0.2)          response  =  kinesis.put_̲record(              StreamName      =  stream_̲name,              Data                  =  str(data),              PartitionKey  =  partition_̲key)          print(response) 光センサーの   値を取得 Kinesisにput
  15. classmethod.jp 3FDFJWFS 1$ 31 from  boto3.session  import  Session   import

     time   aws_̲region  =  'us-‐‑‒east-‐‑‒1'   stream_̲name  =  'pycon'   partition_̲key  =  'PartitionKey'   session  =  Session(      aws_̲access_̲key_̲id          =  '<YOUR_̲ACCESS_̲KEY>',      aws_̲secret_̲access_̲key  =  '<YOUR_̲SECRET_̲KEY>',      region_̲name                      =  aws_̲region   )   Boto3を使⽤用 認証情報をセット
  16. classmethod.jp 3FDFJWFS 1$ 32 kinesis  =  session.client('kinesis')   stream  =

      kinesis.describe_̲stream(StreamName=stream_̲name)   shards  =  stream['StreamDescription']['Shards'][0] ['ShardId']   shared_̲iterator  =  kinesis.get_̲shard_̲iterator(      StreamName                =  stream_̲name,      ShardId                      =  shards,      ShardIteratorType  =  'LATEST'   )   Kinesisに   接続 接続するShardIteratorを取得
  17. classmethod.jp 3FDFJWFS 1$ 33 iterator  =  shared_̲iterator['ShardIterator']   while  True:

         resp  =  None      resp  =   kinesis.get_̲records(ShardIterator=iterator,Limit=1)      print  resp['Records']      iterator  =  resp['NextShardIterator']      time.sleep(1) 最初のIteratorを取得 データをgetして出⼒力力し、   次のIteratorを取得