スマホからアクセスして言語を選択する
これで、スマホからアプリにアクセスし、応援したいプログラミング言語を選択できるようになったはずです。アクセスしてみてください。
おお~、プログラミング言語を選択できました!
Amazon DynamoDBで言語を追加すると、Webサイトに反映されます。また、Flagの値を0に変更すると、その言語は表示されなくなります。
Amazon Kinesisに送られたデータを確認する
スマホを振ったときのセンサーのデータがAmazon Kinesisに送られているはずです。確認してみましょう。ここでは、AWS CLIを使います。
まず、次のコマンドでシャードを確認します。
$ aws kinesis describe-stream --stream-name <Kinesisのストリーム名>
{
"StreamDescription": {
"StreamStatus": "ACTIVE",
"StreamName": "<ストリーム名>",
"StreamARN": "arn:aws:kinesis:us-east-1:<アカウントID>:stream/<ストリーム名>",
"Shards": [
{
"ShardId": "shardId-000000000000",
"HashKeyRange": {
"EndingHashKey": "340282366920938463463374607431768211455",
"StartingHashKey": "0"
},
"SequenceNumberRange": {
"StartingSequenceNumber": "49549492284611166925788240077307163096708794633016049666"
}
}
]
}
}
続いて、次のコマンドでシャードイテレータ[6]を取得します。シャードイテレータの種類を指定するオプション--shard-iterator-typeには、常に最新のデータを取得することを示すLATESTを指定します。
$ aws kinesis get-shard-iterator --stream-name <ストリーム名> --shard-id <シャードID> --shard-iterator-type LATEST
{
"ShardIterator": "AAAAAAAAAAGATgf0ciKvM2NNWRsLaq36R0GJct1MPTl1tE2FDxvOVBUZZBr9cy9NrXuFsmNst+6XuM59INEhKiiHXbL4BEvhsXgKk1Pvtp6/+lozNUu51vobJydf7GHXlGXYm55zpThQ6ad4bSaFU9zXgGa2erCVxNFjebZGSHu9auV/NClGxpCEGElK3x1AZmoozCbZ+YP/8uBcOF3pgJVloLhbWuRS"
}
取得したシャードイテレータに対し、次のコマンドを実行することでAmazon Kinesisが受け取ったデータを確認できます。
$ aws kinesis get-records --shard-iterator <シャードイテレータ>
{
"PartitionKey": "0.2878744287882",
"Data": "eyJNb3Rpb24iOnsiUHJldmlvdXNlIjp7IngiOi00LjIzNTAyNTkyNTk1MjE5NiwieSI6MzUuMDcyNDE5Mjk2NjEwMzU2LCJ6IjotMi44MjI4ODk3MjE3OTE0NDZ9LCJDdXJyZW50Ijp7IngiOjMyLjA0ODcwMzkyNzg3NDU2LCJ5IjoxLjc3MjQ5OTIwOTg0OTUzNjIsInoiOi00LjM4ODgwNTQ1MTgyMjI4MDV9fSwiTGFuZyI6IkdvIiwiQWN0aW9uIjoiQWRkIn0=",
"SequenceNumber": "49549492284611166925788287125226818618407088413709697026"
}
実行結果のDataが送られてきたデータになりますが、Base64エンコーディングされているため、デコードして確認します。
$ echo "eyJNb3Rpb24iOnsiUHJldmlvdXNlIjp7IngiOi00LjIzNTAyNTkyNTk1MjE5NiwieSI6MzUuMDcyNDE5Mjk2NjEwMzU2LCJ6IjotMi44MjI4ODk3MjE3OTE0NDZ9LCJDdXJyZW50Ijp7IngiOjMyLjA0ODcwMzkyNzg3NDU2LCJ5IjoxLjc3MjQ5OTIwOTg0OTUzNjIsInoiOi00LjM4ODgwNTQ1MTgyMjI4MDV9fSwiTGFuZyI6IkdvIiwiQWN0aW9uIjoiQWRkIn0=" | base64 -D
{"Motion":{"Previouse":{"x":-4.235025925952196,"y":35.072419296610356,"z":-2.822889721791446},"Current":{"x":32.04870392787456,"y":1.7724992098495362,"z":-4.3888054518222805}},"Lang":"Go","Action":"Add"}
このように送ったJSON形式のデータが確認できました。
Amazon Kinesisの中身は、コマンドラインで確認しなければならないんですね。
APIがあるので、簡単なプログラムを作って確認することもできますよ。
[6] シャードイテレータとはシャード内のポジションを示すもので、4種類のデータ取得方式があります。このシャードイテレータを指定してget_recordsすることで実際にデータが取得できます。
制作1日目は無事終了
制作1日目はここまでで終了しました。クライアント側の処理に必要な準備として、Amazon S3、Amazon Cognito、Amazon Kinesis、Amazon DynamoDBを設定しました。クライアント側の処理をJavaScriptで作成し、スマホからアクセスして応援する言語を選択できること、スマホを振ったときのセンサーデータがAmazon Kinesisに送られていることを確認しました。
それにしても、受託開発も請け負っているというだけあって、池澤さんはさすがでした。AWSで本格的なアプリ開発は初めてだというのに、西谷さん、榎並さんの説明をすらすらと理解し、作業を進めていました。
次回は制作2日目。Amazon Kinesisのデータを読み取って集計する処理を、AWS Lambdaを使って実装します。お楽しみに!
まとめ:スマホフレーフレー言語応援アプリで使用するAWSサービスとその機能
| AWSサービス名 | 機能 |
|---|---|
| Amazon S3 | クラウドストレージサービス。今回はここにアプリを置く |
| Amazon Cognito | ユーザーの認証やデータの同期のための機能を提供する。今回はスマホ(JavaScript)とAmazon Kinesis、Amazon DynamoDBがやり取りするときに必要な認証情報を安全に扱うために使用する |
| Amazon Kinesis | 大規模データストリームのリアルタイム処理を可能にするサービス。今回はスマホの加速度センサーデータの収集に使用する |
| Amazon DynamoDB | NoSQLデータベースサービス。今回は選択する言語のマスター情報や加速度センサーデータの集計値を格納する |
| AWS Lambda | イベントドリブン処理を簡単に実現するコンピューティングサービス。2014年11月の発表とともに、ベータ版でありながら注目を集めている。Amazon Kinesisから渡された加速度センサーデータの集計処理に使用する |
参加したい方、ご興味のある方はデベロッパーカンファレンスのWebサイトへ!
