https://www.skills.google/paths/11?catalog_rank=%7B%22rank%22%3A2%2C%22num_filters%22%3A0%2C%22has_search%22%3Atrue%7D&search_id=81113005
を受講して、大事そうなところやわかりやすかった比較図・選定フローなどをメモしたものです。
Essential Google Cloud Infrastructure: Core Services
ストレージ・データベース
- サービス一覧
- 決定フロー
Cloud Storage
-
デフォルトではオブジェクトにはバケットのストレージクラスが割り当てられる
-
バケットのストレージクラスは後から変更可能だが、ロケーションタイプは変更不可
-
バケットまたはオブジェクトに設定可能なACLエントリは最大100
-
ACLはエントリで構成され、ACLは権限とスコープで構成される
- 権限:ユーザーが可能なアクション
- スコープ:誰がアクションを行えるか(ユーザーまたはグループ)
-
ストレージクラスの決定フロー
- Autoclass ストレージクラスを使用するとアクセス頻度に応じて自動でクラスが変更される
Filestore
- 特徴
Cloud SQL
- 最大64TB
- 60,000IOPS
- 最大624GB of RAM
- 接続方式選定フロー
-
External IP 接続
- Cloud SQL Proxyを使用してセキュリティ担保
- 手順
- VMにSSHで接続し、Cloud SQL Proxy をwgetでDL
- Proxyを起動
./cloud_sql_proxy -instances=XXX=tcp:3306 & - localhost(127.0.0.1) で Cloud SQL への接続がListenされる
-
Internal IP 接続
- プライベートIPのみで接続することでセキュアかつ低レイテンシー
- CloudSQLインスタンスがVMと同一リージョン・同一VPC内の場合に使用可能
-
Database 選定フロー
Spanner
- ペタバイト規模
- ユースケースはフィナンシャルや在庫管理、LLMなど
- 選定フロー
Alloy DB
- フルマネージド
- PostgreSQLベース(Google 独自エンジンと組み合わせている?)
- PostgreSQL比4倍高速なトランザクション処理
- PostgreSQL比100倍高速な分析クエリ
- 99.99 SLA
- Vertex AI 統合
Firestore
- ネイティブ・Datastore互換モードが存在
Bigtable
- Googleの検索、アナリティクス、Map、Gmailなどと同じデータベース
- とにかく高速
- スパース(低密度)
- Bigtable選定フロー
Memorystore
Compute Engine
- Deletion rule で Keep boot diskを選択するとInstance削除してもDiskは残る
- DiskからImageを作成し、ImageからInstance Templateを作成できる
VPC
ピアリング
LoadBalancing
-
ALB
- Layer7を担当(HTTPSなど)
-
NLB
- Layer4を担当(TCP・UDPプロトコルなど)
- Proxy型
- クライアントからの通信の終端となる
- バックエンド到達時のIPはNLBのものとなる
- パススルー型
- 不可分散のみを行う(リクエストはそのままバックエンドに通過)
- DSR(Direct Server Return)でNLBを経由せずクライアントに返却
- バックエンド到達時のIPはクライアントのIPを維持
-
選定フロー
Load Balancing
Resource Management
Billing
- Project定義時に請求先アカウントを紐づける
- BudgetはProject単位 or 請求先アカウント単位で設定可能
- Quotaには以下2種類が存在する
- レートに基づく割り当て
- 数量に基づく割り当て(e.g. VMインスタンス数)
Kubernetes
- kubectl syntax
nameはoptional
- pod status
-
Unknown
- pod の状態を取得できない
-
CrashLoopBackOff
- 予期せぬ起動と再起動を繰り返している状態
-
kubectl exec -it [POD_NAME] -- [command]
-i (stdin - 標準入力): コンテナに標準入力を開いたままにする。これにより、コマンドを入力できます。
-t (tty - 端末): 擬似端末(Pseudo-TTY)を割り当てる。これにより、コンテナ内のシェルがターミナルとして認識され、プロンプトやコマンドの表示が正しく機能します。
Cloud Run
- Pub Sub からの実行の場合最大600秒以内に success code (200 or 204 ...etc) で返却しない場合、あるいは error code (400 or 500 ...etc)が返却された場合エラー扱いとなり、 Pub Sub から再度 push される
- Secret Manager の参照はデプロイ時にコマンドで環境変数かマウントパスに設定するのを推奨
モニタリング
-
Monitoring in GKE
- Google Managed Prometheus(GMP)を使うことを推奨
- クエリ言語でデータを分析できる
- Google Managed Prometheus(GMP)を使うことを推奨
-
Monitoring in Compute Engine
- Ops Agent を使うことを推奨
- 3rd party アプリのメトリクスも収集できる
- Ops Agent を使うことを推奨
-
Hybrid monitoring and logging
- BindPlane(Google パートナーの製品)を使うことで以下のデータも収集できる
- オンプレミス
- AWS・AzureなどGoogle以外のクラウド
- 通常のLoggingにかかるコスト以外は追加課金なし
- BindPlane(Google パートナーの製品)を使うことで以下のデータも収集できる
-
Metrics Scope
- 以下2パターンが存在
- 1つのメトリクススコープで複数PJを監視
- メリット
- 関連PJを単一画面で監視できる
- 非本番・本番環境の比較が可能
- デメリット
- 権限を持っていれば全環境のメトリクスが見れてしまう
- メリット
- 1つのメトリクススコープで1つのPJのみを監視
- メリット
- 各PJが明確に分離されており権限管理が容易
- PJリソース・管理リソースが集約される
- PJ初期設定時の標準機能なので自動化が容易
- デメリット
- アプリが1プロジェクトより巨大になるとアプリのパフォーマンスの可視性に限界がくる
- メリット
- 1つのメトリクススコープで複数PJを監視
- 以下2パターンが存在
-
Data model
- CloudMonitoring で参照可能なデータはtime seriese(時系列データ)で記録され、以下の構成となっている
- metric
- metric 自体のデータ
- severity(INFOなど)・typeなど
- resource
- ログの起因となったリソースの情報
- resource id, project id, zoneなど
- metricKind
- DELTAなど
- valueType
- INT64など
- points
- 実際の値
- metric
- CloudMonitoring で参照可能なデータはtime seriese(時系列データ)で記録され、以下の構成となっている
- 個々のPJではなく、モニタリング用のPJを作って監視するのがベストプラクティス
SLI, SLO, SLA
- SLI(Service Level Indicator)
- 信頼性を測定する指標
- SLO(Service level objective)
- SLIと組み合わせて定義する目標値
- 99.999%などで表現されるのが一般的(いわゆるThree Nine)
- SLA(Service Level Agreement)
- 顧客に宣言する信頼性目標値
- およびそれが破られた時の保証方法の定義
- SLOはS.M.A.R.T.で定義すべき
- Specific
- 曖昧ではなく明確(数値など)で表す
- Measurable
- 測定可能な数値であること
- Achievable
- 達成可能であること(100%はNG)
- Relevant
- 関連性があること。そのSLOを達成することでユーザーの課題解決の助けになるか?
- Time-bound
- 目標達成の時間枠(月 or 週 or ...etc)
- Specific
Logging
-
生成されるログは以下5種類
- Platform logs
- Google Cloud により自動で生成されるもの
- e.g. VPC Flow logs など
- Component logs
- Google が提供するソフトウェアによって生成されるもの
- e.g. GKEのVM上で生成されたログなど
- Security logs
- e.g. Cloud Audit logs など
- User-written logs
- 以下のような手段でユーザーにより生成されたログ
- Ops Agent
- Cloud Logging API
- Cloud Logging client libraries
- 以下のような手段でユーザーにより生成されたログ
- Multi-cloud logs and Hybrid-cloud logs
- Azure, AWS, on-premises ログ
- Platform logs
-
ログはデフォルト30日保管、最大3650日
-
adminログはデフォルト400日
- Log router sinks
- 以下のいずれかにフィルタ結果のログを転送可能
- Cloud Logging bucket
- BigQuery dataset
- Cloud Storage bucket
- Pub/Sub topic
- Splunk
- Other project
- 以下のいずれかにフィルタ結果のログを転送可能
Audit Logs
- Admin Activity logs
- 常に有効&無料
- 設定やメタデータの変更を記録
- Data Access logs
- Project、組織など複数の階層で有効化可能
- 親PJで有効になっているものを無効化はできない
- 以下3通りのログを提供
- Admin read
- バケットの設定閲覧など
- Read
- GCSのファイルDLなど
- Write
- GCSのファイルを配置など
- Admin read
- 特定のユーザー or グループを記録対象外とすることが可能
- ノイズ・コスト削減
- ログは自動でGoogle Managedなキーで暗号化されるが、組織の要件を満たせない場合はカスタムキーで暗号化も可能
- ログストレージを一元化または分割するために、ユーザー定義バケットを作成することを推奨
- PIIが含まれることが多いため、権限は精査する
- Sensitive Data Protection と組み合わせることでマスキングが可能
- Project、組織など複数の階層で有効化可能
Audit ログの例
{
insertId: "-77e5fge38tyo"
logName: "projects/<projectID>/logs/cloudaudit.googleapis.com%2Fdata_access"
operation: {
first: true
id: "1581200795118:bquxjob_56996f5_17026e67aa2"
producer: "bigquery.googleapis.com"
}
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
authenticationInfo: {
principalEmail: "cloudysanfrancisco@gmail.com"
}
VPC Flow Logs
- VM, GKE instance のネットワークフローを記録
- VMからのパケットが記録される
- egress(VM -> 外部) で拒否されたパケットは捕捉されるが、 ingress(外部 -> VM) で拒否されたパケットは捕捉されない
Firewall Rules logging
- Firewall Rule のログを記録
- いくつの接続がルールにマッチしたか
- 幾つの接続が拒否されたか
- ...etc
有効化するとログ数が膨大になる可能性があるためコストに注意
Error reporting
- ログを精査し、指定されたチャネル(Slack, Mailなど)に通知することが可能
ERRORレベル + スタックトレースを含むログを出力するとうことなので独自でアラートを作る必要はなさそう
https://zenn.dev/nekoshita/articles/39c356bba2e991
Cloud Trace
- レイテンシーを可視化し原因調査などに活用
Cloud Profiler
- 本番環境のパフォーマンスに影響与えることなく、パフォーマンスを計測できる
- 無料
- 多様な言語(Java, Go, Python, Note.js)に対応
- 他クラウド・オンプレ対応
- 使用可能なメトリクスは言語によって異なる
- walltime
- ロックやスレッド同期などの待機時間を含め、コードブロックの実行にかかる時間
- コードブロックの walltime は、CPU時間よりも短くなることはない
- heap
- プロファイルが収集された時点でプログラムのヒープに割り当てられているメモリ量
- Allocated heap
- プログラムのヒープに割り当てられたメモリの総量
- 解放されて使用されなくなったメモリも含まれる
- threads
- 他のスレッドを待機してスタックしているスレッドに関する情報
- スレッド数が含まれる
- profiler は flame graph(可視化ツール) で表現される





























