【Glue】Glue Studioノートブックを試してみた（起動編）

# 背景・目的
先日(2022/4/21)、Glue Studio ジョブノートブックが[発表](https://aws.amazon.com/jp/about-aws/whats-new/2022/04/aws-glue-notebook-based-job-authoring/)されました。
ジョブノートブックは、インタラクティブにSparkを実行できる機能を有しているとのことで、従来の開発エンドポイントを用いたノートブックと異なり、サーバレスのようです。
まだ、理解が出来ていないため、実際に触って試したいと思います。

# まとめ
- 簡単に、ノートブックの作成ができました。
- ノートブックの起動や停止も速いです。

# 概要
## ノートブックの仕様の概要
- 以下の特徴があるようです。
    - Jupyter ノートブックに基づいて、ノートブックインターフェイスでジョブをインタラクティブにオーサリング可能
        - オーサリングという言葉が、私には馴染みがなかったのですが、[e-Words](https://e-words.jp/w/%E3%82%AA%E3%83%BC%E3%82%B5%E3%83%AA%E3%83%B3%E3%82%B0.html)には、以下のように記載がありました。ここでは「ジョブを作る」ことと、理解しておけばよいかと思いました。
            - > オーサリングとは、文字や画像、音声、動画などの要素を組み合わせて一つのソフトウェアやメディア作品を製作すること。特に、それをプログラムなどのコード記述を伴わずに行うこと。
    -  ノートブックを通じて、完全なジョブを実行せずにジョブスクリプトを編集して出力を表示可能
    -  完全なジョブを実行せずにデータ統合コードを編集して出力を表示
    -  マークダウンを追加してノートブックを .ipynb ファイルとジョブスクリプトとして保存可能
    -  ソフトウェアをローカルにインストールしたり、サーバーを管理したりしなくても、ノートブックをスタート可能
    -  **ボタンをクリックするだけで、ノートブックを Glue ジョブに変換**
        -  個人的には、これが便利と感じました。
- 以下の利点があるようです。
    - プロビジョニングまたは管理するクラスターがない
    - **支払うべきアイドルクラスターがない。**
    - 事前設定は不要
    - Jupyter ノートブックの取り付けは不要
    - AWS Glue ETL と同じランタイム/プラットフォーム
- また、VPCやネットワーク接続、開發エンドポイントなどが不要で、すぐに開発が可能なようです。
- 以下の手順を実行し、ジョブの作成が可能なようです。
    - 必要な IAM 許可を設定する
    - ノートブックセッションを開始してジョブを作成する
    - ノートブックのセルにコードを書き込む
    - コードを実行してテストし、出力を表示する
    - ジョブを保存する

- ノートブックを保存すると、ノートブックが完全な AWS Glue ジョブになり、ジョブ実行のスケジュール設定、ジョブパラメータの設定、およびノートブックのすぐ横にあるジョブ実行履歴の表示など、ジョブのすべての側面を管理できるとのことです。

:::note info
2022/4/21時点で、以下のリージョンで使用が可能とのこと。
    - 米国東部 (バージニア北部)
    - 米国東部 (オハイオ)
    - 米国西部 (オレゴン)
    - アジアパシフィック (東京)
    - 欧州 (アイルランド)
:::


# 実践
[こちら](https://docs.aws.amazon.com/ja_jp/glue/latest/ug/notebook-getting-started.html)を参考に、試します。

## IAMロール作成
### ステップ1 信頼されたエンティティを選択
- IAMロールのページで作成をクリックし、他のAWSのサービスのユースケースで「Glue」を選択後、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6881b5f0-7683-181f-51fa-1af0b8154e5a.png)

### ステップ2 許可を追加
- 以下のAWSマネジメントポリシーを選択して、次へをクリックします。
    - AWSGlueConsoleFullAccess
    - AmazonS3FullAccess
:::note info
S3は、必要に応じて設定してください。
:::

### ステップ3 名前、確認、および作成
以下を確認し、「ロールを作成」をクリックします。

:::note warn
ロール名について
データプレビューとノートブックコマンドが正しく動作するようにするには、文字列 AWSGlueServiceRole で始まる名前のロールを使用することが必要とのことです。
ロールに別の名前を指定する場合は、iam:passrole IAM のロールに対するロールの信頼ポリシーを許可し、設定することが必要らしいです。詳細は、[こちら](https://docs.aws.amazon.com/ja_jp/glue/latest/ug/setting-up.html#create-trust-policy)を参照してください。
:::
- ロール名をAWSGlueServiceRole-Studio
- ステップ1:信頼されたエンティティを選択は、glueのサービスプリンシパルが選択されていること。
- ステップ2:許可を追加するでは、前画面で設定したIAMポリシーが選択されていることを確認。
- タグは、設定無し。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d12489dd-b0f6-34e0-f34b-0b29a569a7dd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9b68ade2-08d2-058a-808f-8e9c99300a93.png)



## ノートブックの起動
- Glue Studioでノートブックを起動します。

### Glue Studioに移動
- マネコンでGlueから、Glue Studioを選択し、View jobsをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/86568df2-88d5-611f-7cff-2efce37f1cb3.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a0cb127d-ba45-59a5-d1ba-7c52858d5147.png)

### Notebook setup
- Create Jobで、以下を選択し、Createをクリックします。
    - Jupyter Notebook
    - Option>Create a new notebook from scratch

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9e9a0412-2044-cfff-e95f-2032941f4144.png)

- Initial Valuesに以下を入力し、「Start notebook job」をクリックします。
    - Job nameに、notebooktest-job
    - IAM Roleに、先程作成したIAMロールの「AWSGlueServiceRole-Studio」

- Starting notebook serverと表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/af330032-1a58-bc21-a4b9-365ea7d5f0da.png)

- 10秒程度で、Notebookが起動されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/dd210c06-a290-9cea-ccc4-2a663d22dc5c.png)

### 実行
- とりあえず、デフォルトで入っているGlueのコードを実行してみます。

```
Welcome to the Glue Interactive Sessions Kernel
For more information on available magic commands, please type %help in any new cell.

Please view our Getting Started page to access the most up-to-date information on the Interactive Sessions kernel: https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions.html
Authenticating with environment variables and user-defined glue_role_arn: arn:aws:iam::XXXXXXXXXXXXX:role/AWSGlueServiceRole-Studio
Attempting to use existing AssumeRole session credentials.
Trying to create a Glue session for the kernel.
Worker Type: G.1X
Number of Workers: 5
Session ID: bfaa147b-814e-4f1a-b759-5deb55fd4d7c
Applying the following default arguments:
--glue_kernel_version 0.30
--enable-glue-datacatalog true
Waiting for session bfaa147b-814e-4f1a-b759-5deb55fd4d7c to get into ready status...
Session bfaa147b-814e-4f1a-b759-5deb55fd4d7c has been created

```

- ワーカタイプがG.1X、ワーカー数が5つ起動されているのが分かります。

## ノートブックの保存と再開
### Markdownでドキュメント作成

- 保存されたことが分かるように、以下を入力し実行します。

```
# Save test
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0deaf96d-3549-93ca-665c-8813a16e68f0.png)

### 保存
- 画面上部のSaveボタンをクリックします。
- Successfully updated jobと表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/450bbb1b-9f16-75c5-8495-54605d988138.png)


### 終了
- 画面上部のTerminate serverをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/51abae26-be5f-9ec2-9535-447968b94a46.png)
- Notebook terminatedと表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/29912708-50dc-1bce-afde-c2cc12848e70.png)

### ジョブの確認
- サイドペインのJobsをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/3d2d0506-3503-ffba-124f-8acae5dd04ec.png)
- ジョブの一覧画面で、先程のJobが登録されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/90576ab1-604e-967d-f1e6-41c1a44f4d0f.png)

### 再起動
- 先程まで、notebookで開いていたジョブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/73721316-0f63-a05a-38b6-8c26aa67285b.png)
- Provisionをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2776baa7-5ec5-ab09-a03c-821e9a721fb5.png)
- 先ほどと同様に、10秒程度待つと起動されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/dab9c265-59ac-9e27-fc78-e53fe4367de1.png)


## ダウンロード〜再開
- ノートブックのダウンロードを試してみます。

### ダウンロード
- Download Notebookをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d6eb0299-a505-9718-b49e-9f8be235a458.png)

- ダウンロードされたので、確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/49c5d0fc-84f8-e4e2-975b-900ea8239bf0.png)

- PCのVSCodeで開けました。(ノートブックが、VSCodeが紐付いてたと思われます。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/22ec5543-d8c0-e8fa-a001-0e8d598a766b.png)

### 終了
- 再び、Terminate serverで終了します。

### アップロード
- 先程、ダウンロードしたノートブックをアップロードします。
- Option＞Upload and edit an existing notebookを選択し、Choose fileを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a7880520-e19b-2f41-b519-39135e78fa4a.png)

- 先程、ダウンロードした「notebooktest-job.ipynb」ファイルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ee4bd8c7-1a2e-a032-9c6f-4b207561bb78.png)

- アップロード後、Createをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ba321d4b-cb6b-9596-4736-e1e2ea58de89.png)

### 起動
- 先程と同様に、Job nameとIAM Roleを指定しCreateを起動します。（同じものを指定しています。）
    - Job nameに、notebooktest-job
    - IAM Roleに、先程作成したIAMロールの「AWSGlueServiceRole-Studio」

- 同じく10秒程度で、起動されました。同じ内容が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5ead0fe0-0275-9103-b9d9-2a4213be3812.png)

### 保存（一回目は、失敗します）
- Saveをクリックしましたが、同名でジョブが登録されているので、エラーとなりました。（ここは、上書きしていいか？など確認した上で登録出来てほしい。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/11f8face-9dcb-7d2e-e8da-d8a8b6087798.png)

- 別ウィンドウで、同名のジョブを削除してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b4718e15-1e82-20a3-6c77-a6df7d82f4a2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e5e56831-b108-90a2-339f-e49b719117c3.png)

- 再びSaveをクリックします。今度は保存されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/200b4156-9854-1611-34d2-46835dd28c29.png)

- ジョブの一覧画面でも保存が確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0b75fa1d-7980-d5a5-8df9-702a3e222c4c.png)

## 削除
- 上記で、別ウィンドウでジョブ一覧から削除しましたが、ノートブック画面から削除してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ce880da6-5683-d2fd-6e0e-f62b3a24c85f.png)
- 削除できました。（消えました。キャプチャなし。）

# 考察
- 今回、Glue Studioジョブノートブックを試してみました。起動、終了が素早く、簡単にできました。
    - 私は、従来の開発エンドポイントを使ってノートブックを起動したりしたことはありませんが、専用インスタンスを起動し続けることでの料金の心配もなさそうです。
- 今回は、開発していませんがインタラクティブに開発、確認ができるので効率は良さそうです。
- 今後、ノートブックを使用してジョブを開発し、効率性などを体験してみます。
# 参考
https://docs.aws.amazon.com/ja_jp/glue/latest/ug/using-notebooks-overview.html

https://aws.amazon.com/jp/about-aws/whats-new/2022/04/aws-glue-notebook-based-job-authoring/