Big Data 追加ラボ
このラボではGlue、S3、Athenaを用いてビッグデータ基盤の構築、データの分析を行います。オプション課題では、QuickSightによる可視化、Elasticsearchによる分析を行います。
不明な手順に関しては、ドキュメントなどを参照して進めてください。このハンズオンはオレゴン(us-west-2)を前提にした内容になっているため、リージョンを事前にオレゴンにしてから作業を開始してください。
所要時間
このラボの所要時間は約 70 分です。
ハンズオン準備
- QwikLabを起動し指定の方法でマネージメントコンソールにサインインする
- サービス>CloudFormationをクリックする
- [スタックの作成] > 「新しいリソースを使用(標準)」をクリックする
- テンプレートの選択を「Amazon S3 URL」にし、以下のURLを指定して、「次へ」をクリックする
https://awsj-tc-training-public.s3-ap-northeast-1.amazonaws.com/common/cfn/adduser.template
- 「スタックの名前」には任意の名前を入力する
- 「次へ」をクリックする
- オプション画面ではデフォルトのままで「次へ」をクリックする
- レビュー画面では、画面下部に表示されているIAMリソース作成の承認チェックボックスにチェックを入れ、「スタックの作成」をクリックする
- スタックの作成が完了したら、マネージメントコンソールからサインアウトし、QwikLab画面に戻りマネージメントコンソールを起動する
- ユーザ名には「awsstudent2」、パスワードに「Labpass101」を入力する
タスク1: S3バケットの作成
このタスクでは、この後の作業で用いるバケットを作成します。
- サービス > S3 をクリックします。
- 次の条件で2つのバケットを作成します。xxxには自分の名前を設定するなどして、バケット名の重複を回避してください。
- これ以降の作業ではこのバケットを使用して作業を進めます。
タスク2:Kinesis Streams / Firehose の構成
このタスクではKinesis Streamsを用いてデータを収集するためのストリームと、Kinesis Firehoseを用いて60秒ごとにストリーム中のデータをS3に配信する配信ストリームを作成します。
- サービス > Kinesis をクリックします。
- [データストリームの作成] をクリックします。
- 以下の条件でストリームを作成します。
- ストリームの名前:
lab-stream
- シャードの数: 2
- ストリームの作成が完了したら、ナビゲーションペインから [Data Firehose] をクリックします。
- [Create Delivery Stream] をクリックします。
- 以下の条件で、配信ストリームを作成します。指定がない項目はデフォルトのままにしておきます。
- Step 1: Name and source
- Delivery stream name:
lab-delivery
- Source: kinesis stream
- Kinesis stream: lab-stream
- Step 2: Process records
- Step 3: Choose destination
- Destination: Amazon S3
- S3 bucket: xxx-lab-source
- Step 4: Configure settings
- Buffer interval:
60
- IAM role: 以下の手順で新規作成
- [Create new or choose] をクリック
- IAMロール:新しいIAMロールの作成、ロール名:firehose_deliver_role を設定(デフォルトのまま)
- [許可] をクリック
- Step 5: Review
- 内容を確認して [Create delivery stream] をクリック
タスク3: Kinesis Data Generatorの設定
このタスクではKinesis Data Generatorを用いて前のタスクで作成したストリームにデータを送信します。リージョンが オレゴン(us-west-2) になっていることを確認してからタスクを開始してください。
- サービス > CloudFormation をクリックします。
- [スタックの作成] > 「新しいリソースを使用(標準)」をクリックします。
- 以下の条件で、スタックを作成します。指定がない項目はデフォルトのままにしておきます。
- ステップ 1 テンプレートの指定
- ステップ 2 スタックの詳細の指定
- スタックの名前:
lab-kdg
- パラメータ
- Username:
kdguser
- Password:
Labpass123
- ステップ 3 スタックオプションの設定
- ステップ 4 確認
- The following resource(s) require capabilities: 承認にチェック
- スタックの作成が完了したら、スタックの[出力] タブをクリックします。
- 表示されているURLをメモして、別のタブで開きます。
- Kinesis Data Generatorの画面が表示されるので、画面上部のサインインメニューからサインインします。ユーザー名とパスワードは前の手順で作成した
kdguser
/ Labpass123
を用います。
- サインインできると、設定画面が表示さるので、以下の条件で設定します。
- Region: us-west-2
- Stream/delivery stream: lab-stream (注意:lab-deliveryではありません)
- Record template:
テンプレート名:
lab-sensor-template
{
"sensorId": {{random.number(10000)}},
"currentTemperature": {{random.number(
{
"min":0,
"max":100
}
)}},
"status": "{{random.arrayElement(
["OK","FAIL","WARN"]
)}}"
}
- [Send Data] をクリックすると、データが指定したKinesisストリームに送られます。さらに、前のタスクで設定したように、このデータはFirehoseにより定期的にS3バケットに配信されます。
- 数分待って、S3バケット xxx-lab-source にファイルが生成されていることを確認してください。またファイルを開いて、中の形式を確認してください。Kinesis Data Generator で設定したように、JSON形式のデータが配信されています。
{ "sensorId": 754, "currentTemperature": 37, "status": "OK"}
{ "sensorId": 2338, "currentTemperature": 59, "status": "FAIL"}
{ "sensorId": 6740, "currentTemperature": 44, "status": "OK"}
{ "sensorId": 7963, "currentTemperature": 87, "status": "FAIL"}
- さらにKinesis streams および Firehoseの画面を開き、モニタリング情報などを確認してみてください。
- このハンズオン中、Kinesis Data Genratorは起動したままにしておきます。
タスク4: Glue用IAMロールの作成
このたすくでは、この後のGlueで利用するためのIAMロールを作成します。
- サービス > IAM をクリックします。
- ナビゲーションペインから [ロール] をクリックします。
- [ロールの作成] をクリックします。
- 以下の条件で、ロールを作成します。指定がない項目はデフォルトのままにしておきます。
- このロールを使用するサービスを選択
- Attach アクセス権限ポリシー
- 次のポリシーを選択:
AWSGlueServiceRole
、AmazonS3ReadOnlyAccess
- タグの追加 (オプション)
- 確認
- 同様の手順で、もう一つロールを作成します。
- このロールを使用するサービスを選択
- Attach アクセス権限ポリシー
- 次のポリシーを選択:
AWSGlueServiceRole
、AmazonS3FullAccess
- タグの追加 (オプション)
- 確認
タスク5: GlueによるETLの実行
このタスクでは前のタスクで配信されたJSON形式のデータをGlueを用いてParquet形式に変換します。
クローラの作成
- サービス > AWS Glue をクリックします。
- [今すぐ始める] をクリックします。
- ナビゲーションペインから [クローラの追加] をクリックします。
- [クローラの追加] をクリックします。
- 以下の条件で、クローラを作成します。指定がない項目はデフォルトのままにしておきます。
- クローラの情報
- クローラの名前:
lab-rawdata-crawler
- Specify crawler source type
- データストアの追加
- Choose a data store: S3
- インクルードパス: s3://xxx-lab-source
- 別のデータストアの追加
- IAM ロールの選択
- 既存のIAMロールを選択 をクリック
- IAM ロール: lab-crawler-role
- このクローラのスケジュールを設定する
- クローラの出力を設定する
- [データベースの追加] をクリック
- データベース名:
lab_rawdata_db
- クローラの一覧画面が表示されるので、lab-rawdata-crawler を選択し、[クローラの実行] をクリックします。
- ステータスが Ready になるのを待ちます。
- ナビゲーションペインから [テーブルの確認] をクリックします。
- テーブルがJSONとして分類されていることが確認できます。
- テーブル名 xxx_lab_source をクリックして詳細情報を確認します。
- 画面下部に、テーブルのスキーマ情報が表示されます。Kinesis Data Generatorで生成したデータ構造が認識されているのが確認できます。
- [パーティションの表示]をクリックします。Firehoseは、出力のタイムスタンプに基づきフォルダを階層化していますが、Glueの生成したスキーマ上では、partition_x のような列名となっているため修正します。
- [パーティションを閉じる]をクリックします。
- [スキーマの編集] をクリックします。
- 列名 partition_0 のセルをクリックして、列名を
year
に変更します。
- 同じ手順を繰り返し、以下のように列名を修正します。
- partition_1:
month
- partition_2:
day
- partition_3:
hour
- [保存] をクリックします。
ジョブの作成
- ナビゲーションペインから [ジョブの追加]をクリックします。
- [ジョブの追加]をクリックします。
- 以下の条件で、ジョブを作成します。指定がない項目はデフォルトのままにしておきます。
- ジョブプロパティ
- 名前:
lab-etl-job
- IAMロール: lab-job-role
- データソースの選択
- データターゲットの選択
- データターゲットでテーブルを作成する を選択
- データストア: Amazon S3
- 形式: Parquet
- ターゲットパス: s3://xxx-lab-target
- [ジョブを保存してスクリプトを編集する] をクリック
- 出力されたコードのdatasink4 の箇所を以下のコードで置き換えます。この際、S3バケット名を修正してください。このコードでは、connection_options の partitionkeysの指定を行い、出力ファイルの格納先フォルダが、year、month、day、hourで階層化されるようにします。修正したら[保存] をクリックします。
datasink4 = glueContext.write_dynamic_frame.from_options(frame = dropnullfields3, connection_type = "s3", connection_options = {"path": "s3://xxx-lab-target", "partitionKeys": ['year','month','day','hour']}, format = "parquet", transformation_ctx = "datasink4")
- [ジョブの実行] をクリックします。
- Parmaeters(任意) 画面が表示されます。[ジョブの実行] をクリックします。
- ジョブの開始から実行完了までには、5~10分以上かかる場合があります。画面下部のログを参照して、ジョブの実行を確認します。
- ジョブが完了したら、S3バケット xxx-lab-target を確認します。JSON形式のファイルがParquet形式に変換されているのが確認できます。
- Kinesis Data Generatorを停止します。
タスク6:Athenaの利用
このタスクでは前のタスクでS3に蓄積したデータに対してAthenaからクエリを実行します。
変換データ用クローラの作成
AthenaはGlueデータカタログを利用できるため、クローラを用いて前のタスクの出力をデータカタログに登録します。
- ナビゲーションペインから [クローラの追加] をクリックします。
- [クローラの追加] をクリックします。
- 以下の条件で、クローラを作成します。指定がない項目はデフォルトのままにしておきます。
- クローラの情報
- クローラの名前:
lab-stageddata-crawler
- Specify crawler source type
- データストアの追加
- Choose a data store: S3
- インクルードパス: s3://xxx-lab-target
- 別のデータストアの追加
- IAM ロールの選択
- 既存のIAMロールを選択 をクリック
- IAM ロール: lab-crawler-role
- このクローラのスケジュールを設定する
- クローラの出力を設定する
- [データベースの追加] をクリック
- データベース名:
lab_staged_db
- クローラの一覧画面が表示されるので、lab-stageddata-crawler を選択し、[クローラの実行] をクリックします。
- ステータスが Ready になるのを待ちます。
- ナビゲーションペインから [テーブルの確認] をクリックします。
- テーブルがParguetとして分類されていることが確認できます。
- テーブル名 xxx_lab_target をクリックして詳細情報を確認します。
- 画面下部に、テーブルのスキーマ情報が表示されます。JSON形式のテーブルのと同じ構造で認識されているのが確認できます。
- [パーティションの表示]をクリックします。S3バケットのフォルダと同一のパーティションになっていることが確認できます。
- [パーティションを閉じる]をクリックします。
Athenaによるクエリの実行
- サービス > S3 をクリックします。
- 次の条件でAthena用のバケットを作成します。xxxには自分の名前を設定するなどして、バケット名の重複を回避してください。
- サービス > Athena をクリックします。
- [Get Started] をクリックします。
- チュートリアルが表示された場合は、チュートリアルを閉じます。また、Glueカタログへのアップグレードが表示された場合は、[Upgrade]をクリックしてアップグレードを実行してください。
- 画面上部に表示されている Workgroup: primaryをクリックします。
- primary ワークグループを選択します。
- [View details] をクリックします。
- [Edit workgroup] をクリックします。
- Query result location の[Select] をクリックして、先ほど作成した
xxx-lab-athena
を選択します。
- [Select] をクリックします。
- [Save] をクリックします。
- 画面上部に表示されている Query Editor をクリックします。
- 画面左に表示されている Database を lab_staged_db にします。
- Query Editorにクエリの入力して実行します。[Run Query]がクリックできない場合は、CTRL+ENTERで実行してください。
SELECT count(*)
FROM xxx_lab_target
WHERE status = 'FAIL'
SELECT sensorId, currentTemperature, status
FROM xxx_lab_target
WHERE status = 'FAIL'
オプションタスク1:QuickSightによる可視化
このオプションタスクを実施する場合は、必ず最後の手順を実施して、明示的にアカウント解除を行ってください。
QuickSightアカウントの登録
- サービス>QuickSightをクリックします。
- [Sign up for QuickSight]をクリックします。
サブスクリプションが解除されていない環境の場合、メールアドレスの登録画面が表示されます。その場合、メールアドレスにaaa@bbb.ccc
を入力して、アカウントとサブスクリプションを解除してください。操作方法が不明の場合は、インストラクターを呼んでんでください。
- 「Create your QuickSight account」では Standard を選択し、[Continue]をクリックします。
- アカウント登録の画面では以下を入力して、[完了]をクリックします。(指定がない項目はデフォルトのまま)
- QuickSight capacity region: US West (Oregon)
- QuickSight account name:
studentXXX
(XXXには任意の数値を入力)
- Notification email address:
aaa@bbb.ccc
- サービスの有効化:Amazon Athena、Amazon S3(バケット xxx-lab-target を選択)
- アカウント登録が完了したら、[Amazon QuickSightに移動する]をクリックします。
データセットの作成
- 画面右上の[データの管理]をクリックします。
- 画面左上の[新しいデータセット]をクリックします。
- データソースに Athena を選択します。
- 「新規Athenaデータソース」画面では、次を設定します。
- [データソースを作成]をクリックします。
- 「テーブルの選択」画面では、lab_staged_dbを選択し、xxx_lab_target をクリックします。
- [選択] をクリックします。
- 「データセットの作成を終了する」画面では、「データクエリの直接実行」を選択します。
- [Visualize] をクリックします。
可視化
- ビジュアルタイプに 円グラフ を選択します。
- グループに Statusをドラッグします。これによって各スタータスの割合が円グラフとして表示されます。
- 可視化を行ったら画面上部の「キャプチャ」をクリックします。これによってグラフのビジュアルがキャプチャされます。
- 画面左に表示されている「視覚化」をクリックします。
- いくつかの種類でビジュアルを作成し、キャプチャを行います。
- 画面左から「ストーリー」をクリックします。
- キャプチャしたビジュアルが表示されるので一番上のビジュアルをクリックします。
- 画面下部の [次へ] をクリックして、ビジュアルを進めます。
- 最後のビジュアルまで表示したら、[ストーリーを中止する] をクリックします。
アカウントの解除
このオプションタスクを実施した場合は、必ず最後にこの作業を行ってください。
- 画面右上に表示されているユーザー名 awsstudent2 をクリックします。
- QuickSightの管理 をクリックします。
- アカウント設定 をクリックします。
- [サブスクリプション解除] をクリックします。
- Unsubscribe from QuickSight で student アカウントが選ばれていることを確認して、[サブスクリプション解除] をクリックします。
- [Go to AWS Console] をクリックします。
オプションタスク2:Elasticsearchによる分析
Elasticsearchの設定
- サービス > Elasticsearch Service を選択します。
- [新しいドメインの作成] をクリックします。
- 以下の条件で、ドメインを作成します。指定がない項目はデフォルトのままにしておきます。
- Step 1: デプロイタイプの選択
- デプロイタイプ:開発およびテスト
- バージョン:6.8
- Step 2: クラスターの設定
- Elasticsearch ドメイン名:
lab-domain
- Step 3: アクセスの設定
- ネットワーク構成:ブリックアクセス
- アクセスポリシー
- ドメインアクセスポリシーの設定:ドメインへのオープンアクセスを許可(警告は受け入れる)
- Step 4: 確認
- しばらくドメインの初期化処理が続きますので、終了するまで待ちます。(10分以上かかる場合があります)
Fireohoseの設定
- サービス > Kinesis をクリックします。
- [配信ストリームの作成] をクリックします。
- 以下の条件で、配信ストリームを作成します。指定がない項目はデフォルトのままにしておきます。
- Step 1: Name and source
- Delivery stream name:
lab-es-delivery
- Source: kinesis stream
- Kinesis stream: lab-stream
- Step 2: Process records
- Step 3: Choose destination
- Destination: Amazon Elasticsearch Service
- Domain: lab-domain
- Index:
lab-index
- Type:
lab-type
- Backup S3 bucket:
xxx-lab-backup
([Create new]をクリックして新規に作成)
- Step 4: Configure settings
- Buffer interval:
60
- IAM role: 以下の手順で新規作成
- [Create new or choose] をクリック
- IAMロール:新しいIAMロールの作成
- ロール名:
firehose_es_deliver_role
を設定
- [許可] をクリック
- Step 5: Review
- 内容を確認して [Create delivery stream] をクリック
- Kinesis Data Generatorに再度サインインします。サインアウトしてなかった場合は、一度サインアウトしてください。ユーザー名とパスワードは前の手順で作成した
kdguser
/ Labpass123
を用います。
- 「タスク3: Kinesis Data Generatorの設定」の設定を再度入力して、データ送信を開始します。
- これによってElasticsearchへの配信が開始されます。数分待って次の手順に進みます。
Kibanaの利用
- サービス > Elasticsearch Service をクリックします。
- lab-domain をクリックします。
- [概要] タブに表示されているKibanaのリンクをクリックします。
- 「Welcome to Kibana」画面が表示されたら、画面下部の Explore on my own をクリックします。
- 画面左の [Management] > Index Pattern をクリックします。
- Create index patternに以下の設定を行います。
- Step 1 of 2: Define index pattern
- Index pattern:
lab*
を入力して lab-indx を検索
- [Next Step] をクリック
- Step 2 of 2: Configure settings
- [Create index pattern] をクリック
- 画面左から [Discover] をクリックします。
- 画面上部のクエリバーにクエリを入力します。
status: OK
currentTemperature: [10 TO 20]
currentTemperature: [10 TO 20] AND status: FAIL
- 時間があれば他の機能も使用してみてください。
ラボを終了する
お疲れ様でした。 このラボを完了しました。Qwiklabs画面で [ラボの終了] をクリックして終了してください。