【AWS】GlueからS3へファイルをアップロードするTips

# はじめに
こんにちは。株式会社ジールの[@yakisobapan](https://qiita.com/yakisobapan)です。
S3コンソールからファイルアップロードができない、かつAWS CLIも使えないという事態に陥った際に見つけた裏技的なTipsを共有します。

# 目次
 - 状況
 - アーキテクチャ
 - 手順
 - 所感

# 状況
①セキュリティ観点からAWS CLIの使用がNG
②S3コンソールからのファイルアップロード操作が利用ブラウザでブロック
③他ブラウザの使用はNG

開発にあたりS3にファイルをアップロードしたい・・
アップロードしたいファイル形式：csv,tsv,sql,json,py,txt

# アーキテクチャ
簡易な図ではありますが、GlueのJob機能からS3にファイルを送信するイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/38498f5d-e0e3-d3f0-1a73-35cfe0843d20.png)

# 手順

①Glueコンソールへアクセスし、タブより[Jobs]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/0c9c7310-daad-2e14-d37f-7f3fbb85af7c.png)

②[Python Shell script editor]を選択して[Create]を選択
使用するジョブタイプに依存しないので[Spark script editor]を選択しても問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/bbc6d2d0-cb70-b5db-26e8-850e5721c1c9.png)

③新規ジョブの編集画面に遷移
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/fe2bc3f6-fbb1-e6d2-c07c-1a0621ccd949.png)

④[Script]よりアップロードしたいデータを張り付け
今回はcsv形式のテストデータを張り付けています。
※同時にジョブ名も変更しています

アップロードできるデータ量ですが、検証した範囲では
20MBのtsv形式データは問題なくアップロードできました。
200MBですとフリーズしてしまいましたが、ここは環境に依存するかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/9cd1a7e8-5989-4734-666b-aea0428551e3.png)

⑤[Job details]へ移動しIAMロールを指定
GlueからS3にアクセス許可されているロールならば何でも大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/0b09edcf-8a00-6c47-df05-58666df34cea.png)

⑥下へスクロールし[Advanced properties]を展開
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/6fca4f62-693f-f2af-ab5b-a0a6f519be01.png)


⑦[Script filename]、[Script path]を編集
・Script filename：アップロードするファイル名称（拡張子含む）
・Script path：格納先S3 URI
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/9d8c0eb8-3833-95da-2552-5d114ad9960c.png)


⑧保存前に⑦で指定したURIにファイルがないことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/01a9495c-9ce2-a2c8-6d41-a98f196977bd.png)


⑨[Save]よりジョブを保存
保存が完了した段階で[Script]で入力したデータ内容のファイルが作成されます。

ジョブの編集で入力する項目は以下のみです。
・IAMロール
・Script filename
・Script path

※[Run]を押して本ジョブを実行すると当然ですがエラーになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/888fa190-5e7f-0fcf-25ce-1bbe61183034.png)

⑩S3を確認
csvファイルが作成されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/364b9112-dd62-c980-f8b8-b311c5c568ec.png)


⑪中身を確認（S3 Select）
データも問題なさそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/56066bf2-3e30-61ed-ece1-68e75d907358.png)

# 所感
本来の用途はPythonプログラムをS3上に作成するものですが
[Script filename]で.pyではなく他の拡張子を指定することで
フォーマットの指定が可能です。

併せて拡張子に準じたデータを[Script]に入力することで
疑似的なファイルアップロードが可能です。（実際は新規でファイルを作成している）

数十MBならば、問題なくアップロードできますし
検証した限りcsv,tsv,sql,json,py,txt形式でのアップロードは可能でしたので
使いどころによってはCLIを使うより簡単かもしれません。
***
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area