

# チュートリアル: AWS Glue Studio ノートブックを使用して最初のストリーミングワークロードを構築する
<a name="streaming-tutorial-studio-notebooks"></a>

このチュートリアルでは、AWS Glue Studio ノートブックを活用して ETL ジョブをインタラクティブに構築および改良し、ほぼリアルタイムのデータ処理を行う方法について説明します。このガイドでは、AWS Glue が初めての方も、スキルセットの向上を目指している方も、AWS Glue インタラクティブセッションノートブックの可能性を最大限に引き出すことができるよう、順を追って説明していきます。

AWS Glue Streaming では、Amazon Kinesis Data Streams、Apache Kafka、Amazon Managed Streaming for Apache Kafka (Amazon MSK) などのストーミングソースからのデータを消費し、連続的に実行するストリーミング抽出、変換、ロード (ETL) ジョブを作成できます。

## 前提条件
<a name="streaming-tutorial-studio-notebooks-prereqs"></a>

このチュートリアルを実行するには、AWS Glue、Amazon Kinesis、Amazon S3、Amazon Athena、AWS CloudFormation、AWS Lambda、Amazon Cognito を使用する AWS コンソール権限を持つユーザーが必要です。

## Amazon Kinesis からストリーミングデータを消費する
<a name="streaming-tutorial-studio-notebooks-kinesis"></a>

**Topics**
+ [Kinesis Data Generator でモックデータを生成する](#streaming-tutorial-studio-notebooks-kinesis-generate-data)
+ [AWS Glue Studio で AWS Glue Streaming ジョブを作成する](#streaming-tutorial-studio-notebooks-kinesis-create-job)
+ [クリーンアップ](#streaming-tutorial-studio-notebooks-clean)
+ [結論](#streaming-tutorial-studio-notebooks-conclusion)

### Kinesis Data Generator でモックデータを生成する
<a name="streaming-tutorial-studio-notebooks-kinesis-generate-data"></a>

**注記**  
前の「[チュートリアル: AWS Glue Studio を使用して最初のストリーミングワークロードを構築する](streaming-tutorial-studio.md)」を既に完了している場合は、Kinesis Data Generator がアカウントに既にインストールされているため、以下のステップ 1～8 をスキップしてセクション「[AWS Glue Studio で AWS Glue Streaming ジョブを作成する](#streaming-tutorial-studio-notebooks-kinesis-create-job)」に進んでください。

Kinesis Data Generator (KDG) を使用して JSON 形式のサンプルデータを合成的に生成できます。完全な手順と詳細については、[ツールのドキュメント](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html)を参照してください。

1. 開始するには、[https://aws-data-analytics-workshops.s3.amazonaws.com/aws_glue/aws_glue_streaming/docs/glue-stream.yaml](https://aws-data-analytics-workshops.s3.amazonaws.com/aws_glue/aws_glue_streaming/docs/glue-stream.yaml) をクリックして、ご使用の AWS 環境で AWS CloudFormation テンプレートを実行します。
**注記**  
Kinesis Data Generator の Amazon Cognito ユーザーなどのリソースが AWS アカウントに既に存在しているために、CloudFormation テンプレートの実行が失敗する場合があります。これは、別のチュートリアルやブログで既に設定していたことが原因である可能性があります。これに対処するには、新しい AWS アカウントでテンプレートの実行をやり直すか、別の AWS リージョンを試してみてください。これらの方法により、既存のリソースと競合することなくチュートリアルを実行できるようになります。

   このテンプレートにより、Kinesis データストリームと Kinesis Data Generator アカウントがプロビジョニングされます。

1. KDG が認証に使用する **[ユーザー名]** と **[パスワード]** を入力します。後で使用するために、ユーザー名とパスワードをメモしておきます。

1. 最後のステップまで **[次へ]** を選択していきます。IAM リソースの作成を承認します。パスワードが最小要件を満たしていないなど、画面上部にエラーがないか確認し、テンプレートをデプロイします。

1. スタックの **[出力]** タブに移動します。テンプレートがデプロイされると、生成されたプロパティ **KinesisDataGeneratorUrl** が表示されます。その URL をクリックします。

1. メモしておいた **[ユーザー名]** と **[パスワード]** を入力します。

1. 使用しているリージョンを選択し、Kinesis ストリーム `GlueStreamTest-{AWS::AccountId}` を選択します。

1. 以下のテンプレートを入力します。

   ```
   {
       "ventilatorid": {{random.number(100)}},
       "eventtime": "{{date.now("YYYY-MM-DD HH:mm:ss")}}",
       "serialnumber": "{{random.uuid}}",
       "pressurecontrol": {{random.number(
           {
               "min":5,
               "max":30
           }
       )}},
       "o2stats": {{random.number(
           {
               "min":92,
               "max":98
           }
       )}},
       "minutevolume": {{random.number(
           {
               "min":5,
               "max":8
           }
       )}},
       "manufacturer": "{{random.arrayElement(
           ["3M", "GE","Vyaire", "Getinge"]
       )}}"
   }
   ```

   **[テストテンプレート]** を使用してモックデータを表示し、**[データを送信する]** を使用してモックデータを Kinesis に取り込むことができるようになりました。

1. **[データを送信する]** をクリックして、5～10K のレコードを Kinesis に生成します。

### AWS Glue Studio で AWS Glue Streaming ジョブを作成する
<a name="streaming-tutorial-studio-notebooks-kinesis-create-job"></a>

AWS Glue Studio は、データ統合パイプラインの設計、オーケストレーション、監視のプロセスを簡素化するビジュアルインターフェイスです。これにより、ユーザーは大量のコードを記述しなくてもデータ変換パイプラインを構築できます。ビジュアルジョブオーサリングエクスペリエンスとは別に、AWS Glue Studio には、このチュートリアルで使用する AWS Glue インタラクティブセッションによって支援された Jupyter Notebook も含まれています。

#### AWS Glue Streaming インタラクティブセッションジョブを設定する
<a name="streaming-tutorial-studio-kinesis-create-job-interactive-sessions"></a>

1. 提供されている[ノートブックファイル](https://aws-data-analytics-workshops.s3.amazonaws.com/aws_glue/aws_glue_streaming/docs/glue_streaming_tutorial_notebook.ipynb)をダウンロードして、ローカルディレクトリに保存します。

1. AWS Glue コンソールを開き、左側のペインで **[ノートブック]** > **[Jupyter Notebook]** > **[既存のノートブックをアップロードして編集する]** の順にクリックします。前のステップのノートブックをアップロードし、**[作成]** をクリックします。  
![このスクリーンショットは Jupyter Notebook ジョブの作成を示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-2a.png)

1. ジョブに対して名前とロールを指定し、デフォルトの Spark カーネルを選択します。次に **[ノートブックの開始]** をクリックします。**[IAM ロール]** では、CloudFormation テンプレートによってプロビジョニングされたロールを選択します。これは CloudFormation の **[出力]** タブで確認できます。  
![このスクリーンショットには [ノートブックの設定] ダイアログが表示されています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-2b.png)

ノートブックには、このチュートリアルを続けるために必要なすべての手順が記載されています。ノートブックに記載されている手順を実行することも、このチュートリアルに従ってジョブの開発を続けることもできます。

#### ノートブックのセルを実行する
<a name="streaming-tutorial-studio-kinesis-create-job-notebook-cells"></a>

1. (オプション) 最初のコードセルの `%help` は、使用可能なすべてのノートブックマジックをリストします。ここではこのセルはスキップしても構いませんが、自由に試してみてください。

1. 次のコードブロック `%streaming` から始めます。このマジックにより、ジョブタイプがストリーミングに設定され、AWS Glue Streaming ETL ジョブを開発、デバッグ、デプロイできるようになります。

1. 次のセルを実行して AWS Glue インタラクティブセッションを作成します。出力セルには、セッションの作成を確認するメッセージが表示されます。  
![このスクリーンショットは、インタラクティブセッションの開始を示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-2c.png)

1. 次のセルでは変数を定義します。値をジョブに適した値に置き換え、セルを実行します。例えば、次のようになります。  
![このスクリーンショットは、インタラクティブセッションでの変数の定義を示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-2d.png)

1. データは既に Kinesis Data Streams にストリーミングされているため、次のセルではストリームからの結果を消費します。次のセルを実行します。print ステートメントがないため、このセルからの期待される出力はありません。

1. 次のセルでは、サンプルセットを取得して受信ストリームを調べ、そのスキーマと実際のデータを出力します。例えば、次のようになります。  
![このスクリーンショットは、インタラクティブセッションの受信レコードをサンプリングして出力したところを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-2e.png)

1. 次に、実際のデータ変換ロジックを定義します。セルは、マイクロバッチごとにトリガーされる `processBatch` メソッドで構成されます。セルを実行します。概説すると、受信ストリームに対して次のことを行います。

   1. 入力列のサブセットを選択します。

   1. 列の名前を変更します (o2stats を oxygen\_stats に変更します)。

   1. 新しい列 (serial\_identifier、ingest\_year、ingest\_month、ingest\_day) を取得します。

   1. 結果を Amazon S3 バケットに保存し、パーティション化された AWS Glue カタログテーブルも作成します。

1. 最後のセルでは、10 秒ごとにプロセスバッチをトリガーします。セルを実行し、Amazon S3 バケットと AWS Glue カタログテーブルに入力されるまで約 30 秒待ちます。

1. 最後に、Amazon Athena クエリエディタを使用して、保存されたデータを参照します。名前が変更された列と新しいパーティションが表示されます。  
![このスクリーンショットは、Amazon Athena クエリエディタで、保存されたデータをブラウズしているところを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-2f.png)

ノートブックには、このチュートリアルを続けるために必要なすべての手順が記載されています。ノートブックに記載されている手順を実行することも、このチュートリアルに従ってジョブの開発を続けることもできます。

#### AWS Glue ジョブを保存して実行する
<a name="streaming-tutorial-studio-kinesis-create-job-save"></a>

インタラクティブセッションノートブックを使用したアプリケーションの開発とテストが完了したら、ノートブックインターフェイスの上部にある **[保存]** をクリックします。保存後は、アプリケーションをジョブとして実行することもできます。

![このスクリーンショットは、ノートブックを AWS Glue ジョブとして保存するところを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-2g.png)


### クリーンアップ
<a name="streaming-tutorial-studio-notebooks-clean"></a>

アカウントに追加料金が発生しないように、手順の一部として開始したストリーミングジョブを停止してください。これを行うには、ノートブックを停止します。これでセッションが終了します。Amazon S3 バケットを空にして、前にプロビジョニングした AWS CloudFormation スタックを削除します。

### 結論
<a name="streaming-tutorial-studio-notebooks-conclusion"></a>

このチュートリアルでは、AWS Glue Studio ノートブックを使用して次のことを行う方法を説明しました。
+ ノートブックを使用してストリーミング ETL ジョブを作成する
+ 受信データストリームをプレビューする
+ AWS Glue ジョブを公開することなくコーディングして問題を修正する
+ エンドツーエンド作業コードを確認し、デバッグを除去して、ノートブックからステートメントやセルを出力する
+ コードを AWS Glue ジョブとして公開する

このチュートリアルの目的は、AWS Glue Streaming とインタラクティブセッションを使用する実践的な使用体験を提供することです。AWS Glue Streaming の個々のユースケースの参考としてご利用いただくことをお勧めします。詳細については、「[AWS Glue のインタラクティブセッションの開始方法](interactive-sessions.md)」を参照してください。