2019/11/12 Cloud OnBoard Google Cloud Platform Fundamentals: Core Infrastructureに行ってきたメモ

###概要
https://inthecloud.withgoogle.com/onboard-global/core-jp-register.html?utm_source=google&utm_medium=email&utm_campaign=FY19-Q4-JAPAN-onboard-physicalevent-er-gcp_field_tkyjp_OnBoardCoreIn_1112_EM&utm_content=share-event

###私のGCP知識について
ウェブサービスに関わるGCPサービスは、商用利用しており基礎的な部分は理解しているつもりで参加しました。

###モジュール 1: GCPの紹介
####GCPの目指すところ
- アプリ開発に注力できること 
    - まだ仮想マシンを利用するケースが多く管理のコストが高い
    - インフラ部分の管理をGCPが行う、完全なサーバレスを目指している
- エンドユーザが求めるサービスに応じてアプリ開発をする
    - データ分析など

GCPのサービスは最寄りのエッジ接続拠点からアクセスし、その先はgoogleのセキュアなネットワークでGCPを利用できる

マルチリージョン > リージョン > ゾーン
複数ゾーンで構築すれば障害に強い
- 東京リージョン　３ゾーン
- 大阪リージョン　３ゾーン


####Googleが開発したOSS
Kubernetes
Tensor Flow
など
OSSを取り入れてGCPサービスを開発（GKEなど)しているため、ベンダーロックインせずに使える

####GCPのリソース階層
- Identity and Access Management(IAM) 
- Cloud Identity
 
組織ノードはgoogleのsalesに依頼する
- gsuiteを利用する
- cloud identityを利用する
※いずれも自社ドメインが必要

ユーザごとにアクセスポリシーの設定ができる
必要最小限のポリシーを下の階層で設定してあげるのがポイント

####サービスアカウント
サーバなどリソースに割り当てられる権限

###モジュール 2: VM とストレージ
GCPはVPCをグローバルに構築可能(AWSはリージョンごと、VPCピアリングが必要)

####VM
#####スケールアップとスケールアウト
スケールアウトが主流
自動スケーリングで復元性とスケーラビリティに優れたアプリケーションに対応
LoadBalancerで受けたリクエストを複数リージョンにまたがったVPC内のリソースに対して負荷分散できる

####ストレージ
#####Cloud Storage
マルチリージョン
例えばアプリケーションと同じリージョンに配置したいとき、
ユーザが任意にリージョンを選べないのでどのリージョンが使われているかわからないので不便
→dual regionが最近選べるようになった！

#####Cloud Bigtable
→最古のGCPのデータベースサービス
　ペタバイト級のデータの格納でいる
　単位時間あたりの書き込みが多いものにおすすめ

#####Cloud Datastore
水平スケーリングが可能な NoSQL DB
オブジェクト構造をそのままDBに保存

#####Cloud SQL
サポート対象は下記
- MySQL
- PostgreSQL
- Sql Server(β版)
インスタンスを立ててデータを突っ込むだけで、スケーリングはGCP側行う
水平スケーリングは苦手なので、インスタンスを大きくする垂直スケーリングが良いが、リードレプリカを複数立てることで読み出しの速度向上は期待できる

・cloud spanner
水平スケーリングが得意。
RDBMSでペタバイト級のデータを扱える

(すでにCloud SQLは現在利用していて、比較としてのCloud Spannerはいい事ずくめな気がしたけど、料金が高いのかな・・・？)

###モジュール 3: コンテナとアプリケーション開発、デプロイとモニタリング
- 2000年代中盤からGoogleではコンテナを使い始めていて、Gmailなど主要なサービスのほとんどで使われている
- Googleでは２０億個のコンテナを毎週デプロイしている
− Googleの社内で利用されているBorg(社内コンテナオーケストレーションシステム)にインスパイアされて作られたOSS
- azureにもawsでもKubernetesを利用できるので、クラウド環境を選ばない

何もない状態からkubeを利用するには数日かかってしまうだろう
GKEを利用することで管理はGCPにまかせ、Kubernetesの機能のみを利用できる

#####Kubernetesクラスタ作成について
ゾーン　一つのゾーンで
リージョン　1つのゾーンにつくられ、そのレプリカが他のゾーンにつくられる
クラスタを作ったらほとんどコマンドラインを使うことになるだろう
クラスタを操作するためのクレデンシャルをコマンドラインで取得
`kubectl`
kubenetesを操作するためのコマンド

######デプロイ
`kubectl run hogehoge --image=gcr.io/sample/hogeapp --port 8080`

######デプロイされてるか確認
`kubectl get depoloyment`

######外部IP付与
`kubectl expose deployment hogehoge type loadbalancer`　（あってるかわからないけど雰囲気で）

・・・kubernetesのメニューからつくるとき、GCRでイメージ指定できるかな？？？

GCRとか地味に出てきてて、所見で理解できるかは・・・
CIでやるにはどうしたらいいかな？

#####AppEngine
操作は基本的にコマンドラインで行う

######SE
AppEngineはコンテナベースのインスタンスが起動されるが、Dockerコンテナではない
Borgが使われている
起動早い、安い
サンドボックス制約あり

######FE
GCE、dockerで動いている
サポート外の言語もカスタムランタイムとして利用できる
柔軟だけど起動遅め、スケールも遅め
サンドボックス制約なし

フロント、バックともに内製ならCloudEndpoint
外部のユーザがフロントの場合Apigee Edgeがよい

#####その他サービス
######Cloud Source Repositories
BitBucketともミラーリングできる
CLoudBuildと連携するとすべてGCPで完結しそう（料金面はおいといて・・・

######Deployment Manager
インフラの定義をyaml表現
yamlテンプレートによって、環境一式を自動作成できる
→機械的に環境構築をすることで工数削減、人為的ミス防止にもつながる

###モジュール 4: ビッグデータと機械学習
####導入事例
Spotifyがおすすめプレイリストを作成するためにBigQueryを利用
オンプレのHadoopからBigQueryへ移行 
実績値として処理時間が数時間から数分へ

######Machine Learning API
機械学習の知識がなくても学習済みのモデル？を提供しているAPI

私みたいな何も知らないエンジニアがそれっぽいものを作るには手っ取り早くてよさげ

######Cloud Vision API
GCPのブラウザコンソール上で試せる
AIと機械学習プロダクト
画像解析

######Cloud Speech API
音声データから文字起こし

######Cloud Natural Language API
GCPのブラウザコンソール上で試せる

####Quiklabs
https://www.qwiklabs.com/quiklabs
もともとはawsの演習環境を提供していたサービス会社でGoogleが買収
いまはGCPの演習環境を提供
Quiklabs内でGCPの一時アカウントが発行されるのでそれを利用する

###感想
会場での配布資料(PDF)は非常にボリュームがあり、それをベースに講義は進行しました。
正直メモを取る部分がないくらいで、あとから見返しても理解しやすいものだと思います(登壇者の方がポロっと言ったことを書き留めるくらい)。
デモの時間が少しあり、実際の動きを見ることができるので、GCP全く知らない人のとっかかりの選択肢としてはいいのではないかと思いました。会場で配布されたURL（キャンペーコード経由）でQuiklabsを開けば、自宅でもハンズオンができるようなので、復習できる環境は用意されています。
セミナーの最初にアナウンスされていたとおり、これからGCPを導入する人や、本格的な勉強のきっかけにしたい人向けのセミナーなので、ある程度商用利用で運用している人にとっては物足りないかもしれないです。
例えばAppEngineのSE、FEの違い、ストレージでも複数サービスがあって目的別の使い分けなど、自分の中で曖昧だったものが整理された点は、参加してよかったなと思います。
あまり期待していなかった機械学習のセクションでしたが、学習済みモデルが容易されているAPIがあるとのことだったので、機械学習についての知識がなくても、アイデアしだいではこれらを利用し良い感じのサービスができそうな気がしました。