かずきち。の日記

サーバサイドエンジニアのつぶやき

Googleスプレッドシートのセル上限500万セルに達して太刀打ちできないので、GASでGoogle Cloud SQLをセットアップした!

Googleスプレッドシートはクラウド上のエクセル

f:id:kazukichi_0914:20211125112822g:plain
引用:
https://www.google.com/intl/ja_jp/sheets/about/


最近はクラウドサービスが流行っていますので、GoogleドキュメントやGoogleドライブを利用している人もいるかと思います。
しかもGoogleは無料で15GBをくれます。
GmailやGoogleDocsGoogleDriveなどのクラウドサービスを無料で使わせてくれます。
非常に太っ腹です。
そんなGoogleにも使用上限があります。

1日あたりの制限
support.google.com
引用:
https://support.google.com/a/answer/166852

support.google.com
引用:
https://support.google.com/drive/answer/37603

に一覧が載っていまして、私の場合、無料のGoogleでさえ課金が発生するんのでお金を払っています。
これで容量不足やスピード不足を解決できるので満足しています。
学生時代はGoogleにお金を払うのはどんな人なのだろう?とも思っていましたが、少しコアに使うとやはり無料枠では収まりません。

このたびGoogleスプレッドシートではもはや太刀打ちできないので、Google Cloud SQLをセットアップ

コンピュータを1人1台持つ時代になりましたが、そもそも今の時代はクラウドの時代です。
決してコンピュータの計算を自分のパソコンで行う必要はないわけです。

f:id:kazukichi_0914:20211125114905g:plain

世界にはコンピュータは山程あって、日本にもコンピュータはあるし、アメリカにもコンピュータがあります。
なので、日本が昼で、外国が夜の時に、日本から海外のパソコンの計算力を借りてしまおうという考え方です。
金額が低いリージョン(地域)でインスタンスを立てて、そのときだけグリッドコンピュータで計算して実行結果だけ自分のパソコンに持ち帰ってきます。

f:id:kazukichi_0914:20211125112548g:plain

ビッグデータを自分で用意できない人のためにGoogleがサンプルを用意してくれている

あとは自動でGoogleにすべてタスクを投げます。

f:id:kazukichi_0914:20211125115627g:plain

もはやデータはどこにあるのか、よくわかりませんが…
Googleのasia-northest1-a上で計算力を借りて、そのCPU使用率が出ます。
クラウド上なので全然余裕です。

クラウドで計算をすればバックアップもどこの地域で取られているかわかる

f:id:kazukichi_0914:20211125120009g:plain

クラウドコンピューティングはデータの実体がどこにあるのかわかりませんが、一応データがGoogleのどこのデータセンターにあるのかわかります。
今回     「asia-northeast1-a」のリージョンに出たを保管をしていて、なので光の速度の影響を受けてしまいます。
バックアップを「us- the United States」のデータセンターにデータを保護しています。
実際、データが紛失して自分で復旧作業はしたことはありませんが、夜中にデータがぶっ壊れて、朝Googleを見たら治っていたということがよくあります。

今回私がGoogleCloudに移行した理由

別に自分のパソコンで今までは計算ができたんですよ。
しかしデータ量が莫大になってきてパソコンが妙に重い。
パソコン買い替えかな?とも思いましたが、計算するデータだけGoogle Cloudに移行しました。
Google CloudはGoogleの法人向けでSLAがしっかりしているサービスでデータをきちんと保管してくれるので今回はCloudSQLなどなどをセットアップしました。

とりあえず本を買ったので楽しみです。
見た中では結構高評価な本です。

とは言え、届く前に軽くCloudSQLにつなぐSQL文をGASで書いてみましたのでデータベースにつないでみました。

Googleは太っ腹な会社なんで

項目 無料枠
ストレージ 1ヶ月あたり10 GB
クエリ 1ヶ月あたり1 TB

もらえるので、とりあえずクレジットカードは登録したけれど当分は無料枠内に収まりそうです。

簡単に接続のGASからCloudSQLにつなぐスクリプトだけ書く

f:id:kazukichi_0914:20211125145512g:plain

14行でデータベースに接続することができました。
GASは定期実行ができるので定期的にデータベースなどのカンイン情報をクロールするのに役立ちそうな気がします。
サンプルソースをおいておきますね。

var connectionName = 'kazukichi0914:asia-northeast1:kazukichi-0914'; //Instance_connection_name
var userName = 'root'; //user_name
var password = '***********'; //'user_password'
var databaseName = 'test'; //database_name

var url = 'jdbc:google:mysql://' + connectionName + '/' + databaseName;

function readFromTable() {
  var connection = Jdbc.getCloudSqlConnection(url, userName, password);
  Logger.log(connection.getCatalog());
  Logger.log('無事接続できました');

  connection.close();
}
GoogleCloudはリージョンを選べる

f:id:kazukichi_0914:20211125145901g:plain

リージョンっていうのは地域なんですが、クラウドの場合必ずしも日本でデータを持っていないなあいが多いです。
それはアメリカのサーバだったり、ヨーロッパのサーバにデータを格納ができます。
なので、GoogleCloudを使用する場合、どこのリージョンで立てるかは大事です。
別にどこでもいいだろと思いますが、利用者が絡む場合日本で構築したほうが良かったりします。
日本にいてアメリカリージョンでインスタンスを立てると200ミリ秒の遅延が発生します。

f:id:kazukichi_0914:20211125150403g:plain

どこのリージョンで立てるかによって、可用性や利用料金などが異なります。
私の場合、そこまで逼迫した処理ではないので東北アジアでインスタンスを立てました。
と言ってもどこにあるかは知りませんが…
ちなみに少し気になるのがどこの地域でインスタンスを建てるのかによって現在時刻のズレとか生じるのかな?っていう心配はあります。
特に自動起動させた場合、タイムゾーンが気になりますからね。
12時では12:00 JSTなどと言わないと正確ではないだろうというのが本音です。

GCPは前払い制ではないのでベンダーロックインでないところが嬉しい

ベンダーロックインというのは課金形態を前払いにすることで、そのサービスを固定化することです。
Amazonプライム年額4,900円とかはそんなものです。
月額は500円です。
12ヶ月を月額契約すれば、6,000円ですが年払いだと安くなるわけです。
これっていうのは利用者的には安くなる、うれしいって感じですが…
Amazonは前払いさせることでベンダーロックインしようとしているのです。
安いから前払いしておこう→その後1年間はAmazonを解約しても解約できない。

よくネット上で1年契約を解約したいという相談を見かけます。
でも基本的に解除はできないです。
だってそうですよね?

1年契約っていうのは悪魔の契約です。
f:id:kazukichi_0914:20211125171304g:plain

ジムに加入してやっぱやーめたって言ってもばっちり月の会費は取られますから、
以後の自分の行動が制限されたくないという意味でGoogleの契約形態は良心的です。
なのでGCPで運営すれば最初から高いスタート費用は必要なくて、スケールアウトしたい時に払えばいいんです。
不動産の場合、前金・敷金・礼金なんてものが発生して融通が聞きづらいですね。

調整弁の仕組みの契約のことを「ロードバランサ料金」という

買い切りの契約とか1年間の契約ではないので、
BigQueryは5億人のユーザがいるGmailでも使われているサービスなので、100億レコードの処理も数十秒で処理ができます。

f:id:kazukichi_0914:20211125172037g:plain

毎月毎月の稼働をみて、課金形態のバランスを取ります。
Googleのクラウドはその点が優れています。
もっと高機能なものにしたい場合、Googleの場合、数時間以内にスケールアップができます。
居酒屋で8名で予約していたけれど、人数増えたので6人に予約変更したいみたいなことがGoogleだったら簡単にできます。
でもボトルネックはどこにあるのか?
新宿で飲み会をしようとしていたけれど、渋谷だったら人数を減らさなくてよかったかもしれない。
そういった物理的な影響をGCPの場合、ほぼ排除ができます。

とりあえずわからないとこを読んでいこうと思います。