2019年2月10日日曜日

【GCP】Associate Cloud Engineerの試験受けてみた!

結果は・・・悲惨なものでした。

模擬試験より何倍も難しい・・・。

一応GCEでインスタンスグループやテンプレートとかの機能は一通り試したり、
サンプルとしてGKEもWordPressやGuestbook作ってみるとかロードバランス、オートスケールとかはやってみたし、Bigqueryもダウンロードしてきた国税庁の法人番号表のデータをCloudStorageにおいて読み込ませてクエリ実行試してみたりとか一通りやったものの全然駄目。

コマンド隅々まで丸暗記しないと駄目かも。
試行錯誤でヘルプ見ながらどうにかするっていうレベルじゃなくてGoogle推奨のやり方でスパっと回答できるレベルが必要そう。

2019年2月4日月曜日

GKEのおさらいと料金アラート通知設定

■GKEのおさらい

模擬試験でてんで駄目だった部分や、ドキュメント読んでるだけではなかなか実感がわかなかった部分のおさらいを兼ねて

KubernetesEngineのクイックスタートをやってみる。

ガワをつくるだけなら本でやったのでせっかくだからSDKをローカルのPCにインストールしてそこでコマンドプロンプトから実行してみる事にした。
書いてある通りにやるだけなので勉強にはならないかと思ったけど、意外とやると勉強になるかもしれない。模擬試験で適当にやってしまった部分が理解出来たので良かった。

コマンド/説明

gcloud config set project [PROJECT_ID]gcloud config set project >_<デフォルトプロジェクトの指定
gcloud config set compute/zone [COMPUTE_ZONE]gcloud config set compute/zone asia-east1-aゾーンの設定。
gcloud container clusters create [CLUSTER_NAME]gcloud container clusters create gkecluster
ゾーンの設定が間違っているとエラーになる。
kubernetesが作成できるリージョンとゾーンの名称が違った。GUIで作成していれば間違った組み合わせにはならない。
作成が完了すると↓のメッセージが出力
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS
gkecluster asia-east1-a 1.11.6-gke.2 35.185.141.127 n1-standard-1 1.11.6-gke.2 3 RUNNING
gcloud container clusters get-credentials [CLUSTER_NAME]gcloud container clusters get-credentials gkecluster認証情報を取得
gcloud components install kubectlkubectlコマンドが効くようになる
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080サンプルアプリを起動する
kubectl expose deployment hello-server --type "LoadBalancer"サンプルアプリを公開する
kubectl get service hello-server外部IPなどの情報を取得する(EXTERNAL-IPの部分)

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-server LoadBalancer >_< >_< 8080:31619/TCP 1m
http://[EXTERNAL_IP]:8080ブラウザで実際に見てみる
Hello worldという文字列が表示されていればOK
kubectl delete service hello-server
gcloud container clusters delete [CLUSTER_NAME]
gcloud container clusters delete gkecluster
課金されちゃうので、止めて消す。


実際にクバちゃんのクラスタ作成する前に打ったgcloud configのコマンドでデフォルト設定を指定している。模擬試験でも出てたね!
本見ながらGUIで操作して作る時には躓かなかった所で躓いたりしてるのが面白い。
ゾーン設定が間違っていたのでcreateコマンドがエラーになった。
ゾーンでは無くリージョンの名称を調べて入れていたのだけど、そのconfig setコマンドはエラーにならなかったのにcreateの段になってからエラーになった。

デフォルト設定を指定する時は”gcloud”クバちゃんを操作する時は"kubectl"で!
模擬試験のフィードバックにもそんな説明があったね。

■料金通知設定

とまあ、これだけだと何なので予算のアラート設定を仕込んでみる。
特にドキュメントも読まずに適当にGCPのコンソールから[お支払い]-[予算とアラート]画面を開いて予算の作成を選ぶ。
そこで通知先のアカウントを選べるのでIAM設定で新しいユーザーで適当なフリーアドレスでユーザーを作成してみようと思ったのだけれど、gmailじゃないと駄目なのね。
仕方ないので今の自分のアカウントにさらにKubernetesEngine管理者とプロジェクトの支払い管理者という役割を追加。

で、また予算画面に戻り請求先アカウントを指定。
で、下の方に通知の管理なるものがあったのでそれにチェックを入れてみるけれどPub/Subに接続してトピックを作成しないと使えませんと警告が出た。

★pub/subとは
ストリーム分析パイプラインの基盤となるスケーラブルで耐久性のあるイベント取り込み・配信システム 別々に開発されたアプリケーションの間で安全かつ高可用な通信を実現します

よくわからん。
模擬試験では何かのサービスとサービスの間にこんなGCPのサービスがあった気がする。
GCPのサービスを覚えないといけないのでドキュメントを読んでいるのだけれど、アプリケーションがあって、後ろにデータベースやデータ分析用のサービスがあって場合によってはGCEのインスタンスなんかがある図がちょろちょろ出てくる。その合間にデータ分析サービスとしてpub/subがいる。
料金のアラート通知も確かにデータ分析の分類か。なるほど。
”お支払い"の機能もGCPのサービスなのでkubernetes-pub/sub-お支払いという接続なのかしらん?


少なくとも上の一連のコマンドの実行時にデフォルト設定でクラスタを作成しているので
asia-east1-aに三つのインスタンスが作成されてインスタンスグループになり、ロードバランサの設定もされて100GBのディスク三つを使用している。
正確には何と何を結んでいるんだろう。

とりあえずメッセージ通りにトピックを作成するだけでいいようだ。
プロジェクト名/topic/は固定されてて名前つけるだけ。
で、また予算画面でチェックいれて終了。
最初から100%オーバーしている状態で設定した場合でも超過メッセージが来るのかテスト。


おお、凄い。ちゃんと来た。
一年間、もしくは300ドル分は使えるのでまだまだ大丈夫だけど今日はもうクラスタ停止させて寝よう。
この前三日間消さずに放置してた分の請求内訳みたら250円くらいかかってた。
CPU使用率0%でもちゃんと費用は掛かる!

このGCPとか他のクラウドサービスのDBとか機械学習の従量課金制の仕組みって、バグとか凄いアタックで処理量が増えた場合でも普通に請求されちゃうんだよね?

大企業の場合、料金計算ってどうしてるんだろう。
予算編成とか大変だろうに。想定外になったからってサービス停止なんか出来ないよね。

2019年2月3日日曜日

【GCP】Associate Cloud Engineerの模擬試験受けてみた!

Cloud Architectの復習もしないまま、Associate Cloud Engineerの模擬試験もやってみました。

正解率は65%なのでちょっとはマシ。
やっぱりサービスの細かい部分が出題されるとまったく駄目。
ドキュメント読んで暗記するしかない。実務経験がないのでどれくらい重要なのかよくわからなくてどこまで覚えるべきなのかが判断できないのが問題。

出題の傾向としてGoogleが推奨する方法での正解を問われている事が多かったので、
こればっかりはGoogleOnAirやらブログやらで発信されている内容でも見てみますかね・・・。


No正否設問概要
GCPのIAM理解
課金と通知の理解
GCPのシェル理解
GCPのシェル理解
コストの見積もり
×データの用途に対する最適なプロダクトの選択
ストレージとリージョンの選択
スケーリングについて
×ロギングについて
10×GKEとスケーリングについて
11×異なるゾーンへのレプリケート手法
12×データベースサービスの理解
13×GCPのシェル理解
14より影響の少ないでデプロイ手法について
15GCPのネットワーク管理
16コストの見積もりについて
17GCPのIAM理解
18GCPのIAM理解
19×GCPのIAM理解
20GCPのIAM理解

【GCP】PROFESSIONAL CLOUD ARCHITECTの模擬試験受けてみた!

結果は50%でした。
GCPの各サービスを暗記するべきなのかどうかよくわからなかったので、ひとまず素通りしてしまいましたが、やはり覚えないと駄目みたいです。
実際の問題はもっと幅広くから出てくるらしいので、もっとドキュメント読む必要あり。
問題は一般用語を知らなくて設問自体が理解出来なかったのがあること。

green-blue デプロイモデル・・・?なにそれ、知らない・・・。とか

一週間勉強してみて手ごたえ無さそうだったらAssociate Cloud Engineer の模擬試験もやってみようと思います。

模擬試験結果の整理>

No正否設問概要備考
データ保存コスト
GCPのプロダクト名称と役割
独立したプロジェクト間の通信当てずっぽうだったので要注意
データ保存コスト
インスタンスグループのテンプレート
×どのプロダクトで設計すべきかGCPサービス、役割を覚えよう
×トラフィック分割機能GAEの機能を覚えよう
運用監視
×どのプロダクトで設計すべきかGCPサービス、役割を覚えよう
10×どのプロダクトで設計すべきかGCPサービス、役割を覚えよう
11×どのプロダクトで設計すべきかGCPサービス、役割を覚えよう
12×一般用語とクラウド環境の設計理解
13GCPのIAM、実行環境理解
14×GCPのデータベース系プロダクトについてGCPサービス、役割を覚えよう
15異なるプロジェクトへの仮想マシンの複製
16GCPへの移行について当てずっぽうだったので要注意
17×GCPのIAM、実行環境理解
18×GCPでのバックアップ計画
19×一般用語とクラウド環境の設計理解デプロイモデルとか
20GCPへの移行について

リージョンについては続々増やしている最中のようです。


リージョンに応じて提供されるプロダクトも違うようなので、高速なサービス提供の為には同じリージョンにしておいた方がいいのかな。


意外とGoogleはヘルプからドキュメント検索するのにも数秒待たされたりする…
頻繁な更新が必要無いから保存先の環境が悪いのかしら?
本の方が読み終わったので当面はヘルプから各サービス検索してドキュメント読んでみよう。

2019年2月2日土曜日

プログラマのためのGoogle Cloud Platform入門5章

さてとうとう、最後の5章です。

今までGCE(仮想マシン)GKE(コンテナ環境)をやってきました。
今度はGAE(GoogleAppEngine)でアプリケーション単体のサービス解説のようです。

◆5.1 サービス概要

例としてローカル環境にダウンロードしたhtmlファイルでGAEのサービスを呼び出してみる部分が5.1で紹介されています。

特に説明も無く始まってますが、前の章でプロジェクトを削除しているのでまたプロジェクトを作成してからCloudVisionAPI(画像解析サービス)を有効かしてAPIキーを入手してダウンロードしたファイルの中のひとつのjsファイルにキー情報を上書きしてhtmlファイルを開くとGCPに連携してくれるみたい。

で、htmlファイルを開いてフォームから適当にローカルの画像を読み込ませてみると画像解析をしてくれる。
写真の中の看板から文字を抽出して出力してくれたり、アダルト画像だと不適切判断してくれたりとかそんなサービス。
最近よくスマホアプリとかで旅行中に写真にメニューを取ればそれがどんな料理なのだとか、地名だとかを答えてくれるものがあるって聞きますけど、そういうのに使われるのかな。

外国語のメニューとかでも読めなくても文字に起こして翻訳までしてくれちゃったら大分助かりますね。凄いや。

◆5.2 GAE入門

GAEでは独自のコンテナ(GAEではインスタンスという)で運用されて負荷に応じてオートスケールしてくれるらしい。じゃあGKEってなんだろう・・・。
GKEではまだコンテナ作成時にOSを選択してたけど、今度はそれもない。
GKEで選択に出てきたOSのCOS(ContainerOptimizedSystem)と同じなのかな?

とりあえずOSはもうあんまり意識しないでもいいようだ。
アプリケーションにはデータを保存する先が必要ということでCloudStorageやDatastoreの理解も必要になってくるらしい。

しばらくDBの説明が続くけれども細かい事は必要になってからでいいかな・・・?

◆5.3 写真アルバムサービス

例によってうまくいかない。
試しにプロジェクトを新しく作ってもう一度いちからやり直そうとしたところ、CloudShellを立ち上げ直しても前のプロジェクトと同じファイルがあった。
ここのコンソールはプロジェクトに関係なくアカウント共有なのかしら。

ERROR: (gcloud.datastore) Invalid choice: 'create-indexes'.Maybe you meant: gcloud datastore indexes create gcloud datastore indexes cleanup gcloud datastore indexes describe gcloud datastore indexes list


こんなエラーで上手くいかない。
試しにコマンドを変えてみる
本のはこんなの。
" gcloud datastore create-indexes index.yaml"
↓変えてみた
gcloud datastore indexes create index.yamlConfigurations to update:descriptor: [index.yaml]type: [datastore indexes]target project: [gcp-ml-230504]Do you want to continue (Y/n)? y

特にエラーは起きなかった。

Datastoreになんか出来てた。
万歳。
その後もうまくデプロイ出来てたようで結構時間がかかったのちにWEB公開が可能になった模様。
で、実際に画像をアップロードしてみると無反応。
またGCPのコンソールをかちかちいじってエラーを探していると、こんなのが出ていた。

最初のプロジェクトで有効にしていたAPIが無効になっていて有効にしないと駄目らしい。
プロジェクトを切り替えた時にこれが有効になっているか確認済みだったのだけどおかしいな。


Blogにちゃんと記録を残そうと思って画像も取ってたし。
切り替えたあと間違いなく有効になっていたのだけれど、もう一度見ると有効になっていない。
どうもプロジェクトを左上の▼で切り替えた後って挙動が疑わしい。
しばらく前のプロジェクトのとかの状態が表示されている気がする。

削除したり新しく作ったり切り替えたりしてたからおかしくなっちゃったのかな。
まあいいや。とりあえずちゃんとデプロイ出来ました。


よく道路際で交通量調査とかしてるけど、カメラで画像取ってストレージに保存して判別させれば人力でかちかちやって調査なんて要らないと思うのよね。
時々田舎の道路の深夜にまで椅子に座ってやってる時があって吃驚する。
人件費どれくらい使ってるんだろう・・・。

次の5.4は参考って書いてあるのでとりあえずなぞるだけにして5章はここまで。

▼なぞった結果

機械学習で画像の認識の正答率が上がって行っているらしい
10分経っても5000回くらいしか終わってないので結構時間がかかるようだ。

プログラマのためのGoogle Cloud Platform入門4章

さて、2章も3章もうまくいっていないまま第4章に突入。

やっぱり本の内容が古くなっているのでメニューから選ぼうにもコンテナクラスタが無い。


とりあえずContainerEngineでなくKubernetesEngineだろうと思うのでそこのクラスタを選択。
その後も2019年2月現在とは大分違うUI。
やっぱりもう紙の本の時代じゃないんだなあ・・・。

それはさておき先に進んで、Cloud Shellからリージョンを指定してDataStoreを指定する部分。
CloudShellから実行せよという。

前にスマホから打ち込む時に躓いてたりしてたGCPホーム画面の右上にある>_ですな。

GCEでVMインスタンスを作った時にここのインスタンスでSSH接続して出てくるコンソールではなく、プロジェクトのシェルでいいようだ。

ということはたくさんコンテナ作ってそれが関連の無いときはプロジェクト分けた方がいいのかな。

@cloudshell:~ (gke-gobang-app-example-230411)$ kubectl get nodesNAME STATUS ROLES AGE VERSIONgke-gobang-cluster-gobang-cluster-8cc326eb-hm3r Ready <none> 16m v1.11.6-gke.2gke-gobang-cluster-gobang-cluster-8cc326eb-s544 Ready <none> 16m v1.11.6-gke.2gke-gobang-cluster-gobang-cluster-8cc326eb-w3vt Ready <none> 16m v1.11.6-gke.2

続いてDockerイメージなるものを作成していきます。
Dockerって何ぞ?状態です。
入門書だけあってそこから解説してくれているので助かります(ググれ)

OSなんかのインフラ設定とミドル周りの記述をひとまとめにして管理するミドルのようです。
そもそもこの章はGKEの利用例についての説明でGKEとはなんぞ・・・?GoogleContainerEngine(GKE)だそうです。(略称と違うやん)

Dockerというのはそのコンテナ管理ツールの事で、GKEの”K"の部分がKebernetes(クーバーネティス)。クーバーネティスというのはGoogle独自のコンテナオーケストなんとかツールだそうです。

一章から三章まで扱っていたのがGCE(GoogleComputeEngine)。
今回はGoogleContainerEngine(GKE)。

なんでこんな名前にしたんだろう、紛らわしい。Engineっている?

まあとにかく今はGoogle独自のコンテナ管理ツールのサービスでDockerを扱うのだ!

◇◆◇

その後もとりあえず順調に進むものの文章が曖昧。
”実行してください”と”このように指定します”では全然違う。
解説?指示?どっち?


@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ FROM debian-bash: FROM: command not found@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ from debianfrom: can't read /var/mail/debian

うーん、駄目みたいですね・・・。
そんなコマンド無いって!

誰かこの本出版前に校正してあげて!
「プログラマのためのGCP入門」ってわりにはネットワークとはなんぞ、フェイルオーバーってとかGCP以前の部分から何ページも説明があったり、GCPの部分で説明不足だったりする・・・。プログラマだったらそんな説明要らんでしょう(私には勉強になる部分多いですが)。

Dockerファイルの記述の説明なんか要らないでしょう。
末尾にDocker1.11.2を元に本書を記載していますとあるけど、どうせすぐに古くなるし試しにバージョン情報出力するとやっぱ古い。
やたら長々とDockerコマンドの解説があるので何かと思ったら本書を執筆した中井悦司氏と阿佐志保氏がDocker本を書いているのでそのせいのようだった。
数ページ進むと参考としてこの人達が書いたDocker本の宣伝がある。

それは別途ググるからGKEでサンプルアプリケーションを起動するまでの概要の説明と実際にやるコマンドに注力して貰えませんかね・・・どこから解説と実行例が切り替わるのか。

2章3章がうまくいかないのはたぶん私が何処か間違えているんだと思うけど、4章は酷い、監修しているとは思えない。


@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ API_URL=http://localhost:8080/api/vi client/client.py Welcome to Gobang (Five in a Row) game.Game ID (0:new game)? 0Traceback (most recent call last): File "client/client.py", line 71, in <module> id = new_game() File "client/client.py", line 27, in new_game return response.json()['id'] File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 897, in json return complexjson.loads(self.text, **kwargs) File "/usr/lib/python2.7/json/__init__.py", line 339, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 363, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decode raise ValueError("No JSON object could be decoded")ValueError: No JSON object could be decoded@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ vi /usr/lib/python2.7/json/decoder.py @cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3be02eb82ab4 frontend:v1.0 "/opt/gobang/bin/fro…" 20 minutes ago Up 20 minutes 0.0.0.0:8080->8080/tcp frontend0bdcc567713c backend:v1.0 "/opt/gobang/bin/bac…" 22 minutes ago Up 22 minutes 8081/tcp backend@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$

結局プロセスとしてはちゃんと起動しているもののJSONのエラーが出た。
Webサイトで構文チェックしてくれるサイトがあるのでコピーしてみると構文エラーがある。ダメじゃん・・・。

こちらでいじっている部分ではないので、諦めて先へ。

@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ gcloud docker -- push gcr.io/$PROJECT_ID/frontend:v1.0WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.As an alternative, use `gcloud auth configure-docker` to configure `docker` touse `gcloud` as a credential helper, then use `docker` as you would for non-GCRregistries, e.g. `docker pull gcr.io/project-id/my-image`. Add`--verbosity=error` to silence this warning: `gcloud docker--verbosity=error -- pull gcr.io/project-id/my-image`.See: https://cloud.google.com/container-registry/docs/support/deprecation-notices#gcloud-dockerThe push refers to repository [gcr.io/gke-gobang-app-example/frontend]cdbf029a16bb: Preparinge3280de533d5: Preparinga2e66f6c6f5f: Preparing-example before performing this operation.

次も駄目でした。gcloudのサブコマンドとして使用する事でレジストリへのアクセスが行われるって本にはあるけど、駄目みたいですね。

あとコンテナのイメージに重大な脆弱性がみつかりましたとかいう通知が来たし辞めた方がいいのかな・・・?
この後はGKEにアップロードできないので何も出来ないのだけれど、複数のコンテナをまとめたPODという単位でサービスを立ち上げる。で、対戦機能があるアプリケーションのAI思考側を司るバックエンドのコンテナをバージョンアップする。GKEにローリングアップデート機能があり、バックエンドのコンテナが新しくなると一個ずつ切り替わっては古い方が削除されていくのでサービスを停止せずにバージョンアップが可能なのだという感じの説明がありました。
プロジェクトを削除して今宵は終了。うーん、これは酷い(私が)
全然うまくいかないやん・・・