AWS Glueの新機能「Usage Profile」について

# はじめに
2024年6月18日のアップデートで追加されたAWS GlueのUsage Profile機能の検証結果を紹介いたします。
以下が公式情報のリンクになります。

https://aws.amazon.com/jp/about-aws/whats-new/2024/06/aws-glue-usage-profiles-now-generally-available/

# AWS Glue、Usage Profileとは
機能紹介にあたり、機能が追加されたサービスであるAWS Glueについて説明します。
AWS Glueとは、分析を行うユーザーが複数のソースからのデータを簡単に検出、準備、移動、統合できるようにするサーバーレスのデータ統合サービスです。AWS Glue を使用することで 70 を超える多様なデータソースを検出して接続し、一元化されたデータカタログでデータを管理が可能です。
Usage Profileについて、管理者が Glue ジョブと Notebook セッションで消費されるリソースに対する予防的制御と制限を設定できる新しいコスト管理機能です。Usage Profile では下表の項目の制限が可能です。
#### 【表1: AWS Glue UsageProfile の設定項目】
|No|設定項目||パラメータの種類|
|---|---|---|---|
|①|Number of workers|ワーカー数|default, minimum, maximum|
|②|Worker type|ワーカータイプ|default type, allowed worker types|
|③|Timeout|タイムアウト|default, minimum, maximum|
|④|Idle timeout|アイドルタイムアウト|default, minimum, maximum|

# Usage Profileを利用するメリット
Usage Profileを利用することでGlue ジョブのリソース管理が容易になり、予期せぬコスト発生を防ぐことが出来ると考えます。また、開発者、テスター、製品チームなど、アカウント内のさまざまなクラスのユーザに対して異なるプロファイルを作成が出来るためヒューマンエラーの防止などが期待できます。

# Usage Profileの利用方法
Usage Profileの作成方法と作成したUsage Profileをユーザに割り当てる方法を説明します。Usage Profileの作成方法として、コンソールから作成する方法とAWS CLIで作成する方法の２つあります。本記事ではコンソールから作成する手順を説明いたします。


## Usage Profile作成手順
1\. AWS Glueの画面に遷移し、左部のナビゲーションメニューから[Cost Management]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/04d27c31-c63c-eaa3-38c4-52de9cd01ed9.png)

2\. [Create usage profile] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/1aa4b5e3-9061-b6c8-b798-ea7f6226a25f.png)

3\. Create usage profile画面に遷移したら、Usage profile名、Usage profileの説明を入力します。説明欄には、作成者ユーザー以外がUsage profileの目的を認識できるような説明を入力します。説明の入力は任意のため、入力しなくても[Usage profile]の作成は可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/c22d024e-897f-c66c-e4f7-bb7441168b4c.png)

4\. Usage profileのパラメータのうち少なくとも１つを定義します。ワーカー数を設定する場合は、同時にワーカータイプも設定してください。ワーカー数のみまたはワーカータイプのみを入力し[Save] を押下すると下記のエラーが発生します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/a827e457-4be0-ead1-278f-825953998871.png)

5\. 設定が完了したら、[Save] を押下します。

## Usage profile割り当て手順
後続の検証作業でGlueジョブを利用するため、先にIAMロールを作成します。作成するロールには、Glueが必要とするリソースへのアクセス権限を設定して下さい。
※ユーザグループ単位ではUsage Profileの適応ができませんのでご注意ください。

1\. IAM (Identity and Access Management) の画面に遷移し、左部のナビゲーションメニューから[ロール]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/e77dbb13-a224-3cb8-83a5-b2e219359b53.png)

2\. [ロールを作成] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/90b24f22-b0a2-1b78-cb26-c7c9d6215be0.png)

3\. 信頼されたエンティティタイプで[AWSのサービス]を選び、サービスまたはユースケースで[Glue]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/15752e80-05cb-377d-40be-106756f79ef7.png)

4\. 許可ポリシーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/f28824e5-65e4-b73d-1bda-3e44f717aea7.png)

5\. ロール名に任意の名前を入力し、[ロールを作成]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/f99c6204-9daa-99a7-3d5e-e69ffd96b840.png)

6\. ロールの作成が完了したら、左部のナビゲーションメニューから[ユーザ]を押下します。

7\. 「Usage profile作成手順」で作成した Usage profile を適用したいユーザを選択します。

8\. 紐づけ対象ユーザの画面に遷移したら、[タグ]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/412c25f7-3222-bbd4-a5c8-dd56da2eaccc.png)

9\. [新しいタグを追加する]を押下し、[キー]と[値]を入力します。入力完了後に[変更を保存]を押下します。
[キー]には **glue:UsageProfile** 、[値]には作成した **Usage profile名** を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740281/466ad370-ae09-f63a-1d16-0ff1e3d64bc7.png)


**※Usage Profileによる制限は、Glueジョブの保存前もしくは実行前にUsage Profileを割り当てる＆設定内容を保存する必要があります。
上記を実行できていないと、Glueジョブに対し制限が効きませんのでご注意ください。**

# 検証結果
AWS Glue Usage Profile の機能検証として、下記の検証結果となりました。
### 検証結果の概要
・検証1: Usage Profile の設定項目(表1を参照)のパラメータについて
　⇒**default** は**Glueジョブ作成時**に自動的に設定される
　⇒**minmum**, **maximum** は**Glueジョブ作成時と実行時**に制限される
 
・検証2: Glueジョブの実行方法による Usage Profile の割り当て
　⇒**スケジュール実行**の場合、**Glueジョブに割り当てた Usage Profile** によって制限される
　⇒**手動実行**の場合、**ユーザーに割り当てた Usage Profile** によって制限される
詳細な結果は下記に記載します。

### 検証1:Usage Profile の設定項目(表1を参照)のパラメータについて
Usage Profile の設定項目(表1を参照)のパラメータ毎の制限について検証を行いました。
ジョブに対する制限とセッションに対する制限に分けて記載します。

### 1. ジョブに対する制限 
上記の表1 の①②③の設定項目では、ジョブレベルで制限を設定できます。
例として、①のワーカー数を制限した場合の挙動を確認します。
#### 1-1.default による制限
手順1:下記を設定したUsage Profileを、ユーザーに割り当てる
　→Number of workers の `default` を "**5**" で設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/65415a7d-3db2-8a1b-ecd0-2f97bf8f1620.png)

手順2:手順1 で設定したユーザーでGlueジョブを新規作成
　⇒ワーカー数が "**5**" で既に設定されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/1b7438eb-26cc-a4f5-df0c-2bf5326fc355.png)


#### 1-2. minimum, maximum による制限
手順1:下記を設定したUsage Profileを、ユーザーに割り当てる
　→Number of workers の `minimum` を "1", `maximum` を "3" で設定
　→今回は、"workernumber_fy"というUsage Profileを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/00e82991-c52a-edb8-3877-4502b8b6696a.png)

手順2:手順1 で設定したユーザーでGlueジョブを新規作成
　→ワーカー数を 5 に変更する
　⇒Usage Profileで設定した範囲外の値なので、エラーとなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/4ecd0b77-7d8a-92b3-b51f-e88ff59c99c8.png)



### 2. セッションに対する制限
上記の表1 の①②③④の設定項目では、セッションレベルで制限を設定できます。
例として、④のアイドルタイムアウトを制限した場合の挙動を確認します。
#### 2-1. default による制限
手順1:下記を設定したUsage Profileを、IAMロールに割り当てる
　→Idle Timeout の `default` を "**10**" で設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/f10aee93-b006-1d04-d975-268b33b3d3aa.png)

手順2:Notebook形式でGlueジョブを新規作成。手順1 で作成したIAMロールを選択する。
　→今回は、"idletimeout_rl_01_fy"というIAMロールに割り当て
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/beabf0cc-f77e-3027-edfe-2ee5506fa993.png)

　⇒ `%idle_timeout` に "**10**" が既に設定されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/7a33d3d2-9a10-706d-17cd-00894af9d782.png)

#### 2-2. minimum, maximum による制限
手順1:下記を設定したUsage ProfileをIAMロールに割り当てる
　→Idle Timeout の `minimum` を "2", `maximum` を "4" で設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/6c42c9dc-f3ae-41b0-27ee-805ae86c8166.png)

手順2:Notebook形式でGlueジョブを新規作成。手順1 で作成したIAMロールを選択する。
　→今回は、"idletimeout_rl_01_fy"というIAMロールに割り当て
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/beabf0cc-f77e-3027-edfe-2ee5506fa993.png)

手順3:`%idle_timeout` の値を変更し、対象セルを実行する。
　→`%idle_timeout` を "1" に設定
　⇒Usage Profileで設定した範囲外の値なので、エラーとなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/529d53d6-5bd4-6371-90bc-f4d0c62e91d5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/aeb07c94-5878-a22d-4ee9-c398e4803ecc.png)



### 検証2: Glueジョブの実行方法による Usage Profile の割り当て
スケジュール実行のトリガーを設定したGlueジョブに対し、スケジュール実行もしくは手動実行した場合のUsage Profile の割り当てについて検証を行いました。
例として、①のワーカー数を制限した場合の挙動を確認します。

#### 共通:スケジュール設定されたGlueジョブを作成
手順1:下記を設定したUsage Profileをユーザーに割り当てる
　→Numver of workers の `Maximum` を "10" で設定
　→今回は、"trigger_gj_fy"というUsage Profileを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/3911f563-737f-0f63-27e3-eb911b58174b.png)

手順2:手順1 で設定したユーザーでGlueジョブを作成する
　→作成したジョブに Usage Profile "trigger_gj_fy" が割り当てられる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/3cfdc827-8dcc-4bd5-a0e1-0ba139266932.png)

#### 3-1: Glueジョブをスケジュール実行した場合

手順3:手順2 で作成したジョブをスケジュール実行する
　⇒**ジョブに割り当てられた Usage Profileで実行される**
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/7f81cfec-60c3-fe06-9f49-6b01dd9632cc.png)

#### 3-2: Glueジョブを手動実行した場合
手順3:下記を設定したUsage Profileをユーザに割り当てる
　→Numver of workers の `Maximum` を "5" で設定
　→今回は、"trigger_gj_02_fy"というUsage Profileを作成
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/46d73533-c79b-97e1-6573-8a2a3fded81a.png)

手順4:手順2 で作成したジョブを手動実行する
　⇒ユーザーに割り当てたUsage Profile の設定値が、ジョブに割り当てたUsage Profile 設定値を満たさないためエラーとなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530305/7afbca22-ac76-3ace-550a-836dcbced053.png)
# おわりに
今回は AWS Glue Usage Profile を使って、Glueジョブやセッションに対する制限について検証を行いました。AWS Glue Usage Profile の作成やIAMロール、ユーザーへの割り当て方法も分かりやすく、取り入れやすい機能だと感じました。
AWS Glueによるコスト削減に関心がある方は是非試してみて下さい。

# 参考文献
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/what-is-glue.html

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/start-usage-profiles-managing.html#:~:text=AWS%20Glue%20%E3%81%AF

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/start-usage-profiles-jobs.html

https://aws.amazon.com/jp/blogs/big-data/introducing-aws-glue-usage-profiles-for-flexible-cost-control/

- - -
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：

https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area