Glue

【VPC外リージョンサービス / ENIでVPC接続】

Glue は、サーバーレスな ETL(Extract, Transform, Load) サービスであり、分析(Analytics) における データ統合 と データ準備 を自動化できるプラットフォームです。

Glue Crawler によってデータソースをスキャンし、スキーマを自動検出して Glue Data Catalog に登録します。登録されたメタデータをもとに、Glue Job / ETL Job を実行して Python / Scala / PySpark ベースの ETL処理 を行うことができます。

開発者は Glue Studio を使ってGUI上でジョブを設計でき、ノーコードでデータ整形を行いたい場合は Glue DataBrew を利用できます。また、ジョブの実行や連携を自動化するために Glue WorkflowTrigger が用意されており、複雑なETLパイプラインも簡単に運用できます。

Glue Streaming によって Kinesis や Kafka からのリアルタイムデータを処理でき、Glue Schema Registry でストリーミングデータのスキーマ管理も可能です。

これらの機能は Athena、Redshift、EMR などのサービスと統合して動作し、データレイク環境の構築と分析基盤の自動化を強力に支援します。

重要用語

Glue Data Catalog
Glue Studio
Glue DataBrew
Glue Workflow
Trigger
Glue Schema Registry

ユースケース

ETLバッチによるデータ加工S3やRDS、DynamoDBなどに散在する生データをGlueジョブでクレンジング・変換し、分析しやすい形にして別のS3バケットに出力する。
データカタログによるスキーマ管理S3上のファイルをクローラーでスキャンし、テーブル定義をGlue Data Catalogに登録してAthenaやRedshift Spectrumから簡単に参照できるようにする。
サーバーレスETLパイプラインの構築スケジュール実行やEventBridgeトリガーと組み合わせて、インフラ管理不要のETLパイプラインを構築し、日次・時間単位でデータを更新する。

ベストプラクティス

データカタログの一元管理スキーマをGlue Data Catalogで集中管理し、複数サービスから参照する。
ジョブの小さな単位化処理を小さなジョブに分割し、再利用性と保守性を高める。
開発エンドポイントとテスト本番前に開発エンドポイントやノートブックでETLを検証する。

高可用性・バックアップ・リトライ

高可用性・バックアップ・リトライ設計のポイント
【デフォルト】AWS内部で冗長化
 ・Data Catalog(メタデータストア)
 ・ETLジョブ実行環境
 ・ジョブブックマーク
 ・スクリプトとコード保管
 ・ジョブ実行履歴とログ
 ・サービスエンドポイント
 ・自動リトライ機能
 ・データソース/ターゲット
【自動リトライ(ジョブ単位)】デフォルト0回
 ジョブが失敗したら自動再実行
【自動リトライ(バッチ単位)】デフォルト3回
 ストリーミングジョブのマイクロバッチが失敗したら自動再実行

セキュリティ

関連サービス設定内容
Subnet(公開リソースと内部リソースの分離)【Glueジョブ実行時に作られるENI】
 Privateの専用SubnetでマルチAZ構成
SG(リソース単位のアクセス制御)【Glueジョブ実行時に作られるENI】
 インバウンド:空(全て拒否)
 アウトバウンド:任意のポート
KMS(データの暗号化と鍵の安全管理)【ETLの中間データ・スクリプトの暗号化が必要】
 独自KMSキーを使うことを推奨(鍵操作、監査)
Secrets Manager(機密情報の安全管理)シークレット(秘密情報)の作成が推奨
 ETLジョブで利用する接続先DB認証情報
SSM Parameter Store(設定情報の一元管理)パラメータ(Parameter)の作成が推奨
 ETLジョブで使用する接続情報や設定パス
CloudTrail(操作履歴の記録・監査・追跡)【自動記録】
作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI)
データ操作は追跡できない(データプレーンAPI)
Config(リソースの構成状態・設定変更を記録)【Configが有効な場合】
データカタログ/ジョブ設定の変更履歴・暗号化/接続情報の準拠評価-
GuardDuty(脅威を自動検出)【GuardDutyが有効な場合】
データカタログ変更などのAPI異常検知

信頼ポリシー: Glue

 {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "glue.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

リソースベースポリシーによる補完

実行ロールで不足する権限をGlue Data Catalog のリソースベースポリシーで補うパターン
リソースベースポリシーのPrincipalリソースベースポリシーのAction
【Athena】
athena.amazonaws.com
glue:GetDatabase
glue:GetTable
glue:GetPartitions
【Redshift Spectrum】
redshift.amazonaws.com
glue:GetDatabase
glue:GetTable
glue:GetPartitions
【EMR】
elasticmapreduce.amazonaws.com
glue:GetDatabase
glue:GetTable
【Lake Formation】
lakeformation.amazonaws.com
glue:GetDatabase
glue:GetTable
※)権限設計の原則

ログ・監視

ログ出力先ログの種類
CloudWatch Logsジョブ実行ログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
glue.ALL.s3.filesystem.read_bytesS3読み取りバイト数
glue.ALL.s3.filesystem.write_bytesS3書き込みバイト数
glue.driver.ExecutorAllocationManager.executors.numberAllExecutorsExecutor数
glue.driver.aggregate.numCompletedStages完了ステージ数
glue.driver.aggregate.numFailedTasks失敗タスク数

制限値(固定値/ハードリミット/ソフトリミット)

ハードリミット制限値
ジョブの最大実行時間48時間

ソフトリミット制限値
ジョブ数/アカウント1,000
同時ジョブ実行数50
DPU(データ処理ユニット)100
データベース数/カタログ10,000
テーブル数/データベース200,000
パーティション数/テーブル20,000,000
トリガー数/アカウント1,000
クローラー数/アカウント1,000
同時クローラー実行数150

AWS CLIのサンプルコード

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
クローラークローラーの実行時間(DPU-Hour)
ETLジョブSpark/Pythonジョブの実行時間(DPU-Hour)
データカタログ保存するオブジェクト数とリクエスト数
開発エンドポイント開発エンドポイントの時間課金
料金計算ツール

公式ページ

AWSドキュメント Glue