

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

このチュートリアルでは、AWS Glue Studio を使用してストリーミングジョブを作成する方法について説明します。AWS GlueStudio は、AWS Glue ジョブを作成するためのビジュアルインターフェイスです。

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

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

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

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

**Topics**
+ [Kinesis Data Generator でモックデータを生成する](#streaming-tutorial-studio-kinesis-generate-data)
+ [AWS Glue Studio で AWS Glue Streaming ジョブを作成する](#streaming-tutorial-studio-kinesis-create-job)
+ [変換を実行し、変換した結果を Amazon S3 に保存する](#streaming-tutorial-studio-kinesis-transformation)

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

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

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

   このテンプレートにより、Kinesis データストリームと Kinesis Data Generator アカウントがプロビジョニングされます。また、データを保持する Amazon S3 バケットと、このチュートリアルに必要な権限を持つ Glue サービスロールが作成されます。

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-kinesis-create-job"></a>

1. 同じリージョンのコンソールで AWS Glue に移動します。

1. 左側のナビゲーションバーの **[データ統合と ETL]** にある **[ETL ジョブ]** を選択します。

1. **[空白のキャンバスのビジュアル]** を使用して AWS Glue ジョブを作成します。  
![このスクリーンショットは [ジョブの作成] ダイアログを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1a.png)

1. **[ジョブの詳細]** タブに移動します。

1. AWS Glue のジョブ名には `DemoStreamingJob` を入力します。

1. **[IAM ロール]** では、CloudFormation テンプレートによってプロビジョニングされたロール `glue-tutorial-role-${AWS::AccountId}` を選択します。

1. **[Glue バージョン]** では、**Glue 3.0** を選択します。その他のオプションはすべて、デフォルト設定のままにします。  
![このスクリーンショットは [ジョブの詳細] タブを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1b.png)

1. **[ビジュアル]** タブに移動します。

1. プラスアイコンをクリックします。検索バーに「**Kinesis**」と入力します。**[Amazon Kinesis]** データソースを選択します。  
![このスクリーンショットは [ノードの追加] ダイアログを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1c.png)

1. **[データソースのプロパティ - Kinesis ストリーム]** タブの **[Amazon Kinesis ソース]** で **[ストリームの詳細]** を選択します。

1. **[データストリームの場所]** で **[自分のアカウントにストリームを配置する]** を選択します。

1. 使用しているリージョンを選択します。

1. `GlueStreamTest-{AWS::AccountId}` ストリームを選択します。

1. 他の設定はすべて、デフォルトのままにします。  
![このスクリーンショットは [データソースのプロパティ] タブを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1d.png)

1. **[データのプレビュー]** タブに移動します。

1. **[データプレビューセッションを開始]** をクリックすると、KDG が生成したモックデータがプレビューされます。AWS Glue Streaming ジョブのために前もって作成した Glue サービスロールを選択します。

   プレビューデータが表示されるまで 30～60 秒かかります。**[表示するデータがありません]** と表示された場合は、歯車アイコンをクリックして、**[サンプリングする行数]** を `100` に変更します。

   サンプルデータは以下のように表示されます。  
![このスクリーンショットは [データのプレビュー] タブを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1e.png)

   推測されたスキーマは **[出力スキーマ]** タブでも確認できます。  
![このスクリーンショットは [出力スキーマ] タブを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1f.png)

### 変換を実行し、変換した結果を Amazon S3 に保存する
<a name="streaming-tutorial-studio-kinesis-transformation"></a>

1. ソースノードを選択した状態で、左上のプラスアイコンをクリックして **[変換]** ステップを追加します。

1. **[スキーマ変更]** ステップを選択します。  
![このスクリーンショットは [ノードの追加] ダイアログを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1g.png)

1. このステップでは、フィールドの名前を変更し、フィールドのデータ型を変換することができます。`o2stats` 列の名前を `OxygenSaturation` に変更し、すべての `long` データ型を `int` に変換します。  
![このスクリーンショットは [変換] タブを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1h.png)

1. プラスアイコンをクリックして **[Amazon S3]** ターゲットを追加します。検索ボックスに「S3」と入力し、**[Amazon S3 - ターゲット]** 変換ステップを選択します。  
![このスクリーンショットは [ノードの追加] タブを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1i.png)

1. ターゲットファイル形式として **[Parquet]** を選択します。

1. 圧縮タイプとして **[Snappy]** を選択します。

1. CloudFormation テンプレート `streaming-tutorial-s3-target-{AWS::AccountId}` によって作成された **[S3 ターゲットの場所]** を入力します。

1. **[データカタログにテーブルを作成し、それ以降の実行時にスキーマを更新して新しいパーティションを追加する]** を選択します。

1. Amazon S3 ターゲットテーブルのスキーマを保存するターゲットの **[データベース]** と **[テーブル名]** を入力します。  
![このスクリーンショットは Amazon S3 ターゲットの設定ページを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1j.png)

1. **[スクリプト]** タブをクリックすると、生成されたコードが表示されます。

1. 右上の **[保存]** をクリックして ETL コードを保存し、**[実行]** をクリックして AWS Glue Streaming ジョブを開始します。

   **[実行ステータス]** は **[実行]** タブで確認できます。ジョブを 3～5 分間実行してから、ジョブを停止します。  
![このスクリーンショットは [実行] タブを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1k.png)

1. Amazon Athena で作成された新しいテーブルを確認します。  
![このスクリーンショットは Amazon Athena のテーブルを示しています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/streaming-tutorial-1l.png)