GASを使ってS3バケットからファイルを取り込んでみる
目次
こんにちは、クラウドビルダーズのきむです。
本記事は、クラウドビルダーズ株式会社のアドベントカレンダー2024の17日目の記事となります!
業務の中でバッチ処理などで集計したデータをCSVファイルとしてS3に格納したものを、スプレッドシートに反映取り込みたいといったようなケースありました。
今回はGASを使用してS3バケットからCSVファイルの取得 + スプレッドシートへの反映方法をご紹介します。
GASからAWSリソースへアクセスするには?
AWS SDKはもちろんGASには対応しておらず、かといって自作でAPI通信を行う処理を作成するのはなかなか骨が折れます。
そんな悩みを一発で解決してrくれるのがaws-apps-scriptsです。
リポジトリにあるaws.jsをコピーしてGAS上に貼り付けるだけで簡単にAWSのAPIを呼び出すことが可能です。
作成者様に偉大な感謝を…
ソースコード
今回使用するソースコードは下記に置いています。
デモ用リソースの準備
リポジトリに格納しているdemo.shを使用して必要なリソースを作成します。
このスクリプトを実行して作成されるリソースは下記です。
リソース | リソース名 | 用途 |
---|---|---|
IAMユーザー | test-gas-user | GASで使用するIAMユーザー |
IAMポリシー | GasS3ReadPolicy | デモ用S3バケットへの参照権限 |
アクセスキー & シークレットアクセスキー | – | test-gas-userの認証情報 GASで使用する |
S3バケット | gas-demo-bucket-‘$ACCOUNT_ID | サンプルCSVの格納先 |
# 実行権限を付与
chmod +x demo.sh
# デモ用リソースの作成
./demo.sh create $ACCOUNT_ID
{
"Location": "http://gas-demo-bucket-$ACCOUNT_ID.s3.amazonaws.com/"
}
upload: ./sample-data.csv to s3://gas-demo-bucket-$ACCOUNT_ID/sample-data.csv
{
"User": {
"Path": "/",
"UserName": "test-gas-user",
"UserId": "xxxxxxxxxx",
"Arn": "arn:aws:iam::$ACCOUNT_ID:user/test-gas-user",
"CreateDate": "2024-12-16T11:29:05+00:00"
}
}
{
"Policy": {
"PolicyName": "GasS3ReadPolicy",
"PolicyId": "xxxxxxxxxx",
"Arn": "arn:aws:iam::$ACCOUNT_ID:policy/GasS3ReadPolicy",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 0,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"CreateDate": "2024-12-16T11:29:06+00:00",
"UpdateDate": "2024-12-16T11:29:06+00:00"
}
}
{
"AccessKey": {
"UserName": "test-gas-user",
"AccessKeyId": "xxxxxxxxxx",
"Status": "Active",
"SecretAccessKey": "xxxxxxxxxx",
"CreateDate": "2024-12-16T11:29:08+00:00"
}
}
$ACCOUNT_IDには実行する環境のAWSアカウントIDを指定します。
リポジトリに格納しているsample-data.csvをS3バケットにアップロードするところまでスクリプトで実行されます。
sample-data.csvの中身は下記です。
集計月,商品コード,商品名,カテゴリ,在庫数,販売数,売上金額
2024-12,P001,エコノミーチェア,オフィス家具,125,45,1575000
2024-12,P002,ワイヤレスマウス,PC周辺機器,380,156,780000
2024-12,P003,デスクマット,文具・事務用品,250,89,445000
2024-12,P001,エコノミーチェア,オフィス家具,95,65,2275000
2024-12,P002,ワイヤレスマウス,PC周辺機器,424,198,990000
2024-12,P003,デスクマット,文具・事務用品,186,92,460000
2024-12,P001,エコノミーチェア,オフィス家具,180,78,2730000
2024-12,P002,ワイヤレスマウス,PC周辺機器,326,245,1225000
2024-12,P003,デスクマット,文具・事務用品,294,156,780000
2024-12,P001,エコノミーチェア,オフィス家具,152,95,3325000
2024-12,P002,ワイヤレスマウス,PC周辺機器,281,186,930000
2024-12,P003,デスクマット,文具・事務用品,238,124,620000
生成されたアクセスキーとシークレットアクセスキーは後ほど使用するので控えておきます。
GASの実装
スクリプトの実装
App Scriptを開き、新規プロジェクトを作成します。プロジェクト名は任意のもので構いません。
リポジトリに格納されている.gsファイル分スクリプトを追加します。
最終的には下記の通りとなります。
プロパティの設定
スクリプトの追加が完了したら認証情報などを設定します。
左ペインからプロパティの追加を選択します。
スクリプトプロパティから必要なプロパティを追加します。先ほど控えた認証情報とAWSアカウントIDを設定しましょう。
スプレッドシートの作成
CSVファイルを反映させるスプレッドシートを作成します。
作成されたスプレッドシートのIDをconstants.SPREADSHEET_ID に設定します。
# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx の部分が ID
https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit?gid=0#gid=0
const OPTIONS = {
startRow: 1,
startCol: 1,
skipHeader: false,
excludeColumns: [],
};
const REGION = 'ap-northeast-1';
const SPREADSHEET_ID = ''; // ここに値を設定
以上で準備は完了です。
GASの実行
下記は実行前のデータ未反映のスプレッドシートです。
App Scriptのコンソールからスクリプトを実行します。
正常に完了すると、シートが作成されデータが反映されているこを確認できました。
デモ用リソースの削除
動作確認が完了したらデモ用リソースを削除します。作成時と同じくdemo.shで削除可能です。
demo.shで作成されたリソースをすべて削除します。
# デモ用リソースの削除
./demo.sh delete $ACCOUNT_ID
さいごに
aws-apps-scriptsを利用することで簡単にS3バケットからファイルを取得することができました。
他のAWSリソースへのアクセスも可能なので、色々と応用が効きそうです。ぜひ活用してみてください。