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.1k
完全テレワークを実現した企業のカルチャーを支える Slack 活用実践事例
smokeymonkey
0
1.9k
ケーススタディで学ぶ企業運営〜クラスメソッドの新型コロナ対応〜
smokeymonkey
3
1.9k
ピンチをチャンスに変える!カルチャートランスフォーメーション
smokeymonkey
1
2.4k
テックブログとCI
smokeymonkey
0
9.1k
40分で理解するAWS re:Invent 2019アップデートまとめ
smokeymonkey
0
1.5k
EmulatingAmazon GO
smokeymonkey
0
1.5k
Other Decks in Technology
See All in Technology
システム・ML活用を広げるdbtのデータモデリング / Expanding System & ML Use with dbt Modeling
i125
1
330
1行のコードから社会課題の解決へ: EMの探究、事業・技術・組織を紡ぐ実践知 / EM Conf 2025
9ma3r
11
3.9k
ABWG2024採択者が語るエンジニアとしての自分自身の見つけ方〜発信して、つながって、世界を広げていく〜
maimyyym
1
180
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張
hatena
0
260
AWSを活用したIoTにおけるセキュリティ対策のご紹介
kwskyk
0
380
OCI Success Journey OCIの何が評価されてる?疑問に答える事例セミナー(2025年2月実施)
oracle4engineer
PRO
2
160
php-conference-nagoya-2025
fuwasegu
0
150
What's new in Go 1.24?
ciarana
1
110
役員・マネージャー・著者・エンジニアそれぞれの立場から見たAWS認定資格
nrinetcom
PRO
4
6.2k
Share my, our lessons from the road to re:Invent
naospon
0
150
生成AI×財務経理:PoCで挑むSlack AI Bot開発と現場巻き込みのリアル
pohdccoe
1
740
株式会社Awarefy(アウェアファイ)会社説明資料 / Awarefy-Company-Deck
awarefy
3
11k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Building Adaptive Systems
keathley
40
2.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
260
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
GraphQLとの向き合い方2022年版
quramy
44
14k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
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