スプレッドシートをGoogle App Scriptを使用してAWS S3に上げてみた
はじめに
エクセルライクに使えて、誰でも手軽に無料で利用できるスプレッドシート。
今回そのスプレッドシートをCSVの形式でAWS S3にGoogleアップスクリプトを利用してアップロードする方法を紹介します。
CSV形式で保存しておけばそこからPythonを利用して機械学習のデータとして利用できたりと汎用性が高そうです。
前提と注意事項
※ AWSのアカウントの開設やアカウント開設初期の基本的なセキュリティ設定は全て終えている前提です。
※ AWSのUIは頻繁に変わるので執筆時点(2023/02/11)から変わっている場合があります。
IAMを作成する
AWS マネージメントコンソールから、IAMと検索し、IAMのページにアクセス。左サイドバーの「ユーザー」から「ユーザーを追加」をクリック
ユーザー名を「S3-access-user」とし、次へをクリック
「ポリシーを直接アタッチする」を選択し許可ポリシーの フォームから「S3」と打ち込み「AmazonS3FullAcess」のポリシーを選択。「次へ」をクリック
ユーザー名と許可の概要からアタッチしたポリシーを確認し、「ユーザーの作成」を押下
IAMユーザーが作成されていることを確認しユーザー名をクリック
設定項目の「アクセスキーを作成」をクリック
コマンドラインインターフェース(CLI)を選択し確認のラジオボタンにチェックを行い「次へ」をクリック
タグを「GAS」と設定し「アクセスキーを作成」をクリック
必要に応じてCSVファイルをダウンロードしておく。 ここで表示されているアクセスキーとシークレットアクセスキーは控えておく
S3バケットの作成
バケットの作成をクリック
バケット名を「gas-file-access」と入力、AWSリージョンが東京リージョンになっていることを確認する。
「パブリックアクセスを全てブロック」にチェックが入っていることを確認 またバージョニング機能は今回はいらないので無効にするになっていることを確認
「バケットを作成」をクリック
これでS3バケットが作成される。
スプレッドシートの作成とGoogle App Scriptのコーディング
スプレッドシートを作成し、シート名をprice-list
としておく
拡張機能
→Apps Script
を選択
以下のスクリプトを貼り付ける
const accessKey = "XXXXXXXX"; // アクセスキー(IAM作成で控えたもの) const secretKey = "XXXXXXXX"; // シークレットキー(IAM作成で控えたもの) const bucketName = "gas-file-access"; // S3バケット名 const spreadSheetId ="XXXXXXXX"; //スプレッドシートのID function myFunction() { // ライブラリスクリプトID // 1Qx-smYQLJ2B6ae7Pncbf_8QdFaNm0f-br4pbDg0DXsJ9mZJPdFcIEkw_ // スプレッドシートを取得 var ss = SpreadsheetApp.openById(spreadSheetId); // シートのオブジェクトを取得 var sheet = ss.getSheetByName('price-list'); // データ取得 var data = sheet.getRange('A:C').getValues(); // idがあるデータだけ抽出 var csv = ''; for ( var i = 0; i < data.length; i++ ) { if ( data[i][0] != '' ) { csv += '"' + data[i][0] + '","' + data[i][1] + '","' + data[i][2] + '"' + "\n"; } } // バイナリに変換 csv = Utilities.newBlob( csv ); var s3 = S3.getInstance( accessKey, secretKey ); s3.putObject( 'gas-file-access', 'test-data/price-list.csv', csv, {logRequests:true} ); }
スプレッドシートのIDは以下URL部分の*の部分になる
https://docs.google.com/spreadsheets/d/********/edit#gid=0
ライブラリを追加する
モーダルが表示されたらスクリプトI Dを入力し、検索ボタンを押下
スクリプトID:1Qx-smYQLJ2B6ae7Pncbf_8QdFaNm0f-br4pbDg0DXsJ9mZJPdFcIEkw_
ライブラリS3が確認できたら追加を押下
実行ボタンをクリック
S3バケットにデータが挿入される。
所感
結構簡単に実装できるもんだなぁと感心しました。 一方でGoogle App Scirpt上でアクセスキーとシークレットキーを使用する部分があるので共通で編集するファイルなどには今回の実装は含めない方がいいです。
あくまで個人で利用する場合に限定した方が良さそうですね。