Glue Studioを試して細かくハマっていたこと
このところGlue Studioを初めて使っていたのですが、いろいろ小さな失敗をしていたので書きます。(Glueでも共通だと思います)
Glueのバグっぽいものを見つけて、何が間違っているかも調べられた(下記リンク)ので、個人的には満足度が高いのですが、雰囲気でコンソールを触っていると失敗して時間が無駄にした感もあります。
Glue Sudioとは
AWS Glue Studio は AWS Glue での抽出、変換、ロード(ETL)ジョブの作成、実行、およびモニタリングを簡単にできるようにする新しいグラフィカルインターフェイスです。データ変換ワークフローを視覚的に作成し、AWS Glue の Apache Spark ベースのサーバーレス ETL エンジンです。ジョブの各ステップでスキーマとデータの結果を調べることができます。
(AWS documentより)
失敗いろいろ
IAM Role
設定で、IAMロールを入力しますが、
- AWSGlueServiceRole
- AmazonS3FullAccess
を持つロールを作ればよいです。AmazonS3FullAccessを使うことはドキュメントにも書いてあります。
GlueからS3へのアクセス権限がないとき、こういうエラーが出ていました。
An error occurred while calling z:com.amazonaws.services.glue.ml.Entity Detector.detect. No such file or directory 's3://xxxx/xxx/xxx.csv'
一見S3側のパーミッションがおかしいのかなと思えますが、これはGlueにアクセス権がないのでS3を見つけられない、という意味で、AmazonS3FullAccessを付与すると解決します。
S3の権限を狭くしたければ、このページにあるような"s3:GetObject"、"s3:PutObject"と使うバケットだけの構成にしてもよさそうです。
Glueの権限設定が複雑なので適当にやっていたら失敗していたのですが、本来は、秘情報を含むバケットと、出力用のバケットがあって、Glueがアクセスできるのは、、という設定が必要なので複雑のは当然ですね。
リトライ回数
ジョブのリトライ回数はデフォルトで3なのですが、トライアンドエラー中は0の方がよさそうです。
リトライが始まってしまうと、1回目が失敗したので設定を変えて実行しようとすると、エラーが出たりします。
[gluestudio-service.ap-northeast-1.amazonaws.com] startJobRun: ConcurrentRunsExceededException: Concurrent runs exceeded for glue-test (Service: AWSGlue; Status Code: 400; Error Code: ConcurrentRunsExceededException; Request ID: xxxxxxxx; Proxy: null)
入力データ間違い
IllegalArgumentException: requirement failed: EntityDetector cannot be applied to datasets without columns.
csvが整っていないときのエラーです。(ある行で、データが足りないとか)
Sensitive Data Detectionで日本固有のデータの列名には日本語は入れること
日本固有の秘匿情報を検知してマスクしてくれる機能がありますが、
MyNumber,Name
100000000005,AAA
100000000013,BBB
というcsvを入れると、正常なマイナンバーであるにも関わらず、検知してくれませんでした。
一行目を、「マイナンバー,Name」とか「MyNumber,名前」とか「マイナンバー、名前」にすると動きます。どうやら一行目でJAPAN_DATAのトリガーがかかるようです。(一行目を見ない設定にしたら?どうなんでしょう・・やっていませんが)
Sensitive Data Detectionで検知するデータを設定しなかったとき
日本のマイナンバーとか運転免許証番号とか、どの秘匿データを検知したいかを設定するのですが、その設定が何もされていなかったときのエラー
IllegalArgumentException: requirement failed: Must provide at least one entity type to detect.
余談: 気になるお値段
Pythonシェルだったので、課金条件はこちら。
Python Shell ジョブごとに、DPU 時間あたり 0.44USD が 1 秒単位で課金され、最小 1 分
今回の設定と、実行の結果:
- DPU: 10
- 42回実行。21回が1分以内。21回が1分30秒以内(75秒平均とする)。
ざっくりとした計算ですが、
10 PPU * (21 * 60sec + 21 * 75sec) / 3600sec * 0.44USD = 3.465 USD
となりCostExploreだと3.92USDだったので、少しズレはありますが、まぁまぁの概算でしょうか。(途中でリトライを止めた分が可算されていないのが理由です)
まとめ
Glue Studioを使ってみたときの失敗をまとめました。
Discussion