AWS Glue でCodeWhispererがサポートされたので試してみた

# 背景・目的
[AWS Glue StudioでAmazon CodeWhispererをサポートされた](https://aws.amazon.com/jp/about-aws/whats-new/2023/07/aws-glue-studio-amazon-codewhisperer/)ので、試してみました。

:::note info
2023/7/30現在で、バージニアリージョンのみ提供となります。
:::

# まとめ
- Glue Studioのノートブックで利用が可能
- 2023/7/30現在、バージニアリージョンのみ提供
 
# 実践
## 前提
### IAMロールの作成
1. IAM画面で、「ロールを作成」をクリックします。
1. IAMポリシーの追加画面で、①「AWSGlueServiceNotebookRole」を選択し、②「次へ」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ec8418de-1648-b678-9238-85a502307eb5.png)

1. ロール名を入力し、「ロールを作成」をクリックします。
下記の通り、**AWSGlueServiceNotebookRole**から始まるIAMロールを作成します。

    > [ロール名] に、ロールの名前を入力します。コンソールユーザーからノートブックサーバーにロールを渡すには、名前に文字列 AWSGlueServiceNotebookRole のプレフィックスが付けられたロールを作成します。AWS Glue が提供するポリシーでは、IAM サービスロールが AWSGlueServiceNotebookRole で始まることを想定しています。それ以外の場合は、ユーザーにポリシーを追加して、IAM ロールに対する iam:PassRole の許可を命名規則に一致させる必要があります。たとえば、AWSGlueServiceNotebookRoleDefaultと入力します。次に、[Create role] (ロールの作成) を選択します。

    ※出典：[AWS Glue の IAM アクセス許可の設定>ステップ 5: ノートブックサービス用に IAM ロールを作成する](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/create-an-iam-role-notebook.html)



1. 作成したロールで、「インラインポリシーを作成」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/03cde2de-fd98-58ee-2c08-1dce83b02893.png)

1. JSONのポリシーエディタで下記を貼り付けて「次へ」をクリックします。
    ```
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "CodeWhispererPermissions",
                "Effect": "Allow",
                "Action": [
                    "codewhisperer:GenerateRecommendations"
                ],
                "Resource": "*"
            }
        ]
    }
    ```

1. ポリシー名を入力し、「作成」をクリックします。
1. Notebookを動かすためには下記のIAMポリシーも作成し、アタッチが必要になります。
    ```
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Effect": "Allow",
    			"Action": [
    				"glue:StartNotebook",
    				"glue:TerminateNotebook",
    				"glue:GlueNotebookRefreshCredentials",
    				"glue:DeregisterDataPreview",
    				"glue:GetNotebookInstanceStatus",
    				"glue:GlueNotebookAuthorize",
    				"glue:CreateSession"
    			],
    			"Resource": "*"
    		}
    	]
    }

1. PassRole権限も作成し、アタッチします。
    ```
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "iam:PassRole",
                "Resource": "arn:aws:iam::<AccountId>:role/<role_name>"
            }
        ]
    }
    ```

    ```
1. 最終的には、下記のようになります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9642bdca-6e8d-dd0e-c76c-5c48b91dc99c.png)


### Glue Studioのセットアップ
Glue Studioで、Notebookを起動します。

1. ①「Jupyter Notebook」を選択、②「Create」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/33501579-6a78-fcfb-1175-2cce2c70fd4b.png)

1. 下記を入力し、「Start notebook」をクリックします。
    - Job name:任意
    - IAM Role:上記で作成したIAMロールを指定
    - Karnel:Spark

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fa8660b9-00b1-d567-ac05-dc84d7a15b4d.png)

1. 画面の下に、CodeWhispererのメニューが表示されます。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/69943709-0df8-62be-49db-3d0ad01af242.png" width=300>

## CodeWhispererを試す-1

1. セルを追加します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/566a8d17-8fa1-fbd7-6fa3-201d95dc8894.png)

1. 「#」とスペースを入力すると、コメントが表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b765bb21-5370-93b4-ec48-4983b8fea9de.png)

1. 「Tab」を入力すると、色が変わります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6703b33e-9352-44d3-c249-7655e0124e1f.png)

1.「Enter」を入力後、「↓」を選択すると、コードの候補が表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a07c70df-6fa1-955b-0767-2a5cf6cff845.png)

1. 「Tab」を入力すると、色が変わります。コードが生成されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/bd3f5d05-86e2-6d9f-4228-b864d6141c48.png)

## CodeWhispererを試す-2
1. セルを追加します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/566a8d17-8fa1-fbd7-6fa3-201d95dc8894.png)

1. 下記を入力後、「Enter」を入力します。
    ```
    # Generate sample Spark DataFrame of country name and country code
    ```

1. 候補が表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c2af86de-5a45-199a-d3b5-b5ebe21efbee.png)

1. 「Tab」を入力し、色が変わります。コードが生成されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/31ff8438-4382-50ed-d23a-e81f3cb913e4.png)

# 考察
やりたいことを入力し、コードが生成されるのは、文法を忘れてしまったときなど便利であると思いました。自分の手に馴染んでいないので素早く入力することはまだまだ出来ませんが、慣れると便利になる気がします。
あとは、現在はNotebookのみですが、GlueのEditorにも対応してくれると良いと思いました。

# 参考
https://aws.amazon.com/jp/about-aws/whats-new/2023/07/aws-glue-studio-amazon-codewhisperer/

https://aws.amazon.com/jp/blogs/big-data/build-data-integration-jobs-with-ai-companion-on-aws-glue-studio-notebook-powered-by-amazon-codewhisperer/

https://docs.aws.amazon.com/glue/latest/ug/notebook-getting-started.html