AWS Glueを始めてみる

# 概要
AWS Glueを試してみた際の備忘録です

手順は、以下の通り
1\. AWSアカウントを作成する
2\. IAM ロールを設定する
3\. AWSアクセスキーを作成する
4\. S3バケットを作成する
5\. ETLジョブを作成する

**★2024/02/11 時点の情報です**

# 1. AWSアカウントを作成する
https://aws.amazon.com/jp/register-flow/

# 2. IAM ロールを設定する
## 作成手順
1\. AWS Management Console にサインインして、[IAM コンソール](https://console.aws.amazon.com/iam/)を開く
2\. 左ペインの「ロール」を選択する

![ロール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/abfc8571-863d-2ff9-98ad-deff517ff648.png)

3\. 「ロールを作成」を選択する

![ロール作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/20777cc0-8083-dd9d-693c-55c123c7d32b.png)

4\. 信頼されたエンティティタイプ「AWSのサービス」、ユースケース「Glue」を選択して「次へ」

![信頼されたエンティティ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/f5a1b82d-7b85-3b98-ea4b-07815f7c5c89.png)

5\. 許可ポリシーで「AWSGlueServiceRole」「AmazonS3FullAccess」をチェックして「次へ」

![許可を追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/9581f7a8-5069-77fe-4f12-264c628b9e95.png)

6\. ロール名を入力して「ロールを作成」を押下する

![ロール名.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/b5188f87-a51a-f3ae-8ade-813f25d9cce7.png)

7\. 完成

![ロール完成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/75c976e7-8789-fd12-f0b1-660b4ebada61.png)

# 3. AWSアクセスキーを作成する
## 作成手順
1\. AWS Management Console にサインインして、[IAM コンソール](https://console.aws.amazon.com/iam/)を開く
2\. 左ペインの「ユーザー」を選択する

![左ペイン-ユーザー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/226ea6f1-0453-1340-c986-78bc69787550.png)

3\. 「ユーザーの作成」を押下する

![ユーザーの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/7aca61a5-1cd5-374c-1be0-d9b39683a04f.png)

4\. ユーザー名を入力して「次へ」

![ユーザー名.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/88d2ebc2-a73e-dde5-de00-5594e33ab8f4.png)

5\. 「ポリシーを直接アタッチする」を選択し、許可ポリシーで「AWSGlueServiceRole」「AmazonS3FullAccess」をチェックして「次へ」

![許可を設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/74ff86df-4e48-b4b1-cafd-63e817661975.png)

6\. 「ユーザーの作成」を押下する

![確認して作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/39e241a3-d6bb-ee70-19a4-42fab55c64e9.png)

7\. 作成したユーザを選択して「アクセスキーを作成」を押下する

![アクセスキーを作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/234de56b-c158-efbe-b570-d340c7adad2e.png)

8\. ユースケースを選択し、「上記のレコメンデーションを理解し、アクセスキーを作成します。」をチェックして「次へ」

![ベストプラクティス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/8429e308-da6a-e368-3a6d-cda9cd913f98.png)

9\. 必要ならタグを入力し、「アクセスキーを作成」を押下する

![タグ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/79a8205d-9ed0-dbd4-7b1a-6c3e38b16235.png)

10\. csvファイルをダウンロードして「完了」を押下する

![アクセスキーを取得.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/31b163fe-3877-b168-10a5-abf144f66ba8.png)

# 4. S3 バケットを作成する
## 準備
テストデータを作成する
```text:testdata.csv
id,name,birthday
1,佐藤 太郎,1987/03/14
2,鈴木 次郎,1990/01/05
3,高橋 三郎,1997/10/03
4,田中 四郎,2000/05/08
5,伊藤 五郎,1979/06/30
```
## 作成手順
1\. AWS Management Console にサインインして、[Amazon S3 コンソール](https://console.aws.amazon.com/s3/)を開く
2\. 「バケットを作成」を押下する

![バケットの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/d6ba5576-e178-84a4-f87a-089804474edb.png)

3\. AWS リージョンを選択し、バケット名を入力、その他はデフォルトのままにして「バケットを作成」を押下する

![バケットを作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/f9d95013-f05c-0acd-790d-168cd1980da9.png)

4\. もうひとつバケットを作成しておく

![バケットを作成2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/1e814c6a-3407-c894-b9bc-1f463c193e8c.png)

5\. ひとつめのバケットにテストデータcsvをアップロードしておく

「アップロード」を押下する
![アップロード1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/bd2f3dcb-52b8-b8ff-2ff6-d20c4fb9bf05.png)
:arrow_down:
「ファイルを追加」を押下する
![アップロード2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/d336c0a2-d005-7e78-5333-0ae960723fef.png)
:arrow_down:
ファイル選択ダイアログでファイルを選択する
![アップロード3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/53934792-e6b2-0401-1a4a-a7245e1b3f5b.png)
:arrow_down:
「アップロード」を押下する

# 5. ETLジョブを作成する
## 作成手順
1\. AWS Management Console にサインインして、[AWS Glue コンソール](https://console.aws.amazon.com/glue/)を開く
2\. 左ペインの「ETL jobs」を選択する

![ETLジョブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/72515811-a7be-9ee7-aad6-c3836cca6cff.png)

3\. 「Script editor」を押下する
今回は「Visual ETL」ではなく、「Script editor」で作成します❕

![AWS Glue Studio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/bd8ed6a1-4e6e-1bf7-81a2-a4c1bf2546ca.png)

4\. 「Python shell」「Start fresh」を選択して「Create script」を押下する

![Script.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/d16aa269-5a75-b734-4795-8ca2b51a6d19.png)

5\. S3のcsvを取得して、別のS3にアップロードするPythonコードを実装する

```py:
from io import StringIO
import boto3
import pandas as pd

IAM_ACCESS_KEY = "「3. AWSアクセスキーを作成する」で取得したアクセスキー"
IAM_SECRET_KEY = "「3. AWSアクセスキーを作成する」で取得したシークレットキー"

print("start")

# s3インスタンス
s3 = boto3.client("s3",
    aws_access_key_id     = IAM_ACCESS_KEY,
    aws_secret_access_key = IAM_SECRET_KEY)
    
# csv読み込み
csv = s3.get_object(Bucket="gorogoromogumogu-bucket-1", Key="testdata.csv")
csv_body = csv["Body"].read().decode("utf-8")
df = pd.read_csv(StringIO(csv_body))

print("read_csv OK")

# s3にアップロード
upload_buf = StringIO()
upload_csv = df.to_csv(upload_buf, header=True, index=False)

print("to_csv OK")

s3.put_object(Bucket = "gorogoromogumogu-bucket-2", Body=upload_buf.getvalue(), Key="upload.csv")

print("end")

```
バケット名が「S3 バケットを作成する」から変わってますが、
gorogoromogumogu-bucket-1 → gorogoromogumogu-bucket-a
gorogoromogumogu-bucket-2 → gorogoromogumogu-bucket-b
と読み替えてください。

6\. job名を入力し、IAM Rollを選択して「Save」を押下する

![job名.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/796bd927-ea9b-efab-ba02-a649258a561c.png)

![IAM Roll.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/7bf610bb-6433-eaa7-adb4-062861e891a3.png)

7\. 「Run」を押下し、「Runs」タブを開と、ジョブの結果が表示される

![Run.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/fb18e6be-ec02-f2a8-1b2c-317b107dfadb.png)

補足. printで出力したログの確認手順

「Runs」タブの下にある「Run details」タブを開き、「Output logs」を選択する

![Run detail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/06b70791-137e-59d1-5c8d-75214c063858.png)
:arrow_down:
ログストリームのリンク(下図の赤線箇所)を押下する

![ログストリーム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/c0f401da-db17-f609-91e7-b241c06bdfca.png)
:arrow_down:

![ログイベント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/fa746f8b-420a-ca33-f9fa-0afeb40e8a20.png)

8\. アップロード先のS3バケットを確認する

![アップロード先.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/24e3c6a5-377b-b85b-a1e6-0283d38fd0d8.png)


# 参考URL
[アクセスキーの管理 (コンソール)](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey)
[AWS Glue の IAM アクセス許可の設定](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/configure-iam-for-glue.html)
[ステップ 1: 最初の S3 バケットを作成する](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/creating-bucket.html)
[AWS Glue Studio でビジュアル ETL ジョブを作成する](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/author-job-glue.html)