[AWS Black Belt Onine Seminar] AWS Glue
こんにちは、パートナーソリューションアーキテクト(PSA)の相澤です。
先日開催致しました AWS Black Belt Online Seminar AWS Glue の資料を公開いたしました。
当日参加者の皆様から頂いたQAの回答と併せてご紹介致します。
今後のAWS Black Belt Online Seminarのスケジュールは こちら です。皆様のご参加をお待ちしております。
過去の資料や、動画もこちらから視聴可能ですので、そちらもご参照ください
Q1 現在AWS GlueにてETLのリプレイスを検討しております。Kinesis Firehose → S3 → Glue → S3 というストリーミングETLを組む場合、AWS GlueのJobをどのようなトリガーで起動するのが良いでしょうか?
A1. 現時点ではS3からのトリガーで直接Glueのジョブをトリガーする方法は用意されていないため、S3のトリガーでLambda等に連係していただき、そこからオンデマンドのジョブを呼び出していただくのが良いと考えられます。
Q2 (Q1の回答に対して追加で、)ストリーミングでS3に置かれたデータにおいては、クローラ・データカタログ等は利用せずに、ジョブの実行引数に対象ファイルを渡した上で直接S3のオブジェクトをDataFrameにするのでしょうか?それとも新しくクロールされたデータのみを対象にETLコードを書くことが可能ですか?
A2. Glueのジョブ内でクローラーが確認していない、データソースやデータターゲット(Sink)とに対して処理gあ可能です。つまり、上記はどちらでも可能です。一旦クロールさせてから、その結果をもとに読み取ることも可能ですし、もしくは引数を元に直截S3上のオブジェクトを読み取ることも可能です。
Q3 リードレプリカのように、RDS1とRDS2のスキーマ/データを合わせたいのですが、可能でしょうか?RDS1でカラムが無くなった場合、RDS2にも反映することは可能でしょうか?
A3. カラムがなくなった事をトリガーに自動的に別のRDSの表定義を変更するという機能はありません。一般的には異機種RDBでDDLの変更を自動反映させる作業は単純ではないため、RDBネイティブのレプリケーションツールの利用をご検討ください。
Q4 RDS1からRDS2へデータを移行する際に、特定のカラムの値を変更することは可能でしょうか
A4.ジョブの中で任意のデータ処理をする事が可能です
Q5 クローリングの結果スキーマのバージョンが異なっていることがわかった際に、SNSメール通知は可能でしょうか?
A5. 現時点ではスキーマの変更時に自動でSNS通知を実行する機能はありません。
Q6 CrawlerのJDBC接続はVPC内通信ではなくインターネット経由のアクセスになりますか?
A6.VPC内にENIが作成され、VPC内(プライベートIPアドレス)での通信になります。
Q7 DynamicFrameとDynamicFrameCollectionの違いはなんですか?
A7.DynamicFrameを集める(一塊として扱う)のがDynamicFrameCollectionクラスです。
Q8 Pandasを使いたいんですが可能でしょうか?
A8.AWS GlueのジョブではPure Pythonのライブラリのみサポートしています。Pandasはライブラリ中にC言語で書かれた拡張を含むため(Pure Pythonではないため)、利用できません。
Q9 一般的なETL製品とAWS Glueとの棲み分けについてお聞きしたいです。
A9.AWS Glueは、Pythonコードでジョブを作成しますが、一般的なETLソリューションではGUIでコンポーネントをDrag&Dropすることでジョブを作成する事ができるため、これが最も大きな違いになります。ユーザにとってどちらの方法が生産性が高いかという点でご選択ください。また、Glueはサーバレスであり、インフラの管理負担を大幅に削減できる事も既存ETL製品との違いです。
Q10 AWS Glueを選択していただく上での提案ポイントがあれば教えていただきたいです。
A10.AWS Glueのメリットは、「ジョブ(変換)コードをPythonで書け、それをサーバレスのインフラで実行できる」事にあります。ジョブをPython(PySpark)で書けることのメリットは、オープンな言語&フレームワークなため、既存の知識が流用しやすく、プレインなコードなのでGit等のツールでの差分管理が可能です。またサーバレスなため、日々の運用負担が低くETL負荷が増加した際にもサーバ増強等の作業をする必用がないという点もメリットです。
Q11 Glueのジョブであるサーバーへアクセスさせたいのですが、IPアドレスを固定することはできますか?
A11.ジョブの実行サーバはジョブ実行毎に作成されるため、IPアドレスを固定する事はできません。
Q12 ETLコードにて、ターゲットのRedshiftのテーブル定義に合わせてDynamicFrameの列順変更や列追加を行う必要がある場合、どのTransformクラスを利用するべきでしょうか?
A12.列の順序を変更する場合は、ApplyMappingクラスでソースとターゲット(Sink)のマッピングを調整することが可能です。
Q13 実行しているジョブやクローラの料金モニタリングはどこで行うべきですか?
A13.料金のモニタリングは、他のサービスと同様に、Billingの機能(Billingにアラートを付ける等)で行なうことが可能です。
Q14 文字エンコードの縛りはありますか?
A14.AWS Glueとして特に文字コードの規定があるわけではありませんが、PySparkをベースにしているため、ジョブ処理時には文字列がUTF-8である事を想定しています。JDBCドライバ経由でRDBを読み取った場合はJDBCドライバ内で文字コードがUTF-8に変更されるものもあります。UTF-8以外のファイル(S3上)は読み取る際に文字コードをUTF-8変換する必用があります。
Q15 DataFrameでもDynamicFrameどちらでも行える処理はどちらを利用するほうがパフォーマンスメリットがありますか?
A15.パフォーマンス上の差異については現時点でのデータはありませんが、変換のオーバヘッドは低いため、必用な処理があるほうに変換をして御利用いただくのが良いと考えられます。
コメント