AWS Glueのオンラインセミナー受けてみた

「[AWS Black Belt Online Seminar AWS Glue](https://www.slideshare.net/AmazonWebServicesJapan/20190806-aws-black-belt-online-seminar-aws-glue)」の自分向けメモ
AWS Glueって何？......レベルの人向け


## Glue登場の背景
### ビッグデータがキーワード
 - データ分析のプロセスは以下
    - 収集
    - 保存
    - 分析
    - 活用
 - ビッグデータが注目される前、ほとんどCSVやRDS上のデータとして保存
 - 今日ではIOTによる大量データや様々なデータ形式が使われている
 - 大量データの生で保存、かつ必要なときに必要分取得、活用できる保存場所が求められた

### データレイクの登場
 - 様々なデータソースから生成される生データをそのまま保存する
 - 生データは分析するために前処理（ELT処理）が必要

### Glue
 - フルマネージドでサーバーレスなELTサービス
 - データカタログによって、他サービスとの連携が容易
 - 暗号化対応

## 機能
### 全体像
 - クローラーによってデータソースからメタデータ（テーブル構造やスキーマ）をクロール
 - クローラーが更新したメタデータをデータカタログにて管理
 - トリガーにてサーバーレスエンジンが起動
 - サーバーレスエンジンはジョブを実行し、データカタログとデータソースから結果を出力

### データカタログ
 - データソースのメタデータを管理するリポジトリ機能
 - データソースは以下を指定可能
    - DynamoDB
    - S3
    - Redshift
    - RDS
    - オンプレDB

#### Apache Hiveメタストアとは
 - 実データとは別に表の定義だけ保存する仕組み
 - 実データはHDFS（Hadoop Distributed File System）やS3などに保存する

#### クローラー
 - データカタログにメタデータを作成する機能
 - スキーマ情報を自動で判断
 - パーティションも自動で認識

#### メタデータ
 - テーブル情報
 - テーブルプロパティ
 - テーブルスキーマ

#### スキーマ管理
 - バージョン管理可能
 - バージョン比較（差分表示）も可能

#### 接続管理
 - S3、DyanmmoDB：IAMロールで制御
 - Redshift、RDS、オンプレDB、EC2：JDBCでアクセス制御
    - 事前に接続設定の追加が必要
    - セキュリティグループの設定が必要


### サーバーレスエンジン
#### ジョブ作成
 - ETLの処理単位（ジョブ）はApache SparkとPython Shellがある

#### Worker Type
 - DPU（ジョブ実行時に割り当てる処理能力）
 - G.1xとG.2xを選択可能

#### SparkでETL実行した際に起きうる課題
 - 型が混在すると処理が止まってしまう
 - 事前にデータの中身を調査する必要がある

#### DynamicFrameとは
 - 複数の型の可能性を残して、後で決定できるようにする（Choice型）
    - 複数の型を発見した場合に両方の型をもつことが可能

#### ブックマーク機能
 - ジョブの実行状態を保持、追跡が可能
 - 定常的にELT処理を行う場合に有効
    - 処理済みデータを再度処理しない
    - 処理結果を重複出力しない

#### サーバレスETL処理の使い分け
 - Lmabda
    - 小規模処理
    - 15分以内
    - 豊富なトリガー
 - Glue Python Shell
    - 中規模処理
    - 実行時間制限なし
    - Pandasなどのライブラリ
 - Glue Spark
    - 大規模処理
    - 実行時間制限なし
    - 並列分散処理


### オーケストレーション
#### 独自ライブラリの利用
 - Spack、Python Shellともに利用可能

#### トリガー
 - ジョブを開始するための定義を設定できる機能
 - スケジュール、ジョブイベント、手動実行可能

#### ワークフロー機能
 - クローラー、トリガー、ジョブのDAG（有向非巡回グラフ）を生成する機能


## 開発環境
### 開発エンドポイント
 - ジョブを実行するために開発したコードを動かす実行環境

### Notebookサーバー
 - プログラムそのものの記述と実行結果を表示する環境

#### SageMaker Notebook
 - Glueのコンソール上でSageMaker Notebookサーバーを起動する
 - SageMaker Notebookから直接SparkSQLの実行が可能

### 開発エンドポイントとNotebookの関係
 - ユーザー　→　Notebook　→　開発エンドポイント　→　Glue

## ネットワーク/セキュリティ/監視
### GlueからVPCへのアクセス
 - プライベートサブネットのENI経由でアクセスしていく

### セキュリティグループ
 - Glueが利用しているENIをセキュリティグループに自己参照として設定

### IAM
 - IAMを用いて、Glueの権限管理

### リソースレベルによるポリシーとアクセス許可
 - データカタログリソースへの制御

### 暗号化
 - KMSキーを指定して、データベース、テーブルを含むデータベースカタログ全体を暗号化

### モニタリング
 - クローラー、ジョブステータス、ジョブの実行状況の確認可能

### Continuous Logging
 - Spark ETLジョブの新緑状況をリアルタイムで確認可能

## ユースケース
### データカタログを用いたメタデータ管理
 - EMR、Athena、Redshift利用時のメタデータ管理
 - S3条にあるデータのメタデータをデータカタログに登録

### ジョブによるSQLの定期実行
 - Redshiftに定期クエリを実行
 - タイムアウト設定し中断することが可能
 - SQLを長時間実行し続けることが可能

### ワークフロー機能を用いたELTパイプライン
 - 複数ジョブを組み合わせて利用

### サーバーレスアナリティクス
 - 開発エンドポイント、SageMaker Notebookを用いて分析

### データレイクを用いたログ分析基盤
 - fluentd、Kinesis Data Streamsでリアルタイムにログデータを可視化（スピードレイヤー）
 - fluentd、Kinesis Firehose、S3で収集したログデータをELT処理、可視化（バッチレイヤー）

### GlueとSageMagerを用いた機械学習基盤
 - Glueにて学習データを作成し、学習の実行とモデルのデプロイをSageMkerで実行
 - ワークフロー機能もしくはStep Functionsで構築

## 料金
 - ELTジョブ
    - Apatche Spark
    - Python Shell
 - 開発エンドポイント
 - データカタログ
    - ストレージ
    - リクエスト
 - クローラー

## まとめ
 - サーバーレスのELTサービス
 - メタデータを管理
 - 他サービスとセキュアに連携