見出し画像

Google Cloud Platform Developer for Beginners(1)

はじめに

Amazon AWS歴は10年ぐらいになりますが、全ての機能を利用することは無く、利用したことがある機能のみ知っていることになります。
まぁ、当然の話ですね。Google系は?というと、GAEを訳わからず適当に動作させたことがやはり10年前に1度あった限りの初心者です。

各社Cloud系ではそれぞれ用語が異なるため、何ができるのか全く理解出来ないことが多く、一度分かってしまえば割とすんなり・・・な訳でもありませんが、右往左往することが少なくなりました。

今回、AI機能調査で色々実験しようと思ったのですが、逆に弄られたという羽目に会い、備忘録として記録します。

GCP概要

2017年とやや古くちょっと長いのですが、AWSをされている方なら、これを見てなんとなく用語とか機能の違いなどの雰囲気は理解できるのかなと思います。
1.25倍速で見れば少し時短になり、時間効率が上がります。とはいえ、この頃は機械翻訳では無く人間の同時通訳であったため、スムーズには頭に入りにくいので。

GCP概要については、公式サイトを見るべきだろうと思います。
下記リンクが日本語にならなかった場合、ページ最下に言語変更がありますので日本語を選択して頂ければ。

Vision AIを弄る

Google公式サンプルも色々あります。Vision AIに限らず、非常に豊富な機能過ぎて何をどうすれば良いのか?がわからず困りました。

まず、公式ドキュメントを見てみます。

リファレンス欄には以下の記載があります。

  • gcloud visionコマンドライン

  • REST API

  • RPC API

gcloud visionコマンドライン

簡単に言うとGoogle Cloud SDKを使い、コマンドラインGoogle Cloudの各機能をコマンドラインで操作しようってツールですね。
AWSにもcliツールがありますが同じようなものです。Googleはdockeコンテナを公開しているので、これを使って操作することも可能です。

このサンプルを最初にやってみていましたが、このサンプルはGoogle Cloud SDKを使ってコマンドラインにて操作しています。
このサンプルは初見ではわかり難いのですが、Cloud FunctionsというAWS Lambdaのような代物で、Python Sourceを登録することができます。
また、Pub/SubというAWS SQSに似た概念です。
このサンプルは、AWS S3のような動作をするStorageにデータを保存すると、Cloud Functionに登録したアプリが動作し、データ加工して最終的にStorageに保管します。

これは、非常に面白いのですが、どうやってデバッグするの?とか、非同期処理なので結果のハンドリングはポーリングしないと分からない?とか、作るアプリ要件に必ず合致するとは限りません。

私は訳も分からず、dockerを独自構築しCloud SDKを更新し、頑張ってサンプルを動作させたら、自分が作りたい要件とは違う!ってことで断念。

バッチ系で処理させたいってのは要件に合っています。
恐らく、ユーザのアップロードしたデータが要件に合致しているか検証し、合致していないと削除といった仕組みには合致します

REST API(Representational State Transfer API)

Web系で使われる技術をベースにしていますので、ご存知かと思われます。

RPC API(Remote Procedure Call API)

Google Cloud Vision APIのPythonサンプルを利用します。このサンプルは全てRPCで出来るような気がします。
REST APIを使う場合、当然ながらHTTP通信でPUSHやPULLを使うのですが、サンプルにはそんな記述が見えません。
RPC APIの方が簡単そうに見えますね。

GCloud コマンドラインの場合、Pythonは3.9までで3.10だと動作に問題があるケースがあるらしいことがstack overflowのどこかにあった記憶があります。
ですが、REST APIではPythonバージョンに制限はありません。
これ、そのままgithubから持って来て動かすことで動作します。

以下の例に見ながらクライアントの設定を最初に行う必要があります。

virtualenvを使って環境を構築しているのですが、私の場合はminicondaを使っているので、これは飛ばしています。

以上・・・、って話ではあるのですが、UbuntuやMacユーザの場合はこのまま閉じて頂いて結構なのです。が、Windowsユーザの場合は少々厄介です。

といっても、Unix経験が無い方はそうでも無いのかもしれませんが、「$env:….」ってあると先頭の「$」は無視するじゃないですか。
私は、ずっと分かっていませんで、Ubuntuで動かすとあっさり動作。Windowsだとenvコマンドは無いってPowerShellが言うのです。ww

Pycharmでの環境設定

GOOGLE_APPLICATION_CREDENTIALSなのですが、一つのサービスアカウントだけ使う場合なら良いのですが、ステージング環境と本番環境等で切り替える必要があるといった場合、環境変数にダイレクトに設定するのは面倒な気がします。

デバッグを考えると、Visual Studio Codeでも良いのですが、私はPycharmを使っています。いや、両方とも使っています。
個人的には、Android StudioでUI操作に慣れていることもあり、Pycharmが好きです。この、Pycharmで実行環境毎に設定を変えることができます。

Pycharm全体

右の実行コンフィグレーションでEdit Configurations…を選択します。

Run/Debug Configurations

この、Environment→Environment variablesの右端にアイコンがあるのでこれをタップします。
この画像は既に設定済です。

Environment variables

ここで[+]を押下し、GOOGLE_APPLICATION_CREDENTIALSを左側に、右側にjsonファイルのフルパスを設定します。
これで起動毎に設定できますので、ステージング環境が複数あるような大規模環境でも大丈夫。

Parametersに実行パラメタを記入しておけば、繰り返しも大丈夫です。
Visual Studio Codeだと、Node.jsで動作させる際の設定ファイルが・・・とかあるらしく、いまいち理解出来ていません。

余談

プロジェクトの最初から最後まで一人で担当し、そのプロジェクトのライフタイム(使用廃止になる)までのメンテナンスを開発者が行う場合は、商用開発ではほぼ皆無です。
誰かが開発を引き継ぐことや分散開発することが一般的でしょう。如何にどんな環境にでも変更できるように対応する、という配慮が必要ですね。

無料だけど手間暇が掛かるツールより、有料でも簡単なツールなら有料を選択するのは有償開発系の一般解です。
そうでない開発会社があったら・・・(笑)

余談2

トップの写真はAndroid Oreo像ですが、2018年Google I/Oに当選しGoogle本社に行って撮影したものです。

この記事が気に入ったらサポートをしてみませんか?