AWS Startup ブログ

【週刊 Ask An Expert #24】IoT のデータ収集基盤を設計したい! 先週の #AWSLoft で受けた質問10選

こんにちは、スタートアップ ソリューションアーキテクトの針原 (Twitter: @_hariby) です。
今週は10月に入って増税があったり、AWS DevDay Tokyo 2019 があったり、慌しい1週間でした。DevDay ではスタートアップ向けのセッション「よくある課題を一気に解説 御社の技術レベルがアップする 2019 秋期講習」と題して Startup SAs 4人で仲良く登壇したのですが、振り返ってみるとキーワードはマネージドサービスと自動化でした。個人的な話で恐縮ですが、ちょうどうちも増税前の駆け込みで iRobot の Roomba を買って掃除の自動化を試みていました。実は Roomba の裏では AWS IoT をはじめとした各種マネージドサービスが動いていて、事例にもなっています。たくさんあるマネージドサービス、何を選べばいいか分からないという相談も、Ask An Expert で聞いて頂ければお答えします。

今週は AWS Loft Tokyo もオープン1周年を迎え、現在 AWS Loft Tokyo では新規利用者紹介キャンペーンを実施中です (2019/11/30まで)。お知り合いのスタートアップ・デベロッパーの方が居ればご紹介ください、カフェラテ無料券 (S) がもらえます!また、10/15には AWS Amplify ハンズオンが開催されます!

さて、このブログ記事では週刊 Ask An Expert 第24回目をお届けします。「参考になった」「いい内容だ」と思っていただけたら、ぜひハッシュタグ #AWSLoft を付けてシェアしてください。改善点・ご要望もお待ちしております。

Ask An Expert ?

皆さん AWS Loft Tokyo はご存知でしょうか?
目黒セントラルスクエア17Fにある、AWS を利用中のスタートアップとデベロッパーのためのコワーキングおよびイベントスペースです。その一角に AWS のエキスパート – Solutions Architect (SA) や Cloud Support Engineer (CSE) – といった中の人に技術的な質問ができる、Ask An Expert カウンターがあります。そこでは毎月、来場者の方から100件以上にものぼるご相談をお受けしています。

神田明神ホールからの眺め – AWS DevDay Tokyo では出張 Ask An Expert が行われていました

この連載「週刊 Ask An Expert」では、多くのご相談を中から我々スタートアップソリューションアーキテクトが 独断で面白かった質問を 10 個選び紹介していきます。他の AWS Loft 利用者がどんな質問をしているのか、自分が知らなかった新しいトピックはないか、Ask An Expert ってどんなところなのか、一緒に見ていきましょう。Let’s ask an expert!


週刊 Ask An Expert #24 (2019/09/23 – 09/27)

この週の対応者は SA: 荒木・矢ヶ崎・岡本・水馬・濵・小田桐・上総 CSE: 古野・嶋本でした。

Q: Amazon EC2 スポットインスタンスにオンデマンドインスタンスを組み合わせて使いたい。

EC2 フリート、あるいは EC2 Auto Scaling Group や Spot Fleet を使うことで可能です。

Q: Amazon ECS でなるべくインスタンス数が少なるなるようにタスクを配置したい

Amazon ECS タスク配置戦略binpack を指定すれば CPU やメモリの最小利用可能量に基づいてタスクを配置出来ます。これによって使用するインスタンス数を最小限に抑えることができます。

Q: スクレイピングしているホストをみつけて AWS WAF で塞ぎたい

AWS Solutions「AWS WAF セキュリティオートメーション」をご紹介しました。

Q: 顔認識のアプリケーション構築についてどういう選択肢があるのか教えて欲しい

Amazon Rekognition を使うと、画像を使用した顔の検索を簡単に行うことができます。なお、10月15日より公開の AWS Innovate セッション「AI 顔認証イベント受付サービスを作ってみよう」では Amazon Rekognition 顔認識 API の具体的な使い方をご紹介します。

Q: Amazon DynamoDBの設計方法について教えて欲しい

一つのテーブルに対して複数タイプのクエリを投げたいとのことだったので、グローバルセカンダリインデックスについてご説明しました。

Q: IoT のデータ収集基盤を設計したい

AWS IoT は幅広いサービスを提供していますが、まずは AWS IoT Core を使ってインターネットに接続されたデバイスからクラウドにメッセージを送信するところから始まるかと思います。その後段で、Amazon S3 にデータを保存し、Amazon QuickSight で可視化する、といったことが可能です。

Q: AWS Amplify とは何ですか?

AWS Amplify は開発フレームワークおよび開発者用サービスで構成されており、モバイルアプリケーションやウェブアプリケーションを AWS で構築するための最も速くて簡単な方法を提供します。

Amplify フレームワークは、モバイルバックエンドを構築し、iOS、Android、ウェブ、React Native アプリケーションと統合するための一連のライブラリ、UI コンポーネント、コマンドラインインターフェイスを提供します。主要な AWS クラウドサービスを活用して、オフラインデータ、認証、分析、プッシュ通知、ボットなどの機能をスケーラブルに提供しています。
Amplify CLI を使用すると、シンプルなコマンドラインインターフェイスを使用して、バックエンドを強化するために必要なすべてのサービスを設定できます。
Amplify ライブラリを使用すると、宣言型のインターフェイスとシンプルな UI コンポーネントを使用して、コードを簡単にバックエンドに統合できます。
AWS Amplify 開発者用ツールサービスには、ウェブアプリケーションを構築、デプロイ、ホストする AWS Amplify コンソールと、モバイルアプリケーションを iOS デバイスおよび Android デバイスの実機でテストする AWS Device Farm が含まれています。

Q: Amazon Cognito User Pools でユーザー認証機能を実装している。Web API を提供するとき、未認証のユーザー、認証済みの一般ユーザー、認証済みの管理者ユーザーそれぞれでアクセス可能な API を分けたい

仮に Amazon API Gateway で API を構築する場合、認可方式として AWS_IAMCognito オーソライザーLambda オーソライザーが選べます。

1. API Gateway の認可方式に AWS_IAM を使う場合

Cognito User Pool を Cognito Identity Pool と連携させると、User Pool の User に IAM Role に基づく一時的な認証情報を発行することができます。
そのとき、User が属する Group ごとに、または任意のカスタム属性値をもとに IAM Role を分けることができます。Group を使う場合、一般ユーザーとが属する Group と管理者ユーザーが属する Group を別にすることで IAM Role を分けられるため、それぞれの Role にアタッチする Policy 内でアクセス可能な API のパスを定義できます。Identity Pool から正しく一時的な認証情報を得た後は、SigV4 アルゴリズムに従って署名した HTTPS リクエストを送ることで API Gateway がアクセス可否を判定してくれます。

2. API Gateway の認可方式にCognito Authorizer を使う場合

API Gateway では、Cognito User Pools から発行される ID トークンまたはアクセストークンを任意のヘッダーに載せてリクエストを送ることでアクセスを制御することができます。アクセストークンを使う場合(”OAuth スコープ” を設定する場合)、カスタムスコープを設定するとアクセス可能なリソースを制御することができます。詳しくはドキュメントをご覧ください

3. API Gateway の認可方式に Lambda オーソライザーを使う場合

Lambda オーソライザーは、リクエストで渡されるトークンまたはリクエストヘッダー、パスパラメータ等を Lambda ファンクションで動的に検査し、アクセス可否を判定できる柔軟な機能です。例えば、オーソライザーとして設定した Lambda ファンクションから Amazon DynamoDB などの情報を参照することも可能です。

Q: Amazon ECS からのログ出力先をカスタマイズしたい

Logging driver に awslogs を使う場合、まず標準出力が Amazon CloudWatch Logs に送信されますが、その後 Amazon Kinesis をサブスクリプションさせるなどによって自由度の高いログストリーム構築が可能になります。あるいは、アプリケーションから直接 Kinesis Firehose などにログを送信する方法も考えられます。

また、オープンプレビューだったログルーティング機能 FireLens が10月3日に正式にリリースされました。FireLens を使うと、Fluentd および Fluent Bit を使ったログルーティングを設定することができます。

Q: もう Apollo サーバーを Amazon EC2 に立ててるんだけど、 AWS AppSync 使わなくてもいい?

AppSync をお使いいただくかどうかは自由ですが、サーバーレスなマネージド GraphQL サービスである AppSync を使えば EC2 自体の管理、および Apollo サーバーのプロセス管理などなどから解放されることが期待できます。また、フロントのインタフェースでは認可方式を AWS IAM や Cognito User Pools などと連携することができる他、 GraphQL スキーマの Query ごとに Amazon Elasticsearch Service、HTTP Endpoint、AWS Lambda、Amazon DynamoDB、NONE からバックエンドを柔軟に選ぶことができます。ご検討ください。


週刊 Ask An Expert まとめ、今回はここまで

最後までお読み頂きありがとうございます。冒頭に書いたように、執筆者の独断により興味深かった質問を選び、かつざっくり要約して記載しています。実際にはより具体的な質問をより多く頂いていますが、様々なご相談があることが伝わっていれば幸いです。まだ Ask An Expert カウンターをご利用になったことがない方も、AWS Loft Tokyo をご利用の際はぜひお気軽にご質問ください。
※Ask An Expert が混雑してお待ちいただく場合、またはエキスパートが不在の場合がございます。何卒ご容赦ください。

このブログの著者

針原佳貴 (Yoshitaka Haribara)

スタートアップソリューションアーキテクト。好きなサービスは Amazon SageMaker, Amazon Rekognition, AWS DeepLens、趣味は音楽・バンド (ドラム)。