PyCon mini Sapporoで「初めてのIoT with Python on AWS」についてお話しました #pyconsap

9/12(土)に札幌産業振興センターで行われたPyCon mini Sapporoで、「初めてのIoT with Python on AWS」というタイトルでお話させて頂きました!

PyCon_mini_Sapporo

発表資料

発表資料はこちらになります。

デモで使ったコード

Intel Edison上で動かしたSender

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 = 'pycon'
partition_key = 'PartitionKey'

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
)

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')

while True:
    data = light.read()
    response = kinesis.put_record(
      StreamName   = stream_name,
      Data         = str(data),
      PartitionKey = partition_key)
    print(response)
    time.sleep(0.2)

PC上で動かしたReceiver

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
)

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'
)

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)

お話したこと

IoTのざっくりとした概要と、IoTで活用できるAWSのサービスのご紹介、そしてIntel Edisonを使った簡単なデモをさせて頂きました。

20分と短い枠だったのでかなり端折りながらお話させて頂きましたが、AWSを活用することでIoTが簡単に実現できます。そして、AWS SDK for PythonはBoto3になってかなり書きやすくなったと思います。是非みなさん、AWS SDK for Pythonを使って、AWSとIoTで遊んでみてください!