AWS Startup ブログ

【週刊 Ask An Expert #33】もしかして CPU クレジット使い切ってるかも? 先週の #AWSLoft で受けた質問10選

こんにちは。スタートアップソリューションアーキテクトの針原 (Twitter: @_hariby) です。
今週は AWS re:Invnet で多くのサービスが発表されました。気になるサービスはありましたか?僕が個人的に気になったのは、

など、他にもありますが挙げればきりがないです。AWS Loft Tokyoでは re:Cap が予定されているので発表内容についてのまとめを聞きたい方はぜひご参加ください。

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

Ask An Expert ?

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

ある日のAsk An Expert – 仲良く並ぶ SA の川﨑と岩井

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

週刊 Ask An Expert #33 (2019/11/25 – 11/29)

この週の対応者は SA: 江原・上総・廣瀬・松本・宇都宮・金杉・大場・大林・藤倉・百瀬でした。

Q1: Amazon Elasticsarch Service の Index が消えていて、割り当てられないシャードが出てくる。

まずは消えるタイミングで何か操作していたかをログで確認しました。結果的に t2.small.elasticsearch インスタンスを使っていたため、マスター・データノードともに20%を越える CPU 使用率が長く続き、結果的に Master と疎通できない状態になっているようでした。マスターノードのインスタンスタイプのサイジングをやり直すのと、データノードのサイジングを一緒に計算しました。

参考:「Amazon ES ドメインのサイジング

Q2: Amazon RDS で大規模なデータロード (6時間) を行うとインスタンスにアクセスできなくなった。ロード処理を改善したい。

こちらも db.t2.small で gp2 ストレージを使って500GBの構成になっていました。平常時の運用で db.t2.small が程よい負荷状況であるため、それに加えて大きなデータロードが発生すると db.t2.small では厳しい状況をお知らせしました。今後負荷状況を確認して適切なサイジングをお願いしました。
なお、T2 インスタンスはバースト可能なインスタンスです。バーストパフォーマンスインスタンスは standard と unlimited の2種類のモードがあり、T2 は standard がデフォルト、T3/T3a は unlimited がデフォルトです。デフォルトの standard のまま T2 インスタンスを使用する場合、CPU クレジットが切れるとパフォーマンスが低下し DB の応答時間が非常に長くなる場合があるため、本番環境でお使いの際には注意が必要です。

参考:「Amazon RDS のモニタリング」「バースト可能パフォーマンスインスタンス

Q3: 移動体向け GPS Tracker を使った IoT のデータ分析環境を構築したいのでアーキテクチャレビューをしてほしい。

これから IoT デバイスをデプロイするのであれば、AWS IoT サービスを組み合わせて分析基盤を構築することができます。AWS IoT Greengass (エッジデバイスでの関数実行・機械学習推論) と AWS IoT Core (デバイスの接続・管理) を中心に、AWS のマネージドサービスを組み合わせることで柔軟な構成が可能です。

参考:「AWS Connected Vehicle Solution

Q4: Amazon SageMaker の活用事例について、初心者で SageMaker の使い方が分からないので教えて欲しい。

AWS では「Amazon SageMaker 事例祭り」というイベントを毎月開催しており、過去開催分は「【開催報告】第9回Amazon SageMaker 事例祭り」のようにブログで情報公開しています。使い方については SageMaker ハンズオンイベントや、ウェビナー「Amazon SageMaker 機械学習エンジニア向け体験ハンズオン」をご活用下さい。今週 re:Invent で多くのサービス発表がありましたが、基本はこれまでと変わらずお使い頂けます。
使い方に関しては、時系列データに対するアルゴリズムの選び方 (時系列予測なら Amazon Forecast [Blog] が使えるかもしれません)、学習スクリプトの書き換え方 (数行の書き換えが必要で、具体的な手順はこちら)、SageMaker Local Mode に関する Issue などの話をしました。

Q5: IoT SaaS のアーキテクチャ相談。ESP32 ベースの WiFi 対応デバイスのセンサーを中小企業向けに提供し Web で管理できるサービス。悪意ある人によりデバイスハッキングされた時の対処方法が知りたいです。

AWS IoT Core/Rule を用いてクラウド側にデータを送信・加工して Amazon DynamoDB に保存することができます。デバイスに一意の証明書を埋め込んで activate/deactivate する方法もご案内しました (証明書は出荷段階で埋め込めそう)。セキュリティは基本的に証明書の deactivate で対応してもらう予定です。加えて AWS IoT Device Defender もご紹介しました。

参考:「X.509 クライアント証明書

Q6: AWS Amplify でデプロイした Amazon Cognito ユーザープールにおいて、同じ E メールアドレスで複数ユーザーを登録できてしまう。なんとかできないか。

全般設定 > 属性の設定を拝見すると、エンドユーザーをユーザー名を用いてサインインさせる際の “検証済みの E メールアドレスでのサインインも許可” にチェックが入っていませんでした (ここにチェックが入っていれば、登録時に検証済み同一メールアドレスが存在する場合に弾くことができます)。既存のユーザープールの設定を変えられないため以下2点をご案内しました:

参考:「オプション 2: ユーザーはユーザー名の代わりに E メールまたは電話番号を使用してサインアップおよびサインインする

Q7: Amazon CloudWatch で Amazon EC2 上の PHP のアプリケーションを1秒単位で実行したいが、良い方法はあるか。
Cron で OS 内部で実行すると、落ちてしまうため、CloudWatch Events を使えないか。

ヒアリングすると、問題となっている処理には、t2.small を採用されていた。CPU リソースの枯渇を指摘し、CloudWatch メトリクスを確認いただき、CPU クレジットを消費しているもしくは CPU リソース不足が原因だったら、別のインスタンスタイプを検討いただくようご案内しました。インスタンスタイプの検討はテストして判断をお願いします。また、Cron で 秒単位の実行は難しいため、スクリプト自体をデーモン化して、その挙動を Monitoring させて止まっていたら AWS Systems Manager Run Command 等で PHP ファイルを呼び出してはどうかと提案しました。

Q8: Amazon Redshift の外部テーブル作成時にパーティションを設定しているのにデータが見えない (Amazon Redshift Spectrum を使いたい)。psql 経由で Redshift 上に外部テーブルを作成し Glue 上でテーブルは確認できているが、データはゼロ件で表示される (2 つのテーブルを作成し、パーティションキーを設定している)。

諸々確認した結果、データが見えていないこととしては、ADD PARTITION がうまくできていないことが原因であることを特定しました。ただし、都度 ADD PARTITION したくないということから、Glue を使って定期的にクローラを行うことを提案しました。

参考:「Amazon Redshift Spectrum のクエリのトラブルシューティング

Q9: Amazon Recognitionを使った顔認証勤怠管理 (Timecard) システムのプロトタイプについて。Amazon RDS に Timecard 情報をリアルタイムに記録していくが、DB への接続がうまくいかない問題がある。

Security Group と DB 名を修正して動くようになりました。Amazon Rekogntion を使ったサーバーレスな顔認証サービスについては以下のスライドに構築方法・アーキテクチャをまとめてあります。

参考:「Amazon Rekognition で顔認証

Q10: 分割ファイルの前処理が全て完了した後に、AWS Glueジョブを実行したい。

元ファイルが大きく、分割後並列で前処理して Amazon S3 に格納し、AWS Glue ジョブを実行している。S3 に格納されたイベントをきっかけに Amazon SQS, Amazon DynamoDB, AWS Lambda などを使い状態管理して、Glue を実行する方法をディスカッション。最終的に、AWS Lambda で S3 のファイル数状態管理と Glue ジョブ実行で検討する方針となりました。AWS Step Functions も上手く使えるといいかもしれません。

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

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

このブログの著者

針原 佳貴

2018年4月アマゾン ウェブ サービス ジャパン株式会社入社。現在はソリューションアーキテクトとして、スタートアップにおける機械学習基盤設計などの技術支援に従事。