概要
この投稿では、Streamlitを使用して、ビジネスユーザー向けの探索的データ分析(EDA)ダッシュボードをAWSサービスで設定する方法を教えます。Streamlitは、データサイエンティストがPythonのみで効率的に対話型のWebベースのデータアプリケーションを作成するためのオープンソースフレームワークです。このチュートリアルでは、EDAダッシュボードは、最小限の労力で素早いエンドツーエンドのデプロイを可能にし、アプリケーションとデータベースのレイヤーを必要に応じてスケールアウトする能力を提供します。EDAダッシュボードは、時間のかかるフロントエンド開発に囚われることなく、洞察を安全で堅牢な方法で提供します。
解決策のアーキテクチャ
データベースレイヤーはAmazon S3、Amazon Glue、Amazon Athenaによってバックアップされています。ビジネスユーザーはフラットファイルをS3バケットにアップロードし、それがAmazon Glue Crawlerをトリガーし、データをAmazon Athenaによるクエリのためのデータベーステーブルにロードします。
アプリケーションレイヤーは、Streamlit、Amazon Cognito、アプリケーションロードバランサー(ALB)、Amazon Elastic Container Service(ECS)、Amazon SageMakerを組み合わせて使用します。Streamlitアプリケーションは、SageMakerノートブックを介して設立され、ALBの背後にあるECS上でホストされます。その後、ビジネスユーザーはAmazon Cognitoを使用してログインし、Amazon Athenaデータベースに対してクエリを実行し、ダッシュボードから視覚的に分析結果を取得します。
開始するために
開始するためには、まずローカルマシンまたはAmazon Application Compute Cloud(Amazon EC2)インスタンスに必要なパッケージをインストールする必要があります。詳細については、「Amazon EC2の開始」を参照してください。ローカルマシンを使用している場合、最初に資格情報を設定する必要があります。これについては、このドキュメンテーションで説明されています。また、DockerとAWS Command Line Interface AWS CLIをすでにインストールしていることを確認してください。このチュートリアルは、必要なIdentity Access Management IAM権限を備えた環境を持っていることを前提としています。
最初に、Githubのリポジトリをローカルフォルダにクローンします。
git clone https://github.com/aws-samples/streamlit-application-deployment-on-aws.git
インフラの構築
クローンしたディレクトリには、standup.shという名前のファイルがあるはずです。次に、このスクリプトを使用して、アプリケーションレイヤーとデータベースレイヤーのインフラを構築します。
一行目を速く見てみると、リソース名がここで設定されていることがわかります。具体的には、スタックとサブスタックの名前、データが格納されるS3バケットの名前、Glueの名前、ダッシュボードをホストする
...Chromeの場合、「あなたの接続はプライベートではありません」というエラーメッセージ(NET::ERR_CERT_AUTHORITY_INVALID)が表示されます。ページ下部の「詳細」をクリックし、「このウェブサイトにアクセス(安全でない)」をクリックすることで進行できます。
アプリケーションレイヤー
ダッシュボードへのアクセスはAmazon Cognitoを介して行われます。このため、初回ログイン時にはパスワードの変更が求められます。パスワードを変更したら、再度同じURLにアクセスし、新しいパスワードを使用してログインします。
ダッシュボードが立ち上がったら、以下のスクリーンショットのように、必要なパラメータを選択し、「データ取得」ボタンをクリックします。
screen_dash
左側のペインで日付を選択し、「開始日」と「終了日」を設定します。次に、ドロップダウンメニューから比較する通貨ペアを選択します。最後に、データの集約方法(デイリー、ウィークリー、マンスリー)を選択します。
「データ取得」ボタンをクリックすると、ダッシュボードはAmazon Athenaにクエリを発行し、選択した通貨ペアの期間中の価格を返します。その結果を、選択した通貨ペアのグラフと、その期間にわたるその通貨ペアの変動率のグラフという2つの形式で表示します。
このスクリプトを利用すれば、ビジネスユーザーは簡単に任意の日付範囲と通貨ペアの比較を行い、分析を視覚化することが可能です。
クリーンアップ
使用後は、AWSリソースをクリーンアップすることが重要です。リソースを不必要に実行し続けると、余分なコストが発生する可能性があります。バッシュスクリプト delete_resources.sh
を実行すれば、CloudFormationスタックを削除し、Amazon S3のバケットも削除します。
bash delete_resources.sh
このスクリプトを実行することで、AWS上に作成したすべてのリソースが削除されます。
まとめ
この記事では、Streamlitを中心にAWSサービスを活用したEDAダッシュボードの設計と構築方法を説明しました。この設計は、ユーザーが独自のフラットファイルをアップロードし、AWS Glue Crawlerがこれらのデータをデータベーステーブルにロードし、Amazon Athenaでクエリを実行できるようにするというビジネスユーザーのニーズを満たすためのものです。
また、この設計では、アプリケーションレイヤーにStreamlitを用いて、分析結果を視覚的にフィードバックするとともに、ユーザーがAWS Cognitoを通じてログインし、Amazon Athenaデータベースに対するクエリを実行できるようにしています。
この設計を実装するための詳細な手順は、上記に示されています。PythonとAWSを用いたデータサイエンスプロジェクトにおける分析結果の視覚化と共有に役立
関連サービス
上記のStreamlitを中心としたアーキテクチャは、ビジネスユーザーが自分のデータを探索的データ分析(EDA)の視覚化ダッシュボードにアップロードし、分析できるようにするためのものです。以下に各AWSサービスとその関連性を詳述します。
-
Amazon S3 (Simple Storage Service): データストレージの中心的な部分で、ユーザーがアップロードしたCSVファイルを保存します。このS3バケットは、AWS GlueとAmazon Athenaからアクセスされます。
-
AWS Glue: AWS Glueはフルマネージド型のETL(Extract, Transform, Load)サービスで、Amazon S3のデータにメタデータを追加してデータカタログを作成します。このプロセスは、データカタログにデータスキーマを追加するという形でデータの認識を改善します。AWS Glue Crawlerは定期的に実行され、新しいデータが追加された場合やスキーマが変更された場合にデータカタログを更新します。
-
Amazon Athena: Amazon Athenaはインタラクティブなクエリサービスで、AWS Glueが作成したデータカタログを使用してS3上のデータをクエリします。これにより、Streamlitアプリケーションから直接、SQLクエリを使用してデータを取得することが可能となります。
-
Amazon Cognito: Amazon Cognitoは認証、認可、ユーザー管理を提供するサービスで、Streamlitアプリケーションへのセキュアなアクセスを可能にします。ユーザーはAmazon Cognitoを通じてアプリケーションにログインし、認証後にはAmazon Athenaを用いてデータをクエリできます。
-
AWS Fargate: AWS Fargateはサーバーレスのコンテナサービスで、アプリケーションの実行に必要なインフラストラクチャを管理します。このケースでは、StreamlitアプリケーションをDockerコンテナとしてFargate上で動かします。これにより、アプリケーションのスケーリングや管理が容易になります。
-
Amazon CloudFormation: CloudFormationはIaaS(Infrastructure as a Service)を提供し、AWS上にリソーススタックを作成・管理します。上記のアーキテクチャでは、CloudFormationが各AWSサービスを組み合わせて、全体のアーキテクチャを形成します。
以上のように、各AWSサービスが連携することでStreamlitを中心としたフレキシブルでスケーラブルなアーキテクチャを形成し、ユーザーはデータを直接視覚化し、分析することが可能となります。