• PaaSの観点から見たGCP

    こんにちは。プログラマーの古山です。 弊社はAWS,Azure,GCPと、大手一通りのMSPをやっています。 今回はGCPをとりあげてみます。 GCPは結構歴史が古く、とくにGAEは2008年から提供が開始されています。 ちなみにAWSは2006年から提供開始とのことです。若干負けておりますが、GAEはPaaSであり、PaaSとしてはかなり早いほうです。 ちなみにちなみに一番早いPaaSはForce.comのようです。2007年。おしい。 ちなみにちなみにちなみにGAEとは、Google App Engineの略で、サーバーのレイヤーが完全に隠蔽されたPaaSです。いまさらですがPaaSとはPlatform as a Serviceのことです。サーバーのレイヤーを意識する必要がないのでアプリなエンジニア向けです。なんか略語ばっかりですみません。 では、この辺の範囲の話ならばISAOに聞けば詳しい説明ができます、という概要レベルでさらっとふれていきます。 念のためですが、ここで触れている内容が全てではないです。 興味を持った方はぜひISAOにご連絡ください。 Cloud Endpointsについて https://cloud.google.com/endpoints/ Google CloudDatastoreに簡単にアクセスするためのAPIを提供するサービスです。 SDKが充実しているので超簡単です。バックエンド側は簡素に実装して、フロント側をネイティブアプリやらJSやらで実装しようという戦略で輝くやつです。ただし現時点ではJavaかPythonでしか実装できないのでGolang一筋な方やPHP大好きな方は注意が必要です。 私、以前Javaで利用したことがあったのですが、その際JDOというデータアクセス用のライブラリを使用していました。 これ、やたら重く実際かなり泣かされたのですが、後で知った知識ではバットプラクティスなのでふつー使わない、らしいです。 GoogleがJavaでやる場合のデフォルトにしてるっぽいので、クラスが自動生成されたりと楽だったのに。泣ける。。 Javaでやるならあんまりメンテされてないですが、Slim3、もしくは世界標準なObjectifyあたりをオススメということです。 でも一番いいのはGOで実装すること。その場合、フルスクラッチか3rdパーティ製のライブラリを使う必要があります。 go-endpoints https://github.com/GoogleCloudPlatform/go-endpoints google謹製の言語だけあって、リクエスト受けてからインスタンスが起動するまでのスピンアップタイムがダントツに短い。40msecくらいらしいです。ちなみにJDOだと7000msec。GOすごい。そろそろGOやるべきか。 認証について アプリやウェブサイトってふつーログイン機能がありますよね。そのログイン認証をCloudEndpointsひいてはGAEで作成したアプリ/ウェブサイトでもっとも簡単に実装する方法は、Googleアカウントを使った認証方法。 これなら超簡単。 でも実際問題Googleアカウント持っていない人もいるだろうし、そもそもGoogleアカウントで認証したくないというサービスも多いだろうし。Googleアカウントホイホイ的な戦略でしょうか。闇が深そうな印象を受けました。 GCPのマネジメントUIについて 一昔前に比べるとずいぶん綺麗になったGCPのコンソールですが、機能てんこもりなAWSのコンソールと比べるとまだまだ素朴な感じがします。複雑なのがいいとは限らないので、これはこれで良いと思います。 無料枠が嬉しいGCPですが、その無料枠をフルに活用するためにクォーターを適切に設定する必要があります。 とはいえそれほどむずかしくはなく割と直感的です。 少なくとも日曜プログラミングにはGCP、そしてGAEが一番だと感じました。 目指せEXIT!(?) Cloud Datastoreについて https://cloud.google.com/datastore/ NoSQLなDBです。GAEと組み合わせれば無敵のスケーラビリティを発揮します。どんだけDAUが増えようともアクセスがスパイクしようとも、ほぼほったらかしにしておいておけるらしいです。すごい。 またNoSQLではあるものの、SQLっぽいGQLというクエリを使うことができます。 GQL reference https://cloud.google.com/datastore/docs/apis/gql/gql_reference 非常に制限が強く、また性能を発揮させるためにSQLとはまったく異なる気を使う必要があるものの、GQLのおかげで敷居はだいぶ下がっていると思います。ぜひ使ってみてください。 NoSQLに分類されるデータストアにはRedisやMongoなど色々あるとは思いますが、NoSQLとしてのベストプラクティスがあるというよりは、それぞれのデータストアごとにベストプラクティスがあるので、横展開は難しい模様。 また、薄々は気がついていましたが、学習コスト的な意味でちょっとショック。
    ...