AWS Glue DataBrewにレシピをインポートしてみた(AWS CLI編)
データアナリティクス事業本部の鈴木です。
AWS Glue DataBrew(以降、DataBrew)のレシピを、ほかの人と共有したい場合に、どのようにすれば良いのか気になりました。前回はAWSマネジメントコンソールからの、レシピのエクスポートとインポートの手順をAWSマネジメントコンソール編として紹介しました。
AWS Glue DataBrewにレシピをインポートしてみた(AWSマネジメントコンソール編) | DevelopersIO
今回はAWS CLIで実施してみたいと思います。
記事の目的
DataBrewでは、データの前処理をレシピとして定義・保存することができます。レシピは複数の公開バージョンを持つことができ、DataBrewのサービス内でバージョン管理を行うことが可能です。
一方で、レシピファイルとしてDataBrew外へエクスポートもできるので、レシピファイルをGitHubなどで管理したり、そこからほかのメンバーや開発チームに共有したいことがあると思います。
初めてこのようなことがしたい場合に、レシピファイルのインポートの具体的な操作が分かるとイメージしやすいので、その方法を共有します。
先に結論
以下のような方法で、AWS CLIからレシピファイルをインポートすることができました。
update-recipe
を、レシピファイルをインポートしたいレシピ名とJSON形式のレシピファイルを指定して実行する。publish-recipe
を、レシピファイルをインポートしたいレシピ名を指定して実行する。
やってみる
前提
レシピファイルをインポートしたいレシピを作成しておきます。
今回は、AWSマネジメントコンソール編で作成したときと同じ方法で、バージョン1.0を公開しておきました。
このレシピは、"有名なチェスゲームの動き"サンプルファイルから作成したデータセットに、以下のように3つの前処理を行います(以降、この画面をレシピ画面
と呼びます)。
このレシピに対して、以下のレシピファイルをインポートしたいとしましょう。例えば、同じチームの人がもっと良いレシピを考えてくれたので、そのレシピをDataBrewの機能でエクスポートして、渡してくれたような場合です。
[ { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "white_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "white_rating" } ] }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "black_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "black_rating" } ] }, { "Action": { "Operation": "GROUP_BY", "Parameters": { "groupByAggFunctionOptions": "[{\"sourceColumnName\":\"winner\",\"targetColumnName\":\"winner_count\",\"targetColumnDataType\":\"int\",\"functionName\":\"COUNT\"}]", "sourceColumns": "[\"winner\",\"victory_status\"]", "useNewDataFrame": "true" } } }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "winner" } }, "ConditionExpressions": [ { "Condition": "IS", "Value": "[\"draw\",\"draw\"]", "TargetColumn": "winner" } ] }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "mate", "sourceColumn": "victory_status", "value": "checkmate" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "resign", "sourceColumn": "victory_status", "value": "other player resigned" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "outoftime", "sourceColumn": "victory_status", "value": "time ran out" } } } ]
このレシピファイルは、AWSマネジメントコンソール編で作成したレシピのバージョン2.0と同じです。このレシピでは、データセットに対して7ステップの前処理を行います。レシピ画面
からJSON形式でエクスポートすると、このような形式でエクスポートできます。
では、レシピのインポートを行なっていきます。
レシピを更新する
まず、update-recipe
で、インポートしたいレシピファイルを元にレシピを更新します。
update-recipe
は、--name
で指定した名前のレシピの最新バージョンを、--steps
で指定した内容で更新します。
コマンドは以下の様にしました。
aws databrew update-recipe --name 更新したいレシピの名前 --steps file://new_recipe.json --description 説明
--steps
は、せっかくローカルにレシピファイルがあるので、ファイルからロードしました。もちろん手で入力しても問題ありません。
実行しても、この時点では、まだ発行されていないので、レシピ画面
からは違いが確認できません。レシピをプロジェクトに接続している場合は、DataBrewインタフェースから未公開の変更として確認できます。
レシピを発行する
続いて、publish-recipe
でレシピを発行します。
コマンドは以下の様にしました。
aws databrew publish-recipe --name 更新したいレシピの名前
実行すると、以下のようにバージョン2.0のレシピが公開されました。
インポートしたかったレシピの内容が反映されていることが分かります。
まとめ
AWS CLIから、既存のレシピにレシピファイルをインポートする方法をご紹介しました。
レシピをJSON形式でエクスポートしておけば、update-recipe
で直接読み込めるので、とても簡単にインポートができました。