Professional Cloud Developer認定試験の学習メモ書き
Professional Cloud Developerの認定資格に合格するまでに、GCPを把握するめに書いた学習過程のメモ書きのまとめです。
App Engine フレキシブル環境
- 基盤のセキュリティアップデートなどは自動適用される
 - 必要であればインスタンスにSSH接続が可能(デフォルトは無効になっている)
 - トラフィックが乱高下するアプリではスタンダード環境を検討すると良い
- App Engine Standard API が必要
 - GKEやComputeEngine、フレキシブル環境では実行できない
 
 
Cloud Run
- HTTPリクエストに応じて任意のコンテナを実行できる
 
Google Cloud オペレーションスイート
- Cloud Logging
- Loggingエージェントはfluentdに基づいている
 
 - Cloud Monitoring
 - Error Reporting
- アプリケーションで発生したエラーを確認できる
 - Stack Trace でエラー箇所を確認できる
 - Cloud Debugger が表示され問題のあるコードに移動できる
 
 - Cloud Trace
- 分散トレースシステムでアプリケーションからレイテンシデータを収集できる
 - アプリケーションを分析してパフォーマンス低下の原因となるレイテンシの詳細レポートを生成する
 - Java, Node.js, Ruby, Go に対応
 
 - Cloud Debugger
- ローカル変数を含むアプリのステータスのスナップショットを取得
 
 - Cloud Profiler
- CPUやヒープをモニタリング
 - ボトルネックを改善してリソース消費量を削減できる
 - リソースを消費しているパスやコードがどう呼ばれているかがわかる
 - Java, Node.js, Go, Paython に対応
 
 - Google Performance Management(APM)tools
- 三つのサービスで構成される
 - Cloud Trace
 - Cloud Debugger
 - Cloud Profiler
 - 対象とするインフラやクラウドに依存せずAWSやオンプレミスでも利用できる
 - 収集されたデータ量で料金が決まる => 無料枠もあり
 
 
IAMメンバーの種類
- GoogleAccount
 - ServiceAccount
- 個々のエンドユーザーではなく、アプリケーションや VM インスタンスに属している特別な Google アカウントです。サービスの Google API を呼び出すには、サービス アカウントを使用します。
 
 - Google Group
 - G Suite domain
 - Cloud Identity domain
 - リソース
- プロジェクト
 - Pub/Sub トピック
 - GCPインスタンス
 - など
 
 - 権限はリソースに対して実行できるオペレーションを決定する
 - <サービス>.<リソース>.<動詞>という形式で権限を定義
- 例: pubsub.topics.publish
 
 
Cloud Identity-Aware Proxy
VPNにログインしなくてもアプリケーションにアクセスできる必要がある時に利用すると良い。
Cloud Pub/Sub
- ユースケース
- リアルタイムゲームアプリケーション
 - クリックすストリームのデータ注入と処理
 - 医療や製造業でのデバイスデータとセンサーデータの処理
 
 - 大規模データを扱う場合には Cloud Pub/Sub I/O を使って正確に1回だけ処理する事も可能
- カスタムメッセージID or Cloud Pub/Sub が割り当てたIDに基づいて重複メッセージを破棄できる
 
 - メッセージの順序が保証されない
 - メッセージ処理の順序が重要でない場面で効果を発揮する
 
Cloud Endpoints
- GCPにAPIをデプロイしてエンドユーザーにAPIを公開できる
- APIゲートウェイを作成できる
 
 - Cloud Functions はシステム内部のエンドポイントとして利用するべき
 
API Explore
- Google Cloud API を試すことができるサンドボックス環境
- API内のメソッドの検索やテスト実行など
 
 
データストレージオプション
- Cloud Storage
 - Cloud Datastore
 - Cloud Bigtable
 - Cloud SQL
 - Cloud Spanner
 - BigQuery
 
Cloud Storage
- 画像や動画、オブジェクトやblobなど非構造化データに適している
 - HTTPアセクスでオブジェクトを取得可能
 - バケットとオブジェクトで構成される
 - gsutilコマンドで操作ができる
 - ストレージクラスは4種類存在
- Standard
- マルチリージョンでは99.9%以上の可用性(リージョンでは99.9%の可用性)
 - Webサイトやストリーミングモバイルアプリのデータ保持に最適
 
 - Nearline
- マルチリージョンでは99.5%、リージョンでは99.9%の可用性でデータ取得に費用が発生する
 - 最小保続期間は30日
 - 長期コンテンツのバックアップに最適
 
 - Coldline
- マルチリージョンでは99.5%、リージョンでは99.9%でデータ取得に費用が発生する(Nearlineより取得費用が高い)
 - 最小保存期間は90日
 
 - Archive
- マルチリージョンでは99.5%、リージョンでは99.9%でデータ取得に費用が発生する(Coldlineより取得費用が高い)
 - 最小保存期間は365日
 - 障害復旧やデータアーカイブに最適
 
 
 - Standard
 - ACL(アクセス制御リスト)でアクセスを制御できる。
- Cloud Storage でのみ利用される
 - バケットとオブジェクトへのアクセス権を持つユーザーと各ユーザーのアクセスレベルを定義できる
 - IAM権限はバケット内の全てのオブジェクトに適用される
 - バケット内の個別のオブジェクトへのアクセス権限を制御したい場合にACLを利用する
 
 
Cloud Datastore
- フルマネージドなNoSQLドキュメントデータベース
 - Bigtableの多機能版
 - ユーザープロファイルやショッピングカート注文などの高価値なアプリデータに最適
 - 不要にインデックスを作成すると一貫性確保のためにレイテンシが増加しストレージコストも増加する
 - デフォルトで全てのプロパティがインデック化される
 - 複数のプロパティで検索を実行する場合は複合インデックスを作成する必要がある
 
Cloud Bigtable
- 高パフォーマンスのNoSQLデータベース
 - テラバイトからペタバイトのデータを格納できる
 - 単一キーの超大容量データやMapReduce操作の保存に理想的
 
Cloud SQL
- GCPのマネージドなリレーショナルデータベースサービス
 - Cloud SQL Proxy で安全に接続ができIPアドレスのホワイトリスト登録などが不要
- プロキシを使うにはプロキシに有効なユーザーアカウントを指定する必要がある
 
 - MySQLやPostgreSQLを使うアプリに最適
 
Cloud Spanner
- フルマネージドなリレーショナルデーターベースサービス
 - 強力な整合性と水平方向の拡張性を実現する
 - ミッションクリティカルなOLTPアプリ用に設計されている
 - 高可用性、強整合性、トランザクション型の読み取りと書き込みを必要とする構造化、半構造化リレーショナルデータを扱うアプリケーションに最適
 
BigQuery
分析用の低コストでフルマネージドなデータウェアハウス
型指数バックオフ
切り捨て型指数バックオフとは、ネットワークアプリケーションの標準的なエラー処理方法です。このアプローチでは、クライアントはリクエスト間の遅延を増加させながら失敗したリクエストを定期的に再試行します。
要は失敗回数に応じてリトライまでの待ち時間を増加させていく手法のこと
参考: いまさら指数関数的バックオフを確認と最小限の実装をしてみたメモ。
IAM
サービスアカウント
アプリケーションやVMに紐づく特別なGoogleアカウント
GKE
コンテナ化されたアプリケーション向けのKubernates環境をGCPでデプロイ、管理、スケーリングできるように支援する。
ノード: クラスター内でコンテナをホストするVM
ユニオンファイルシステム(UnionFS)
UnionFS は Linux と FreeBSD 向けのファイルシステムサービスであり、複数の異なるファイルシステム (ブランチと呼ばれる) のファイルやディレクトリ同士を透過的に重ねる (マージする) ことができる技術である。これにより、仮想的な単一のファイルシステムを形成する。
Linux コンテナではアプリケーションと依存関係を一連のクリーンで最小限のレイヤに効率的にカプセル化するために利用される。
Compute Option
Compute Engine
- インフラを完全に制御できる。
 - OSのカスタマイズやオンプレミスの環境に移行しやすい。
 - 他の選択肢が適切でない時に最適
 
App Engine
- フルマネージドなアプリプラットフォームでサーバーの管理やデプロイ構成も不要
 - アプリケーションの構築に集中できてデプロイを気にする必要がない
 - コンテナワークロードにも対応
 - StackDriverでロギングなども可能
 - ウェブサイト、モバイルアプリやゲームのサーバー、REST APIの公開になどに適している
 
GKE
- コンテナのオーケストレーションサービスでGCPでのKubernetes環境を補強する。
 - オンプレミスのクラスタで実行している既存のワークロードをGCPに簡単に移動できる
 - コンテナ化されたアプリ、クラウドネイティブ分散型システム、ハイブリッドアプリなどに適している。
 
Cloud Run
- マネージド型のプラットフォームで、HTTPリクエスやPub/Subイベントを通してステートレスなコンテナを実行できる。
 - Cloud Runでは HTTP経由のリクエストやイベントをリッスンする ステートレスコンテナをデプロイできる。
 
Cloud Functions
- Cloud Functionsはイベントドリブン型の サーバーレスサービスとして イベントにアタッチされた 単一目的の関数を処理します。
 - 感情分析の一部として利用しているケースもある。
 
Kubernetes
Kubernetesのコンセプト
- Kubernetesの管理対象はオブジェクトで表現され、オブジェクトの属性と状態を表示および変更できる。
 - オブジェクトはクラスタ内で実行中の要素の望ましい状態と現在の状態を表す永続的なエンティティとして定義される
各オブジェクトにはKubernetesでkindと呼ばれる種類がある。 - Podはでデプロイ可能な最小のKubernetesオブジェクトで、コンテナが存在する環境を具現化したもの
 - Podに存在する複数のコンテナはネットワークやストレージなどのリソースを共有できる。
 - 実行中のコンテナは全てPod内に存在する。
 
Kubernetesのコントロールプレーン
- クラスタ全体を調整するクラスタ内のコンピューター
 - コントロールプレーンでは複数の重要なKubernetesコンポーネントが実行されている
 - kube-APIserver: 直接操作する単一のコンポーネント
- Podの起動やクラスの状態を表示・変更するコマンドを受け入れる
 - kubectlコマンドを通してアクセスできる
 
 - etcd: クラスタの状態を保存
 
GKEのコンセプト
- kubeadmコマンドで構築を自動化できる
 - GKEは背後のコントロールプレーンのインフラ全てのプロビジョニングと管理を担当
リージョンクラスターで複数のゾーンに跨りクラスターを構築できるので可用性が上がる
ゾーンごとにコントロールプレーンが配置される
コントロールプレーンには外部からアクセスできず内部IPアドレスからアクセスできる
承認済みであれば外部IPからもアクセスできる 
Kubernetesのオブジェクト管理
- Podを管理するコントローラーオブジェクトを定義する
- Deployment, StatefulSet, DaemonSet, job
 
 - Namespaceを使うと物理クラスター上に複数の仮装クラスターを構築できる。
 - dev環境・production環境などで仮装クラスターを構築したりする。
 
kubectl
- Kubernetesクラスを制御するためのユーティリティ
 - kube-apiserverにHTTPリクエストを送って帰ってきたレスポンスを表示する
 - 使用には認証情報が必要
 - gcloud get-credentials でGKEクラスタへの接続に必要な認証情報を取得できる
 - コマンドの実行形式は
kubectl [command] [type] [name] [flags] 
Istio
- 透過的で言語に依存しない手段を提供し、アプリケーションネットワーク機能を柔軟かつ簡単に自動化するサービスネットワーキングレイヤ
 - Istioは、組織が分散型のマイクロサービスベースのアプリケーションをどこでも実行できるようにするためのオープンソース のサービスメッシュ
 - Istioを使用する理由
- Istioを使用すると、組織はマイクロサービスの保護・接続・モニタリングが可能になるため、エンタープライズアプリを迅速かつ安全にモダナイズできる
 
 
Volume
emptyDir
エフェメラルなので、生存期間がPodのライフサイクルと同じ
ConfigMap
- ConfigMapは機密性のないデータをキーと値のペアで保存するために使用されるAPIオブジェクト
 - Podは環境変数・コマンドライン引数またはボリューム内の設定ファイルとしてConfigMapを使用できる
 - ConfigMapを使用すると、環境固有の設定をコンテナイメージから分離できるため、アプリケーションを簡単に移植できるようになる
 
Secret Volume
- 機密情報を保持する
 - インメモリファイルシステムを基盤としている
 
downwardAPI Volume
- downwardAPIを利用可能にするためのボリューム
 - downwardAPIとはコンテナがPod環境を把握するための手段となる
 
垂直Pod自動スケーリング
- GKEが提供する垂直Pod自動スケーリング(Vertical Pod Autoscaling)は、Podのコンテナリソース(CPU/RAM)を自動調整する機能
 
水平Pod自動スケーリング
- GKEが提供する水平Pod自動スケーリング(Horizontal Pod Autoscaling)は、Podのコンテナリソース(CPU/RAM)の消費量やカスタム指標に応じて、Pod数を自動調整する機能
 
PersistentVolume
クラスタレベルで管理する高耐久性の永続ストレージリソース
Knative
- 最新のサーバーレスワークロードをビルド・デプロイ・管理できるKubernetesベースのプラットフォーム
 - Kubernetesでサーバーレスアプリケーションをビルドして、実行するのに不可欠なコンポーネントセットを提供する
 
ネットワーク
キャリアピアリング
キャリアピアリングは、サービスプロバイダ経由でGoogle WorkspaceなどのGoogleアプリケーションにアクセスし、エンタープライズクラスのネットワークサービスによってインフラストラクチャをGoogleに接続するためのもの
VPCネットワークピアリング
- VPCネットワークピアリングは、異なるVPCネットワーク内のワークロードがプライベート(RFC 1918)空間で通信できるように、VPCネットワークをピアリングするためのもの
 - トラフィックは Google のネットワーク内に留まり、公共のインターネットを経由することはない
 
共有VPCネットワーク
共有VPCは、組織内の複数のプロジェクトから共通のVPCネットワークにリソースを接続し、そのネットワークの内部IPを使用して安全で効率的な相互通信を行うためのものです。
限定公開のGoogleアクセス
限定公開のGoogleアクセスは各サブネットワークで使用できます。これを有効にすると、外部IPアドレスがなくても、サブネットワーク内のインスタンスからパブリックGoogle APIエンドポイントと通信できます。
Identity-Aware Proxy(IAP)
IAPは通信チャネルを保護するのではなくユーザーを認証します。技術的には、チャネルは Cloud Load Balancing によってすでに保護されていますが、適切な証明書が使用されません。
- クラウドベースおよびオンプレミスのアプリケーション、Google Cloud上で稼働している VM へのアクセスを制御します
 - ユーザーIDを確認し、コンテキストを使用してユーザーにアクセスを許可すべきかどうかを判断します