Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
初めてのIoT with Python on AWS
Search
smokeymonkey
September 12, 2015
Technology
3
2.8k
初めてのIoT with Python on AWS
2015/9/12 PyCon mini Sapporo
http://sapporo.pycon.jp/2015/
smokeymonkey
September 12, 2015
Tweet
Share
More Decks by smokeymonkey
See All by smokeymonkey
StackHawkを使ってWebアプリケーションの脆弱性を診断する
smokeymonkey
0
2k
内製化をネクストステージへ〜クラスメソッドのSaaSソリューション〜
smokeymonkey
0
1.1k
Digital waiting room that supported vaccination reservations
smokeymonkey
0
1.2k
完全テレワークを実現した企業のカルチャーを支える Slack 活用実践事例
smokeymonkey
0
1.9k
ケーススタディで学ぶ企業運営〜クラスメソッドの新型コロナ対応〜
smokeymonkey
3
1.9k
ピンチをチャンスに変える!カルチャートランスフォーメーション
smokeymonkey
1
2.5k
テックブログとCI
smokeymonkey
0
9.2k
40分で理解するAWS re:Invent 2019アップデートまとめ
smokeymonkey
0
1.5k
EmulatingAmazon GO
smokeymonkey
0
1.5k
Other Decks in Technology
See All in Technology
User Story Mapping + Inclusive Team
kawaguti
PRO
3
550
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
3
1.7k
Aurora PostgreSQLがCloudWatch Logsに 出力するログの課金を削減してみる #jawsdays2025
non97
1
250
20250304_赤煉瓦倉庫_DeepSeek_Deep_Dive
hiouchiy
2
140
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
19k
マルチアカウント環境における組織ポリシーについて まとめてみる
nrinetcom
PRO
2
110
あなたが人生で成功するための5つの普遍的法則 #jawsug #jawsdays2025 / 20250301 HEROZ
yoshidashingo
2
420
事業モメンタムを生み出すプロダクト開発
macchiitaka
0
110
AIエージェント時代のエンジニアになろう #jawsug #jawsdays2025 / 20250301 Agentic AI Engineering
yoshidashingo
9
4.3k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
27
18k
Introduction to OpenSearch Project - Search Engineering Tech Talk 2025 Winter
tkykenmt
2
250
ExaDB-XSで利用されているExadata Exascaleについて
oracle4engineer
PRO
3
310
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
115
51k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
GraphQLとの向き合い方2022年版
quramy
44
14k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Writing Fast Ruby
sferik
628
61k
Designing Experiences People Love
moore
140
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
28
1.9k
Transcript
DMBTTNFUIPEKQ ॳΊͯͷ*P5 XJUI1ZUIPOPO"84 1Z$PONJOJ4BQQPSP 1 Ϋϥεϝιουגࣜձࣾ ࠤʑɹେี
classmethod.jp 2 w ࣗݾհ w *P5ͷ֓ཁ w *P5PO"84 w *P5XJUI1ZUIPOPO"84σϞ
ΞδΣϯμ
classmethod.jp 3 ࣗݾհ
4 classmethod.jp 4 ࣗݾհ ࠤʑɹେี !TNPLFZNPOLFZBLB͚͢ 5XJUUFS'BDFCPPL
classmethod.jp 5 ࣗݾհ w Ϋϥεϝιουגࣜձࣾ w "84ίϯαϧςΟϯά෦ɹ෦ w ࡳຈΦϑΟεɹΤϦΞϚωʔδϟ w
γχΞιϦϡʔγϣϯΞʔΩςΫτ w ಘҙͳͷ w ωοτϫʔΫηΩϡϦςΟ w ͖ͳ"84αʔϏε w 71$
6
classmethod.jp 7 ࣗݾհ w Ϋϥεϝιουגࣜձࣾ w "84ίϯαϧςΟϯά෦ɹ෦ w ࡳຈΦϑΟεɹΤϦΞϚωʔδϟ w
γχΞιϦϡʔγϣϯΞʔΩςΫτ w ಘҙͳͷ w ωοτϫʔΫηΩϡϦςΟ w ͖ͳ"84αʔϏε w 71$
classmethod.jp 8 ͱ 1ZUIPO ؔͳ͍
classmethod.jp 9 ΑΖ͘͠ ͓ئ͍͠·͢
classmethod.jp 10 *P5ͷ֓ཁ
classmethod.jp 11 w ʮϞϊͷΠϯλʔωοτʯ w Ϟϊ͕ɺΠϯλʔωοτΛհͯ͠ɺ ใͷΓऔΓΛ͢Δ͜ͱ w ϞϊˠใͷΓऔΓ͕Ͱ͖Δͷ w
ύιίϯ w εϚʔτϑΥϯ w γϯάϧϘʔυίϯϐϡʔλ w σδλϧՈి *P5 *OUFSOFUPG5IJOHT ͱ
classmethod.jp 12 w ઍສͷϚγϯσόΠε͕ɺ w ਓΛհ͢Δ͜ͱͳ͘ɺ w ϚγϯؒͰσʔλ௨৴Λߦ͏͜ͱͰɺ w ΑΓߴ͍ՁαʔϏεΛఏڙ͢ΔΈ
ࠓݱࡏޠΒΕ͍ͯΔ*P5ͱ
classmethod.jp 13 w ӡૹंʹऔΓ͚ͨηϯαʔͰߦҐஔɺ ɺ೩අɺߦڑɺఀࢭճͳͲΛه w ˠΞΠυϦϯά೩ྉফඅΛݮ w ˠੳʹΑΓӡૹܦ࿏Λ࠷దԽ w
Ոͷാͷʹؚ·ΕͨਫϨϕϧΛه w ˠԹɺ࣪ɺࣹྔɺӍྔΛܭଌ w ˠࠓޙͷಈΛੳ *P5ʹΑͬͯԿ͕Ͱ͖Δͷ͔
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......
classmethod.jp 15 w ˠ w 530/ͷࡔଜઌੜ w ʮͲ͜Ͱίϯϐϡʔλʯ w ˠ
w 1"3$ͷϚʔΫɾϫΠβʔ w ʮϢϏΩλείϯϐϡʔςΟϯάʯ w ˠ w ଜ૯ݚ w ʮϢϏΩλεωοτϫʔΫʯ w ͋ΒΏΔॴͰ͋ΒΏΔϞϊ͕ωοτϫʔ Ϋʹͭͳ͕Δ *P5ͷ֓೦৽͍͠ͷͰແ͍
classmethod.jp 16 w σόΠεͷීٴ w ίϯϐϡʔλνοϓͷੑೳ্ɺলిྗԽɺՁ ֨Խ w γϯάϧϘʔυίϯϐϡʔλͳͲͷۃখԽ w
ωοτϫʔΫͷීٴ w 8J'Jͷීٴ w ((ͷ෮چ ֨҆4*.ؚΉ w ΫϥυαʔϏεͷීٴ w "84($&"[VSFFUD w ߴੑೳͳαʔόϦιʔεΛɺखܰʹɺ֨҆ʹ͑ ΔΑ͏ʹͳͬͨ ͳͥࠓ*P5ͳͷ͔
classmethod.jp 17 *P5Λ࣮ݱ͢Δ ͕ἧͬͨ ͔Β
classmethod.jp 18 *P5PO"84
classmethod.jp 19 "84Ͱ*P5ʹؔ࿈͢Δ දతͳ αʔϏε w ଞʹͨ͘͞Μ͋Δ w දతͳͷΛ͝հ センサー
Amazon Kinesis AWS Lambda Amazon DynamoDB Amazon Redshift リアルタイム ダッシュボー ド ビッグデータ 分析
classmethod.jp 20 w ετϦʔϛϯάσʔλॲཧͷҝͷϚωʔδυαʔϏε w େྔͷηϯαʔσόΠεͳͲ͔ΒσʔλΛड͚औΓɺ όοΫΤϯυܨ͙͜ͱ͕Մೳ w σʔλͷऔΓग़͠,JOFTJT$MJFOU-JCSBSZɺ,JOFTJT $POOFDUPSɺ"NB[PO-BNCEBͳͲΛ͏ɻ
"NB[PO,JOFTJT Data Sources Data Data Data Data INPUT KEEP Processer OUTPUT Amazon Kinesis 処理理
classmethod.jp w ΠϕϯτυϦϒϯͰϢʔβʔಠࣗͷίʔυΛ࣮ߦͤ͞ ΔίϯϐϡʔςΟϯάαʔϏε w Πϯελϯε04ͳͲͷཧෆཁ w ຖ͔݅Βຖඵઍ݅·Ͱࣗಈతʹεέʔϧ w +BWB4DSJQU·ͨ+BWBͰίʔσΟϯάՄೳ
"84-BNCEB Event Sources EVENT INPUT 発⽕火 AWS Lambda 実⾏行行結果 21
classmethod.jp w ϑϧϚωʔδυͳ/P42-σʔλϕʔεαʔϏε w ߴͰҰ؏ͨ͠ύϑΥʔϚϯε w ߴ͍εέʔϥϏϦςΟ w ΩʔόϦϡʔܕͱ+40/υΩϡϝϯτʹରԠ w
σʔλॻ͖ࠐΈ͕ଟ͘ɺ͔ͭߋ৽݁Ռ߹ੑͰ୲อ ͞ΕΕྑ͍έʔεʹ͍ͯΔ w ߦಈϩά w ιγϟήͷϙΠϯτ w ϦΞϧλΠϜμογϡϘʔυ "NB[PO%ZOBNP%# 22
classmethod.jp w ϖλόΠτنͷϑϧϚωʔδυσʔλΣΞϋε w ྻࢦσʔλϕʔε w ΧϥϜ୯ҐͰσʔλΛߴʹूܭ w ߴ͍εέʔϥϏϦςΟ w
.11ػߏΛ࣋ͪɺશϊʔυ͕ฒྻʹॲཧ w ϊʔυΛ૿ͤॲཧੑೳ্ "NB[PO3FETIJU
classmethod.jp 24 *P5 XJUI1ZUIPO PO"84 σϞ
classmethod.jp σϞͷ༰ w *OUFM&EJTPOʹଓ͞ΕͨޫηϯαʔͰ໌ Λऔಘ w *OUFM&EJTPO্ͷ"844%,GPS1ZUIPOͰޫ ηϯαʔͷσʔλΛ"NB[PO,JOFTJTʹQVU w ,JOFTJTʹొ͞ΕͨσʔλΛ֬ೝ
光センサー Amazon Kinesis AWS SDK for Python on Intel Edison 25
classmethod.jp *OUFM&EJTPO-JHIU4FOTPS
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フレームワーク
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取得
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を認証情報として使⽤用
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
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を使⽤用 認証情報をセット
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を取得
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を取得
classmethod.jp 34 ಈ͔ͯ͠ΈΔ
classmethod.jp 35 ·ͱΊ
classmethod.jp 36 w *P5ͷ׆༻ʹΫϥυαʔϏεͷ ར༻ඞਢ w "84ʹ*P5ʹඞཁͳαʔϏε͕ ͨ͘͞Μἧ͍ͬͯΔ w 1ZUIPOΛͬͯ؆୯ʹηϯαʔσʔ
λΛ"84ʹ1VUͰ͖Δ ·ͱΊ
classmethod.jp 37 "84ͱ1ZUIPOΛ ׆༻ͯ͠ *P5Ͱ༡΅͏ ·ͱΊ
None