【AWS】AWS Glue ~ 入門編 ~

■ はじめに

Glue について、徐々に調べて書き込んでおく

目次

【1】AWS Glue
【2】Lambda との違い
【3】使用上の注意
 1)サポートバージョンに注意
 2)ジョブタイプ「Spark」でサポート外のモジュールがある
 3)IAM権限設定が必要
【4】全体像
 1)全体の流れ
 2)構成要素
【5】Glue のセキュリティ設定

【1】AWS Glue

* Glue (グルー) : 糊、接着剤
 ⇒ AWSの各種サービス間を繋ぐ役割

* AWS上に保管しているデータ(Ex. S3)を
  抽出-Extract、変換-Transform、ロード-Load (ETL)するサービス

1)チュートリアルについて

サービスメニュー内にガイド付きチュートリアルがある
 ⇒ ありそうでなかった!詳細は、以下のサイトを参照。

https://dev.classmethod.jp/cloud/aws/aws-glue-tutorial/

【2】Lambda との違い

1)時間制限がない
2)使用メモリが大きい
3)サポートするPythonバージョンやライブラリ
4)コスト

【3】使用上の注意

1)サポートバージョンに注意

* Glue バージョンにより、Spark/Pythonのサポートバージョンが異なる
* どちらも最新バージョンではないので注意

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-job.html より抜粋

Glue バージョン Spark Python2 Python3 備考
0.9 Spark 2.2.1 Python 2.7 - -
1.0 Spark 2.4.3 Python 2.7 Python 3.6 -
2.0 Spark 2.4.3 - Python 3.7
3.0 Spark 3.1.1 - Python 3.7

※ Glue2.0/30 について

* 以下の関連記事を参照のこと

AWS Glue ~ Glue Version 2.0 ~
https://dk521123.hatenablog.com/entry/2020/08/19/130118
AWS Glue ~ Glue Version 3.0 ~
https://dk521123.hatenablog.com/entry/2021/09/18/232556

Glue バージョンに関わるトラブル

 以下の関連記事 の
「【1】別環境に移行したらPySparkジョブで
 「ImportError: cannot import name timezone」が発生」
を参照のこと

https://dk521123.hatenablog.com/entry/2019/10/25/232155

2)ジョブタイプ「Spark」でサポート外のモジュールがある

* ジョブタイプ「Spark」の場合、
 Python以外の言語で書かれた拡張機能(pandas など)は
 サポート外(ジョブタイプ「Python shell」だと使用可能)
詳細は、以下の関連記事を参照。

https://dk521123.hatenablog.com/entry/2019/11/17/231505

3)IAM権限設定が必要

* 例えば、「AWSGlueServiceRole」や「AmazonS3FullAccess」を付与する。
* 以下のサイトを参照

https://dev.classmethod.jp/cloud/aws/getting-started-aws-glue-iam-environment-setting/

【4】全体像

https://d1.awsstatic.com/webinars/jp/pdf/services/20190806_AWS-BlackBelt_Glue.pdf

の P15 「AWS Glueの全体像」がわかりやすい

1)全体の流れ

[1] クローラがデータソースのメタデータをクロールする
[2] クローラがメタデータをデータカタログに登録・更新する
[3] トリガーでジョブの実行タイミングを定義する
[4] データカタログのメタデータを元に、データソースからデータを抽出する
[5] ジョブを実行し、データターゲットに出力する

2)構成要素

[a] ジョブ(Job)

* 1つのタスク(処理)を記述
* 詳細は、以下の関連記事を参照。

https://dk521123.hatenablog.com/entry/2019/11/17/231505

[b] トリガ

* ジョブを開始する引き金(トリガー)を定義できる機能
* 詳細は、以下の関連記事を参照。

https://dk521123.hatenablog.com/entry/2019/11/29/221207

[c] クローラ(Clawer)

* S3においてあるファイルの内容やフォルダ構成から
  自動的にテーブルスキーマを解析し、データカタログに保存
* 詳細は、以下の関連記事を参照。

https://dk521123.hatenablog.com/entry/2019/12/01/003455

【5】Glue のセキュリティ設定

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/encryption-at-rest.html

[設定](Settings)から、以下の項目を暗号化できる
~~~~
[1] Data Catalog の暗号化(Metadata encryption)
[2] 接続パスワードの暗号化(Encrypt connection passwords)
~~~~

※ 暗号化する際には、KMS(Key Management Service)が必要

AWS Key Management Service (KMS)
https://dk521123.hatenablog.com/entry/2020/02/27/232553

参考文献

https://style.potepan.com/articles/12944.html
https://dev.classmethod.jp/cloud/aws/aws-glue-is-full-managed-and-serverless-service/
https://qiita.com/erikaadno/items/94a26f1ea1a829545812
https://dev.classmethod.jp/cloud/aws/relay_looking_back_aws_glue/
https://blog.engineer.adways.net/entry/advent_calendar_2017/05
https://www.qoosky.io/techs/0964aa9fdc
https://dev.classmethod.jp/cloud/aws/aws-glue-tutorial/

公式サイト

https://aws.amazon.com/jp/glue/faqs/
トラブルシューティング
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/troubleshooting-glue.html

関連記事

AWS Glue

AWS Glue ~ 基本編 / ジョブ ~
https://dk521123.hatenablog.com/entry/2019/11/17/231505
AWS Glue ~ 基本編 /トリガ ~
https://dk521123.hatenablog.com/entry/2019/11/29/221207
AWS Glue ~ 基本編 / クローラ ~
https://dk521123.hatenablog.com/entry/2019/12/01/003455
AWS Glue ~ DynamicFrame ~
https://dk521123.hatenablog.com/entry/2021/12/14/221043
AWS Glue ~ クローリング結果の確認画面 ~
https://dk521123.hatenablog.com/entry/2021/05/28/142153
AWS Glue ~ ローカル環境を作成する ~
https://dk521123.hatenablog.com/entry/2019/11/10/205535
AWS Glue ~ ローカル環境を作成する / Glue v3.0版 ~
https://dk521123.hatenablog.com/entry/2022/01/31/165650
AWS Glue ~ ジョブパラメータ ~
https://dk521123.hatenablog.com/entry/2022/09/28/105558
AWS Glue ~ Python shell job ~
https://dk521123.hatenablog.com/entry/2022/09/08/120231
AWS Glue ~ Glue Version 2.0 ~
https://dk521123.hatenablog.com/entry/2020/08/19/130118
AWS Glue ~ Glue Version 3.0 ~
https://dk521123.hatenablog.com/entry/2021/09/18/232556
AWS Glue ~ AWS Glue Studio ~
https://dk521123.hatenablog.com/entry/2020/09/24/145415
AWS Glue ~ トリガ / EventBridgeイベント ~
https://dk521123.hatenablog.com/entry/2021/07/16/161359
AWS Glue ~ EventBridgeでGlue Workflowを起動する ~
https://dk521123.hatenablog.com/entry/2022/04/22/194903
AWS Glue ~ ログ ~
https://dk521123.hatenablog.com/entry/2019/10/09/000000
Workflows / 入門編
https://dk521123.hatenablog.com/entry/2019/10/10/223018
AWS Glue ~ Boto3 / 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/14/000000
AWS Glue ~ Boto3 / 基本編 ~
https://dk521123.hatenablog.com/entry/2021/04/17/001930
AWS Glue ~ Boto3 / クローラ編 ~
https://dk521123.hatenablog.com/entry/2021/04/16/135558
AWS Glue ~ Boto3 / セキュリティ設定編 ~
https://dk521123.hatenablog.com/entry/2020/04/08/171208
AWS Glue ~ Boto3 / Glue connection編 ~
https://dk521123.hatenablog.com/entry/2020/01/29/224525
AWS Glue ~ Boto3 / パーティション操作編 ~
https://dk521123.hatenablog.com/entry/2021/06/09/113458
AWS Glue ~ Boto3 / DB・テーブル操作編 ~
https://dk521123.hatenablog.com/entry/2021/06/11/164015
AWS Glue ~ AWS CLI
https://dk521123.hatenablog.com/entry/2021/08/02/104306
AWS Glue ~ Workflows / パラメータ渡し ~
https://dk521123.hatenablog.com/entry/2019/10/15/221931
Glue から DataCatalogテーブル に対して Spark SQLを実行する
https://dk521123.hatenablog.com/entry/2021/05/11/220731
Glue から Redshift/PostgreSQL に接続する ~ Python shell編 ~
https://dk521123.hatenablog.com/entry/2020/08/26/193237
Glue から Redshift/PostgreSQL に接続する ~ PySpark編 ~
https://dk521123.hatenablog.com/entry/2020/09/23/111741
AWS Glue ~ Excelを扱うには / Python shell 版 ~
https://dk521123.hatenablog.com/entry/2019/11/08/000000
AWS Glue ~ Excelを扱うには / PySpark (Glue2.0) 版 ~
https://dk521123.hatenablog.com/entry/2020/10/09/144520
Glue Job から パーティションを更新することを考える
https://dk521123.hatenablog.com/entry/2021/05/15/130604
AWS Glue のトラブル ~ job編 - [1] ~
https://dk521123.hatenablog.com/entry/2019/10/25/232155
AWS Glue のトラブル ~ job編 - [2] ~
https://dk521123.hatenablog.com/entry/2020/10/12/152659
AWS Glue のトラブル ~ job編 - [3] ~
https://dk521123.hatenablog.com/entry/2021/02/16/145848
AWS Glue のトラブル ~ job編 - [4] ~
https://dk521123.hatenablog.com/entry/2021/05/10/143328
AWS Glue のトラブル ~ crawler編 ~
https://dk521123.hatenablog.com/entry/2020/05/07/144132
boto3 AWS Glue API のトラブル ~ trigger全般 編 ~
https://dk521123.hatenablog.com/entry/2020/10/23/110821
boto3 AWS Glue API のトラブル ~ scheduled trigger編 ~
https://dk521123.hatenablog.com/entry/2020/01/16/205331
boto3 AWS Glue API のトラブル ~ job/crawler編 ~
https://dk521123.hatenablog.com/entry/2020/02/05/223307
boto3 AWS Glue API のトラブル ~ Connection編 ~
https://dk521123.hatenablog.com/entry/2021/10/31/000000
AWS Glue Job で DB timeout が発生する
https://dk521123.hatenablog.com/entry/2021/08/30/104237
AWS Glue Job で ConnectionTimeoutError が発生する
https://dk521123.hatenablog.com/entry/2022/03/28/162514
AWS Glue上で エラー「Dynamic partition strict mode requires ...」が発生する
https://dk521123.hatenablog.com/entry/2021/05/17/120443
AWS Glue上で saveAsTextFile() を使ったら エラー「DirectOutputCommitter not found」が発生する
https://dk521123.hatenablog.com/entry/2021/05/18/185420
エラー「no identity-based policy allows the iam:PassRole action」が発生
https://dk521123.hatenablog.com/entry/2022/05/17/140400

その他

Pulumi ~ AWS Glue のデプロイ ~
https://dk521123.hatenablog.com/entry/2022/03/02/122037
AWS Data Wrangler ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/04/28/174316
AWS Lake Formation ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/10/13/094041
Amazon EMR ~ AWS Glueとの連携 ~
https://dk521123.hatenablog.com/entry/2020/11/12/113312
AWS Key Management Service (KMS)
https://dk521123.hatenablog.com/entry/2020/02/27/232553
Pentaho ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/04/000000