うおのめマリーの満遊記

都会の団地でプー太郎をしているエンジニアの日常。たまに軽く仕事とったりしながらまったりとスローライフを満喫中。料理が得意です。

スプレッドシートを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としておく

後にGoogle App Scriptでにおいてシート名を変数として利用する

拡張機能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上でアクセスキーとシークレットキーを使用する部分があるので共通で編集するファイルなどには今回の実装は含めない方がいいです。

あくまで個人で利用する場合に限定した方が良さそうですね。