概要
Google Cloud認定アソシエイトクラウドエンジニアの試験に向けた勉強をしている際の雑多な覚え書き。
考え方
- 責任共有モデル
- 最小権限の原則
- 組織全体でガバナンスを発揮する
- 権限の分譲
- ステートレスなアプリケーションとイミュータブルなインフラ
- 自動化によるトイルの削減
- スケーラブル・高可用性・堅牢性
- モニタリングと自動的な通知
cf. https://blog.g-gen.co.jp/entry/associate-cloud-engineer
Network Service Tiers
- プレミアム ティア
- デフォルト
- 最高のパフォーマンス
- インターネットとVPCネットワーク内のVM間のトラフィックは可能な限りGoogle内のネットワーク内でルーティング
- グローバルな可用性を必要とするサービス向け
- Google Cloudに固有
- スタンダードティア
- コスト最適化
- インターネットとVPCネットワーク内のVM間のトラフィックは通常インターネット経由でルーティング
- 単一リージョン内で完全にホストされているサービス向け
- パフォーマンスは他クラウドプロバイダと同等
Cloud請求アカウント
- Cloud請求アカウントはGoogle CloudプロジェクトとGoogle Maps Platformプロジェクトの使用料金を支払う
- Cloud請求アカウントはGoogle Workspaceアカウントからは課金されない
- Google Workspace請求先アカウントが別途必要
- Cloud請求アカウントは1つ以上のプロジェクトにリンクできる
- 請求アカウントのタイプ
リージョンとゾーン
リージョン
- リソースをホストできる特定の地理的なロケーション
- 3つ以上のゾーンがある
ゾーン
マルチリージョンサービスの例
- Firestore, Cloud Storage, BigQuery, Cloud Spanner, Cloud Bigtable
リソース配置
- グローバルリソース
- 同じプロジェクトに属するすべてのゾーンのすべてのリソースからアクセス可能
- アドレス, イメージ, スナップショット, インスタンステンプレート, Cloud interconnect, VPC, ファイアウォール, ルート, グローバルオペレーション
- リージョンリソース
- 同じリージョン内のすべてのリソースからアクセス
- アドレス, Cloud interconnectのアタッチメント, サブネット, リージョンマネージドインスタンスグループ, リージョン永続ディスク, リージョンオペレーション
- ゾーンリソース
- 同じゾーンの他のリソースでのみ使用可能
- インスタンス, 永続ディスク, マシンタイプ, ゾーンマネージドインスタンスグループ, Cloud TPU, ゾーンオペレーション
- グローバルプロダクト
- リージョンに依存しない
- Cloud CDN, Cloud DNS, Cloud Armor, Cloud Logging, Cloud Build
- リージョンごとのデプロイメント+1つ以上のマルチリージョンデプロイメント
- Google App Engineとその機能, Cloud Datastore, Cloud Storage, BigQuery
IAM
メンバー
- Google アカウント
- サービス アカウント
- Google グループ
- G Suite ドメイン
- Cloud Identity ドメイン
役割
- 基本の役割
- プロジェクト内の全てのGoogle Cloudサービスに適用される
- オーナー/編集者/閲覧者
- 事前定義の役割
- プロジェクト内の特定のGoogle Cloudサービスに適用される
- 特定のサービスに対してきめ細やかな権限を付与できる
- カスタムの役割
- ポリシー
IAMを安全に使用する
IAMを安全に使用するを参照
サービスアカウント
- ユーザーではなく、アプリケーションやCompute Engineインスタンスなどのコンピューティングワークロードで使用される特別なアカウント
- アカウント固有のメールアドレスで識別される
- サービスアカウントタイプ
- ユーザー管理のサービスアカウント
- デフォルトのサービスアカウント
- 特定のGoogle Cloudサービスを有効にするときに自動的に作成される、ユーザー管理のサービスアカウント
- Google管理のサービスアカウント
- サービスがリソースにアクセスできるようにするためにユーザーに変わってGoogleが作成し、管理するサービスアカウント
- サービスアカウントの使用に関するベストプラクティス
VPC
VPCネットワーク
- グローバルリソース
- プロジェクトごとに複数のVPCネットワークを設定可能
- 新しいプロジェクトは各リージョンに1つのサブネットとデフォルトネットワーク(自動モードVPCネットワーク)が設定される
- IPv4とIPv6のユニキャストアドレスをサポート
- ネットワーク内のブロードキャストアドレスまたはマルチキャストアドレスはサポートしていない
サブネット
- リージョンリソース
- サブネットのタイプ
- IPv4(単一スタック)のみのサブネット(IPv4サブネット範囲のみ)
- IPv4とIPv6(デュアルスタック)のサブネット(IPv4とIPv6の両方のサブネット範囲)
- サブネット作成モード
- 自動モードVPCネットワーク
- 各リージョンから1つのサブネットがネットワーク内に自動的に作成される
- カスタムモードVPCネットワーク
- 自動的にサブネットを作成しない
- サブネットとIP範囲を完全に制御できる
- 同一VPC内に所属するサブネットはセグメントが異なっていても通信することが可能
- リージョンが異なっていても同一VPC内であれば可能
ファイアウォール
- ファイアウォールルール
- ルールはネットワークレベルで定義され、ルールが作成されたネットワークにのみ適用される
- 名前はプロジェクトごとに一意である必要がある
- 優先度は0〜65535の整数で指定。数字が小さいほど優先度が高い
ルート
- インスタンスとVPCネットワークに対して、インスタンスからネットワーク内部またはGoogle Cloudの外部にトラフィックを送信する方法を通知する
VPCネットワークピアリング
- 2つのVPCネットワークを接続し、各ネットワーク内のリソースが相互に通信できるようにする
- 公共のインターネットを経由しない
- 全てのサブネットは内部IPv4アドレスを使用して通信可能
- デュアルスタックサブネットは内部または外部IPv6アドレスを使用して通信を行うことができる
- 同じプロジェクトまたは同じ組織に所属しているかどうかに関係なくプライベート接続できる
- ユースケース
- 組織に複数のネットワーク管理ドメインが存在している場合
- 他組織とピアリングを行う場合
- メリット
- ネットワークレイテンシ
- パブリックIPネットワークよりもプライベート接続のほうがレイテンシが小さい
- ネットワークのセキュリティ
- ネットワークコスト
- 内部IPを使用して通信することによりGoogle Cloudの下り(外向き)帯域幅のコスト節約ができる
共有VPC
- 同じ組織内の複数のプロジェクトで1つのVPCを共有できる
- 同じ組織内のプロジェクトに接続する
- リンクされたプロジェクトは同じまたは異なるフォルダに配置できる
- 異なるフォルダにある場合は、管理者は両方のフォルダに対する共有VPC管理者権限が必要
- 共有元をホストプロジェクト、共有するプロジェクトをサービスプロジェクトと呼ぶ。ホストプロジェクトにサービスプロジェクトを接続する
サーバーレスVPCアクセス
- Cloud Run、App Engine、Cloud Functionsなどのサーバーレス環境からVPCネットワークに直接接続できるサービス
ネットワーク接続
Google Cloudに接続する
Cloud VPN
- IPsec VPN接続を用いて、VPCへの安全に接続する
- 公共のインターネットを経由する
- 2つのネットワーク間トラフィックは、片方のVPNゲートウェイで暗号化され、もう片方のVPNゲートウェイで復号される
- インターネット上でやりとりされるデータが保護される
- Ipsec
- 暗号化によりパケットの秘匿、改ざん検知を行うプロトコル
Classic VPN
- オンプレミスが1つ以上のIPsec VPNトンネルを介してVPCネットワーク内のVMと通信する
HA VPN
- 利用する場合は、使用しているピアVPNデバイスまたはサービスがBGPをサポートしている必要がある
- 単一リージョン内のIPsec VPN接続を使って、オンプレミスのネットワークをVPCネットワークに安全に接続できる高可用性ソリューション
- HA VPNゲートウェイを作成すると、2つのインターフェースの定数ごとに1つずつ、2つの外部IPv4アドレスを自動的に選択する
Cloud interconnect
- オンプレミスとGCP(VPC)をネットワーク接続する
- 公共のインターネットを経由しない
- 低レイテンシで高可用性
- Dedicated Interconnect
- オンプレミスとGCP(VPC)を物理的に直接接続
- サポートされているコロケーション施設で自前のネットワークをGoogleのネットワークに物理的に接続する必要がある
- Partner Interconnect
- サポートされているサービスプロバイダを介して、オンプレミスとGCP(VPC)を接続
- コロケーション施設に接続できない場合や10Gbsの専用回線を必要としない場合に有用
Cloud Router
- BGP(Border Gateway Protocol)を使用してIPアドレス範囲をアドバタイズする完全分散型のマネージドサービス。動的なルーティングを提供。
- Cloud NATのコントロールプレーンとしても機能する
- 以下のサービスにBGPを提供
- Dedicated InterConnect
- Partner Interconnect
- Cloud VPN
- Routerアプライアンス
- カスタムルートアドバタイズ
- BGP経由でオンプレミスルーターにアドバタイズするルートを選択する
Network Connectivity Center
- ネットワーク接続管理にハブアンドスポークアーキテクチャを適用できる
- サイト間でデータ転送を行うことができる
Google Workspace とサポートされている API に接続する
ダイレクトピアリング
- 自前のネットワークとGoogleのエッジネットワークの間に直接ピアリング接続を確立することができる
- 世界33カ国に展開する100以上のロケーションで利用可能
- Google Cloudの外部に存在
- Google Workspaceアプリケーションにアクセスする必要がない限り、Dedicated InterconnectまたはPartner Interconnectの利用推奨
キャリアピアリング
- サービス・プロバイダを使用して、Google WorkspaceなどのGoogleアプリケーションにアクセスし、インフラストラクチャをGoogleに接続するエンタープライズクラスのネットワークサービスを取得できる
- Google Cloudの外部に存在
CDNプロバイダに接続する
CDN Interconnect
- サードパーティのCDNプロバイダが様々なロケーションでGoogleエッジネットワークとダイレクトピアリングを確立し、VPCからプロバイダのネットワークにトラフィックを転送できる
Cloud DNS
- 高パフォーマンスで復元力を備えたグローバル ドメイン ネーム システム(DNS)サービス
- ゾーン
- 一般公開ゾーン
- 限定公開ゾーン
- 委任ゾーン
- ゾーンのオーナーがNSレコードを使用することでサブドメインを別のネームサーバーに委任できる
- スプリットホライズンDNS
- 同じドメインに2つのゾーンを作成、1つを内部ネットワーク用に、もう1つを外部ネットワーク用に使用しているインタンスを表す
- 照会元に応じて異なる情報を返却できる
- レコード
- A: アドレス レコード。ホスト名を IPv4アドレスにマッピング
- AAAA: IPv6アドレス レコード。ホスト名を IPv6アドレスにマッピング
- CNAME: 正規名レコード。エイリアス名を指定
- MX: メールエクスチェンジレコード。メールサーバーへのリクエストのルーティングに使用
- NS: ネームサーバーレコード。DNS ゾーンを権威サーバーに委任に使用
- PTR: ポインタレコード。IP アドレスに対応する名前を定義。DNSの逆引きに利用される
- SOA: Start of authority。ゾーンのプライマリ ネームサーバーと管理者の指定に使用
Cloud KMS
- ロケーション
- 多数あるロケーションのうち1つに作成できる
- Cloud HSM鍵など一部のリソースはすべてのロケーションで利用できるわけではない
- 鍵の自動削除はできない
- 鍵の自動ローテーション
- 対象暗号化に使用する鍵→可能
- 非対称暗号化または非対称署名に使用される鍵→不可
- 鍵のローテーションによってデータは再暗号されない
- 鍵と鍵リングを削除することはできない
- 鍵バージョンの削除はできない
- 鍵バージョンマテリアルを破棄することでリソースは使用できなくなる
- 鍵バージョンの破棄をスケジュール後、デフォルトでは24時間で実際に破棄される
- 鍵をエクスポートすることはできない
- インポートすることはできる。ただし保護レベルがHSMまたはSOFTWAREに限る
Cloud Deployment Manager
- GCPの各種リソースの作成と管理を自動化するためのインフラストラクチャデプロイサービス
- リソースのデプロイ
- gcloud deployment-manager deployments create example --config example.yaml
- 新しいデプロイを確認する
- gcloud deployment-manager deployments describe example
- リソースの削除
- gcloud deployment-manager deployments delete example
- 新しい構成のプレビュー
- gcloud deployment-manager deployments create example-config --config example.yaml --preview
- 最後のプレビューを利用して更新
- gcloud deployment-manager deployments update example
- プレビューをキャンセルする
- gcloud deployment-manager deployments cancel-preview example
- 更新を停止する
- gcloud deployment-manager deployments stop my-first-deployment
- Google Cloudのベストプラクティスを反映したDeployement Manager用とTerraform用のテンプレートが用意されている
Resource Manager
リソース階層
- 組織>フォルダ>プロジェクト>各サービスのリソース
タグとラベル
|
タグ |
ラベル |
リソース構造 |
個別のリソース |
リソースのメタデータ |
定義 |
組織レベル |
各リソースごと |
アクセス制御 |
管理と取り付けにはIAMロールが必要 |
リソースに応じて異なるIAMロールが必要 |
取り付け前提条件 |
タグがリソースに取り付け可能になるにはタグキーとタグ値の定義が必要 |
前提条件なし |
削除の要件 |
タグのタグバインディングが存在しない場合は削除できない |
条件なし |
IAMポリシーのサポート |
IAMポリシーの条件で利用可能 |
サポートなし |
組織のポリシーのサポート |
組織のポリシーの条件付き成約で利用可能 |
サポートなし |
Cloud Billingの統合 |
チャージバック、監査、その他のコスト割当分析を行い、Cloud BillingのコストデータをBigQueryにエクスポート |
Cloud Billingでリソースをラベルでフィルタし、Cloud BillingデータをBigQueryにエクスポート |
タグは何かの制約に柔軟に利用できるが、ラベルは単なるラベル、といったイメージ。
Compute Engine
- インスタンス
- Googleのインストラクチャがホストする仮想マシン(VM)のこと
- ライブマイグレーション
- ワークロードの中断、VM再起動、VMのプロパティ変更等を行わずにメンテナンス実行できる機能
- メンテナンスによるダウンタイムを発生させないようにできる
- OSログイン
- IAMを使用してインスタンスへSSHアクセスできる
- SSH認証鍵を作成して管理する必要がない
- OSログインを利用することで、インスタンス間でLinuxユーザーIDを維持できる
- カスタムイメージ
- ユーザー所有・アクセスを制御するブートディスクイメージ
- 以下のソースからイメージを作成できる
- 永続ディスク(ディスクがVMにアタッチされている場合も含む)
- 永続ディスクのスナップショット
- プロジェクトの別のイメージ
- 別のプロジェクトで共有されているイメージ
- Cloud Storage内で圧縮されたRAWイメージ
- 既存の VM インスタンスに拡張メモリを追加する
- 既存のインスタンスを停止→vCPU・メモリを更新→再起動
- 削除保護
- deletionProtectionを付与することで特定のインスタンスを削除されないようにすることができる
- MIGには適用できない。非MIGに属するインスタンスには適用できる。
- インスタンステンプレートでは指定できない
- インスタンス作成時に削除保護を有効化
- gcloud compute instances create [INSTANCE_NAME] --deletion-protection
- インスタンス作成時に削除保護を無効化
- gcloud compute instances create [INSTANCE_NAME] --no-deletion-protection
- 既存インスタンスの削除保護を更新
- gcloud compute instances update [INSTANCE_NAME] [--deletion-protection | --no-deletion-protection]
Compute Engine関連のIAMロール
- Compute管理者(roles/compute.admin)
- Compute Engineリソースの全てを管理する権限
- Computeイメージユーザー(roles/compute.imageUser)
- Computeインスタンス管理者(roles/compute.instanceAdmin)
- ベータ版
- 仮想マシンインスタンスを作成、変更、削除する権限
- インスタンスを管理する権限のみで、ネットワークやセキュリティ等の権限はない
- Computeインスタンス管理者(roles/compute.instanceAdmin.v1)
- v1
- Compute Engineインスタンス、インスタンスグループ、ディスク、スナップショット、イメージの全てを管理する権限
- Compute閲覧者(roles/compute.viewer)
- Compute Engineリソースを取得して表示する読み取りアクセス権
インスタンスグループ
マネージドインスタンスグループ(MIG)
- 複数の同一VMでのアプリケーション操作が可能
- 自動スケーリングポリシーを備えている
- 負荷判断の指標
- ターゲット使用率の指標
- 平均CPU使用率
- HTTP負荷分散処理能力
- Cloud Monitoringの指標
- スケジュール
- 容量・スケジュールを指定して、予想される負荷に対してスケーリングできる
- 予測オートスケーリング
- 有効にすると、過去のデータに基づいて予測してスケールアウトする
- MIG内の全てのインスタンスを対象にローリングアップデートを適用
- gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME -version=template=INSTANCE_TEMPLATE_NAME [--zone=ZONE | --region=REGION]
- MIGの自動オートスケーリングを有効化する
- gcloud compute instance-groups managed set-autoscaling INSTANCE_GROUP_NAME
- ex. 平均CPU使用率70%で、最大インスタンス数が3
- gcloud compute instance-groups managed set-autoscaling INSTANCE_GROUP_NAME --max-num-replicas 3 --target-cpu-utilization 0.70
非マネージドインスタンスグループ
- ユーザー自身が管理する一連のVM間での負荷分散が可能
- 自動スケーリング、自動修復、マルチゾーンサポート、ローリングアップデート、インスタンステンプレートが利用できない
- 非マネージドインスタンスグループの作成
- gcloud compute instance-groups unmanaged create instance-group-name --zone=zone
インスタンステンプレート
- VMやMIGの予約の作成に利用できるリソース
- マシンタイプ、ブートディスクイメージまたはコンテナイメージ、ラベル、起動スクリプト、その他のインスタンスプロパティを定義
- インスタンステンプレートを用いて以下のことができる
- 個別のVMを作成する
- MIG内のVMを作成する
- VMの予約を作成する
割引
- 継続利用割引
- 請求月の25%を超えて使用し、他の割引が適用されていないリソースに対して適用される割引
- 確約(コミットメント)利用割引
- コミットメントを購入することで適用される割引
- コミットメント購入により、最小限のリソース使用量と1年間または3年間の最小期間分について確約できる
- 前払いはなく、支払いは毎月となる
- compute engineのコミットメントは2種類
マシンタイプ
種別 |
特徴 |
マシンタイプ |
汎用 |
コスト最適化 |
E2 |
汎用 |
バランス(コストパフォーマンス) |
N2, N2D, N2 |
汎用 |
スケールアウト最適化 |
Tau T2D, Tau T2A |
最適化されたワークロード |
メモリ最適化 |
M3, M2, M1 |
最適化されたワークロード |
コンピューティング最適化 |
C2, C2D |
最適化されたワークロード |
アクセラレータ最適化 |
A2 |
その他のマシンタイプ
- カスタムマシンタイプ
- ユーザー側でのカスタム定義
- カスタムマシンタイプのインスタンス作成
- N1マシンタイプの場合(マシンタイプのデフォルトはN1マシンタイプとなる)
- ex. gcloud compute instances create example --custom-cpu=4 --custom-memory=5
- N2マシンタイプ
- ex. gcloud compute instances create example --custom-cpu=6 --custom-memory=3072MB --custom-vm-type=n2
- ex. gcloud compute instances create example --machine-type n2-custom-6-3072
- 共有コアマシンタイプ
- プリエンプティブル
- 最大24時間利用できる
- 途中停止の可能性がある
- 安価
- ライブマイグレーション無し
ストレージオプション
種別 |
特徴 |
データ冗長性 |
ゾーン標準PD |
効率的・信頼性をブロックストレージ |
ゾーン |
リージョン標準PD |
リージョン内の2つのゾーンで同期レプリケーション、効率的・信頼性を持つブロックストレージ |
マルチゾーン |
ゾーンバランスPD |
費用対効果・信頼性を持つブロックストレージ |
ゾーン |
リージョンバランスPD |
リージョン内の2つのゾーンで同期レプリケーション、費用対効果・信頼性を持つブロックストレージ |
マルチゾーン |
ゾーンSSD PD |
高速・高信頼性のブロックストレージ |
ゾーン |
リージョンSSD PD |
リージョン内の2つのゾーンで同期レプリケーション、高速・高信頼性のブロックストレージ |
マルチゾーン |
ゾーンエクストリームPD |
最高パフォーマンスの永続ブロックストレージ |
ゾーン |
ローカルSSD |
高パフォーマンスのローカルブロックストレージ。サーバーに物理的に接続されるため、起動ディスクとして設定はできない。 |
なし |
Cloud Storage バケット |
低価格のオブジェクトストレージ |
リージョン、デュアルリージョン、マルチゾーン |
ゾーンXXX → 冗長性がゾーン
リージョン→冗長性がマルチゾーン
cf. https://cloud.google.com/compute/docs/disks?hl=ja#disk-types
Spot VM
- プリエンプティブルVMの最新バージョン
- プリエンプティブルVMは作成後最大24時間しか持続しないのに対し、Spot VMは最大有効期限がない
- プリエンプションの検出
- gcloud compute operations list --filter="operationType=compute.instances.preempted"
Shilded VM
- ルートキットやブートキットによる攻撃を防御する一連のセキュリティ制御により強化されたVM
- リモート攻撃、権限昇格、悪意のある内部関係者といった脅威から保護できる
Windows VM
- デフォルトでSSHではなく、ユーザー名とパスワードで認証する形になっている
- SSHを有効にしない場合は、VMに接続する前に新しい認証情報を生成する必要がある
- gcloud compute reset-windows-password VM_NAME
スナップショット
- スナップショット頻度
- 制限事項
- ディスクに関連付けられているスナップショットスケジュールを削除することはできない
- 削除する前にすべてのディスクからそのスケジュールとの関連付けを解除する必要がある
- スナップショットスケジュールを更新するには、既存のスケジュールを削除してから新しいスケジュールを作成する必要がある
- スナップショットスケジュール作成
- gcloud compute resource-policies create snapshot-schedule
Cloud Load Balancing
種類
- 内部HTTP(S)ロードバランサー
- 外部HTTP(S)ロードバランサー
- 内部TCP/UDPロードバランサー
- 外部TCP/UDPネットワークロードバランサー
- 外部SSLプロキシロードバランサー
- 外部TCPプロキシロードバランサー
- 内部リージョンTCPプロキシロードバランサー
次のLBはIPv4とIPv6の両方の外部IPアドレスを構成できる。
- グローバル外部HTTP(S)ロードバランサー
- グローバル外部HTTP(S)ロードバランサー(従来)
- 外部SSLプロキシロードバランサー
- 外部TCPプロキシロードバランサー
ロードバランサーの選択
外部ロードバランシングと内部ロードバランシング
- 外部ロードバランサー
- インターネットからのトラフィックをVPCネットワークに配信
- グローバル負荷分散を利用する場合は、Network Service Tiersのプレミアムティアを利用
- リージョン負荷分散を利用する場合は、スタンダートティアを利用できる
- 内部ロードバランサー
グローバルロードバランシングとリージョンロードバランシング
- グローバルロードバランシング
- バックエンドが複数リージョンに分散、ユーザーが同じアプリケーションとコンテンツへのアクセスの必要があり、単一のエニーキャストIPアドレスでアクセスを提供する場合に選択
- ゾーンおよびリージョンの停止に対する耐障害性がある
- リージョンロードバランシング
- バックエンドが同一のリージョン内に存在する場合、IPv4終端のみ必要な場合、またはトラフィックを特定のリージョンに留める必要がある場合に選択
- ゾーンの停止に対する耐障害性はあるが、リージョンの停止への耐障害性はない
プロキシロードバランシングとパススルーロードバランシング
- プロキシロードバランシング
- 受信クライアント接続を終端、ロードバランサからバックエンドへ新しい接続を開く
- パススルーロードバランシング
- クライアント接続を終端しない
- ロードバランサーが受信したパケットは、パケットの送信元、宛先、ポート情報が変更されずにバックエンドへ渡される
Cloud Scheduler
- 作業単位のスケジュールを設定し、定義した回数または一定の感覚で実行できるcronのフルマネージドサービス
- Cloud Schedulerを使用し、作成されたcronジョブは、次のいずれかのターゲットに送信される
- 一般公開されているHTTP/Sエンドポイント
- Pub/Subトピック
- App Engine HTTP/Sアプリケーション
- コスト
Cloud Batch
- バッチ処理ワークロードをスケジュールし、キューに入れて実行できるバッチのフルマネージドサービス
- 次のコンポーネントから構成される
- ジョブ
- ユーザーの操作なしで一連のタスクを完了するスケジューリングされたプログラム
- スクリプト、コンテナイメージ、インスタンステンプレートに基づいて定義することができる
- タスク
- ジョブの一部として定義され、ジョブの実行時に実行されるプログラムによるアクション
- リソース
Cloud Run
- 接続プール
- DBの接続プールはクライアントライブラリを利用して設定推奨
- 接続上限
- Cloud RunではCloud SQLに対する接続数が100に制限されている
- APIの割当上限
- Cloud RunにはCloud SQL Admin APIを使用したCloud SQL Auth Proxyで接続する仕組みがある
- Cloud SQL Auth ProxyにはAPI割当上限が適用される
- Cloud SQL Admin APIの割当は、一度にデプロイされる特定のサービスのCloud Runインスタンス数によって構成されるCloud SQLインスタンス数の約2倍
- 割当を増やすにはCloud Runインスタンスの数を制限するか、増やす
- CPUの割当
- リクエストの処理中のみCPUを割り当てる
- リクエストの処理中のみCPUを割り当てる、レスポンス後はCPUを開放
- CPUを常に割り当てる(Always on CPU)
- コンテナインスタンスが存在する間はCPUが常に割り当てられる機能
- 自動スケーリングが継続して有効になる
- 料金体系
- リクエストの処理中のみCPUを割り当てる
- コンテナインスタンスに割り当てられたCPUとメモリの利用時間について100ミリ秒単位で課金
- 最小インスタンスが1以上の場合はアイドル状態のインスタンスに対しても料金が発生
- デプロイしたCloud Runサービスに対するリクエスト数については100万リクエスト単位で課金される
- CPUを常に割り当てる
- リクエスト単位の課金はなく、CPUとメモリの利用時間のみ課金
App Engine
- モノリシックなサーバーサイドでレンダリングされたウェブサイトを構築
- リージョナル
- アプリケーションを実行するインフラは特定リージョンに配置され、リージョン内のすべてのゾーンで冗長的に利用できる
- プロジェクト作成後はリージョン設定後は変更できない。変更したい場合は再度プロジェクトを作成する必要がある。
app.yaml
- アプリの設定を管理する
- フレキシブル環境を設定するには以下のようにapp.yamlに記載
env: flex
ウォームアップリクエスト
- 新規に作成されたインスタンスにアプリケーションのコードが読み込まれる際のリクエストとレスポンスのレイテンシを短縮する
- ウォームアップを有効にするには以下のようにapp.yamlに記載
inbound_services:
- warmup
デプロイ
- gcloud app deploy
- トラフィックが自動的に新しいバージョンにルーティングされないようにするには、--no-promoteフラグを使用
- gcloud app deploy --no-promote --version=[VERSION]
トラフィック
トラフィック移行
- トラフィックを新しいバージョンに切り替える
- gcloud app versions migrate [VERSION]
- デプロイしたバージョンを戻す
- デプロイ後に以前のバージョンに戻したい場合は、Google Cloudコンソール上から任意のバージョンにトラフィック移行できる
- トラフィックを指定のバージョンにすぐに移行
- gcloud app services set-traffic [MY_SERVICE] --splits [MY_VERSION]=1
- トラフィックを段階的に移行
- gcloud app services set-traffic [MY_SERVICE] --splits [MY_VERSION]=1 --migrate
トラフィック分割
- 複数のバージョンでトラフィックを分割
- gcloud app services set-traffic [MY_SERVICE] --splits [MY_VERSION1]=[VERSION1_WEIGHT],[MY_VERSION2]=[VERSION2_WEIGHT] --split-by [IP_OR_COOKIE]
スケーリングタイプ
- 自動スケーリング
- リクエスト率、レスポンスのレイテンシなどアプリケーションの指標をベースにインスタンスを作成
- automatic_scaling要素を構成することで指標やしきい値、常時稼働する最小数のインスタンスを指定できる
- 基本スケーリング
- アプリケーションがリクエストを受信したときにインスタンスが作成される
- 各インスタンスはアプリケーションがアイドル状態になるとシャットダウンされる
- 断続的な処理やユーザーのアクティビティに応じて動作する処理に適している
- 手動スケーリング
- 負荷レベルに関係なく、常に実行されるインスタンスの数を指定する
- 複雑な初期化、時間の経過に伴うメモリの状態に依存するアプリケーションが実行できる
スタンダード環境
- Googleのインフラで実行されるコンテナインスタンスに基づく
フレキシブル環境
環境の比較
|
スタンダード環境 |
フレキシブル環境 |
インスタンス起動時間 |
ミリ秒単位 |
分単位 |
デプロイ時間 |
秒 |
分 |
バックグランドプロセス |
✗ |
○ |
SSHアクセス |
✗ |
○ |
WebSocket |
✗ |
○ |
スケーリング |
手動、基本、自動 |
手動、自動 |
ゼロにスケーリング |
○ |
✗(最小1インスタンス) |
ランタイムの変更 |
✗ |
○(Dockerfile経由) |
ローカルディスクへの書き込み |
✗ |
○ |
サードパーティバイナリのサポート |
✗ |
○ |
ネットワークアクセス |
App Engineのサービス経由 |
○ |
料金設定モデル |
1日当たりの無料使用量を超えるとインスタンスクラスごとに料金発生 |
1時間当たりのリソース(vCPU、メモリ、永続ディスク)割当量に基づいて料金発生 |
自動シャットダウン |
○ |
✗ |
cf. https://cloud.google.com/appengine/docs/the-appengine-environments?hl=ja
フレキシブル環境は機能や構成、課金体系に柔軟性がある。
インスタンス起動時間やデプロイ時間はスタンダード環境のほうが短い。
スタンダード環境のほうがより柔軟にスケーリングができる。
GKE
クラスタの冗長構成
- ゾーンクラスタ
- マスター:シングルゾーン
- ワーカーノード:シングルゾーン
- マルチゾーンクラスタ
- リージョナルクラスタ
- マスター:マルチゾーン
- ワーカーノード:マルチゾーン
全部マルチゾーンなのがリージョナルクラスタ。
メンテナンスウィンドウ
- GKEのアップグレードを実施する時間帯または実施しない時間帯を指定するための仕組み
リリースチャンネル
- GKEの自動アップグレードにおいて、バージョニングとアップグレードの方針を制御する仕組み
- Rapid
- Regular
- 機能の可用性とリリースの安定性のバランスが取れている
- Stable
本番環境ではRegularまたはStableが推奨される。
ノードプールの手動アップグレード
- サージアップグレード
- デフォルト
- ノードを順番に新しいバージョンにローリングアップデートする
- Blue/Greenアップグレード
- 新旧のバージョンのノードを保持したままアップグレード
- サージアップグレードよりロールバックは高速だが、リソース消費が多い
Autopilotクラスタではサージアップグレードが利用される。Standardクラスタでは、自動アップグレードにおいてはサージアップグレード、手動アップグレードではサージアップグレードまたはBlue/Greenアップグレードが利用可能。
ローリングアップデート
- クラスタ内のワークロードのイメージ、構成、ラベル、アノテーション、リソース制限/リクエストを更新できる
- ポッドを段階的に新しいものに置き換えてから利用可能なリソースを持つノードでポッドをスケジューリングする
- KubernetesワークロードのPodテンプレートを更新することでワークロードのローリングアップデートをトリガーできる
- Kubernetesのワークロード
- DaemonSet
- Deployment
- StatefulSet
オートスケール
- 水平Podオートスケーラー(HPA)
- CPUやメモリ消費量、K8Sから報告されるカスタム指標、クラスタ外部から取得した外部指標に基づいて、Podの数を増減
- 垂直Podオートスケーラー(VPA)
- PodのCPUリソースやメモリリソースに基づいて、リソースのリクエストを調整
- 多次元Podオートスケーラー(MPA)
- クラスタオートスケーラー(CA)
- ノード自動プロビジョニング(NAP)
基本的にはK8Sの機能に基づいたり、それを拡張した機能となっている
Cloud Functions
コマンド
サポートされているトリガー(第2世代)
- HTTPトリガー
- イベントトリガー
- Pub/Subトリガー
- Coud Storageトリガー
- 汎用のEventarcトリガー
第1世代では、Eventarcトリガーがなく、Firebase関連のトリガーがサポートされている
Cloud Audit
監査ログの種類
- 管理アクティビティ監査ログ
- リソースの構成やメタデータを変更するAPI呼び出しやその他の管理アクションに関するログエントリが対象
- 常に書き込まれる
- 構成する、除外する、無効にするなどできない
- データアクセス監査ログ
- リソースの構成やメタデータを読み取るAPI呼び出し、ユーザー提供のリソースデータの作成、変更、読み取りを行うユーザー主導のAPI呼び出しが対象
- デフォルトでは無効になっている
- allAuthenticatedUsersまたはallUsersを使用する一般公開されたリソースでは監査ログは生成されない
- システムイベント監査ログ
- リソースの構成を変更するGoogle Cloudアクションのログエントリが含まれる
- 常に書き込まれる
- 構成する、除外する、無効にするなどできない
- ポリシー拒否監査ログ
- セキュリティポリシー違反が原因でGoogle Cloudサービスがユーザーまたはサービスアカウントへのアクセスを拒否した場合に記録される
- デフォルトでは有効
- 無効にすることはできないが、除外フィルタで取り込みを制限することができる
Cloud IDS
- 侵入検知サービス
- ネットワーク上の侵入、マルウェア、スパイウェア、コマンド&コントロール攻撃の脅威を検出
- ミラーリングされた VM を使用し、Google が管理するピアリングされたネットワークを作成することによって機能する
Google Cloud Directory Sync
- GoogleアカウントのデータをMicrosoft Active DirectoryやLDAPサーバーと動機できるサービス
Cloud Storage
暗号化
- デフォルトで、データをディスクに書き込む前にサーバーで暗号化する
- 暗号化オプション
- サーバー側の暗号化
- Cloud Storageがデータを受信した後で行われる暗号化
- 顧客管理の暗号鍵
- KMSを使用して暗号鍵を作成、管理
- 顧客管理の暗号鍵はソフトウェア鍵としてHSMクラスタに保存することも、外部に保存することも可能
- 顧客指定の暗号鍵
- 独自の暗号鍵を作成、管理
- 標準のCloud Storage暗号化を強化する追加暗号化として機能
- クライアント側の暗号化
- データがCloud Storageに送信される前に暗号化
- 暗号化された状態でCloud Storageに送信されるが、サーバー側でも暗号化が行われる
- バケットのWebサイト構成(メインページまたはエラーページ)を設定する
- gsutil web set -m [] [-e ] gs://...
- バケット内の全てのオブジェクトを公開する
- gsutil iam ch allUsers:objectViewer gs://...
- 指定したオブジェクトを一般公開する
- gsutil acl set public-read gs://...
ストレージクラス
種別 |
特徴 |
可用性SLA |
Standard |
最もアクセス頻度が高いものに利用 。最小保存期間なし。検索料金なし |
99.95% |
Nearline |
月1回以下のアクセス、最低保存期間30日間。検索料金あり |
99.0% |
Coldline |
四半期に1回程度のアクセス、障害復旧用など。最低保存期間90日。検索料金あり |
99.0% |
Architve |
年1回以下のアクセス、監査ログ・アーカイブなど。最小保存期間365日。検索料金あり |
99.0% |
保存料金
Standard > Nearline > ColdLine > Archive
取出し料金
Standard < Nearline < Coldline < Archive
バケット作成後もストレージクラスは変更可能。
ロケーションタイプ
バケット作成後はロケーションタイプの変更はできない。
データを別のロケーションに移動することはできる。
アクセス制御
- Cloud IAM
- ACL
- バケットとオブジェクトへのアクセス権を持つユーザーと各ユーザーのアクセスレベルを定義するために使用できるアクセス制御リスト
- 設定方法
- Google Cloudコンソール、gsutil、クライアントライブラリ、JSON API、XML API
- バケットのACLはGoogle Cloudコンソールでは変更できない(オブジェクトは可能)
- 署名付きURL
- 署名および時限付き暗号化キー
- 署名付きURLを生成するためのオプション
- サービスアカウント認証によるV4署名
- HMAC認証による署名
- サービスアカウント認証によるV2署名
- 署名付きポリシードキュメント
利用可能な監査ログ
- 管理アクティビティ監査ログ
- ADMIN_WRITE
- Google Cloudプロジェクト、バケット、オブジェクトの構成またはメタデータを変更するオペレーション
- データアクセス監査ログ
- ADMIN_READ
- Google Cloudプロジェクト、バケット、オブジェクトの構成またはメタデータを読み込むオペレーション
- DATA_READ
- DATA_WRITE
- オブジェクトを作成または変更するオペレーションが記録される
パフォーマンスの最適化
- アップロードの改善
- 小さなファイルを高速にアップロードする
- 大きなファイルを効率的にアップロードする
- parallel_composite_upload_thresholdオプションを使う
- チャンク分割して並列アップロード
- ex. gsutil -o GSUtil:parallel_composite_upload_threshold=150M cp ./localbigfile gs://your-bucket
- 順次命名を回避
- YYYY/MM/DD/CUSTOMER/timestampのような順次的なファイル命名規則を避ける
- ダウンロードの改善
- 最適なフェッチサイズの設定
- gsutilでの大きなファイル読み取りを最適化
- HTTP Range GETリクエストを使用して、スライスされたダウンロードを並行して実行できる
- ex. gsutil -o 'GSUtil:parallel_thread_count=1' -o
'GSUtil:sliced_object_download_max_components=8' cp gs://bukket/fileSRC.dat
./localDST.bin
整合性
- グローバルな強整合性
- read-after-write
- read-after-metadata-update
- バケットについては、メタデータの更新は強整合性だが、結果として得られる構成の反映がされるまでに時間がかかる場合がある(結果整合性)
- ex. バケットのオブジェクトバージョニングを有効にしたとき、オブジェクトの削除または置換は30秒以上待ってから行う必要がある
- read-after-delete
- バケットの一覧表示
- オブジェクトの一覧表示
- 結果整合性
- リソースへのアクセス権の付与またはリソースからのアクセス権の取り消し
- キャッシュ
- 一般公開され、キャッシュされたオブジェクトについては強整合性が損なわれる可能性がある
ログ
- 使用状況ログ
- CSVファイル形式
- 特定のバケットに対して行われた全リクエスト情報が1時間ごとに作成される
- Cloud Audit Logsでは追跡できないallUsersまたはallAuthenticatedUsersのリソースのアクセスも追跡可能
- ストレージログ
- CSVファイル形式
- 前日のバケットのストレージ消費についての情報が毎日作成される
Storage Transfer Service
- Google、Amazon、Azure、オンプレミスなどにまたがるファイルストレージとオブジェクトの間でデータを転送できるサービス
- 事前定義ロール
- 編集者(roles/editor)
- 管理者(admin)
- ユーザー(user)
- 閲覧者(viewer)
GCPが提供するデータベースサービス
一部抜粋
サービス名 |
種別 |
特徴 |
BigTable |
NoSQL(列指向型) |
低レイテンシ高スループット |
FireStore |
NoSQL(ドキュメント型) |
Web, Native App, IoTなど |
Firebase Realtime Database |
NoSQL(ドキュメント型) |
リアルタイム同期 |
Memorystore |
NoSQL(Key-Value型) |
Redis/Memcachedと互換 |
BigQuery |
データウェアハウス |
大規模データセットやクエリ |
Bare metal Solution |
RDB稼働のためのハードウェア |
特殊な要件 |
Cloud SQL
- マシンタイプの表記
- db-n1<マシンタイプ>-standard<用途>-1<CPU数>
- カスタムインスタンス構成
- db-custom-1<vCPU数>-3840<RAM(MB)>
- Cloud SQLでサポートされていないMySQLステートメント
- LOAD DATA INFILE
- SELECT ... INTO OUTFILE
- INSTALL PLUGIN ...
- UNINSTALL PUGIN ...
- CREATE FUNCTION ... SONAME ...
- CREATE PROCEDUREはサポートされている
- 高可用性の有効・無効
- インスタンスを作成するときでも、既存のインスタンスでも有効にできる
- gcloud CLI
- --availability-type=AVAILABILITY_TYPE
- Cloud SQLの接続
- Public IP
- 承認済みネットワーク(許可対象の接続元IPのホワイトリスト)を構成してインターネットからのアクセスを許可
- Private IP
- VPCピアリングによるアクセス
- GoogleのVPC(Cloud SQLインスタンスはGoogle管理のVPCに所属)とユーザーが用意したVPCでピアリングを設定
- Cloud SQL Auth Proxy
- Cloud SQLへの接続をプロキシする機能
- 通信が自動的にSSL/TLC暗号化される
- IAM権限で接続を制限できる
- IAMデータベース認証
Bigtable
- 分散KVS
- HBase、Hadoopと互換性有り
- 10ミリ秒以内の低レイテンシ
- 再起動なしのスケーリング
- 構造・半構造以外にも多様なデータ・フォーマットに対応
- API接続:VMs, Hbase, REST Server
- Streaming接続:Cloud Dataflow Streaming, Spark Streaming, Storm etc..
- バッチプロセス:Hadoop, MapReduce, Dataflow, Spark etc...
- 最適な用途
- 時系列データ
- マーケティングデータ
- 金融データ
- IoTデータ
- グラフデータ
Firestore
- Naviteモード
- アトミックなオペレーション
- トランザクション
- バッチ書き込み
- 複数の書き込みオペレーションを 1 つのバッチとして実行できる
- FirestoreをAPIとして持つモード
- ドキュメント型DB
- リアルタイム同期
- オフラインでも永続性持っており、オンライン時に同期する
- クライアント・サーバーからアクセス
- Datastoreモード: 以前存在していたDatastoreというサービスのモード
- アトミックなオペレーション
- 強整合性を保証
- エンティティグループによるデータモデル
- Firestoreとは互換性がない
Firebase Realtime Database
- データはjsonとして保存
- リアルタイムデータ同期
- WebSocket利用
- オフライン時でも永続性を持っており、オンライン時に同期する
- クライアントからサーバーを介さずアクセス可能
- スケーリング
Cloud Composer
- Apache Airflowをベースとしたワークフローオーケストレーションサービス
- GKEクラスタが構成される
Cloud Dataflow
- Apache Beamをベースとしたバッチ処理とストリーミングに対応したデータ処理のフルマネージドサービス
- バッチ処理はDataflow単体で、ストリーミング処理はPub/Subと組み合わせる
- Dataflow SQL
- 以下のソースに対してクエリを実行できる
- Pub/Subトピックからのデータのストリーミング
- Cloud Storageのファイルセットからのデータのストリーミング、バッチ
- BigQueryのテーブルからのデータのバッチ
- クエリ結果は以下に書き込みができる
Cloud Dataprep by Trifacta
- データクレジングサービス
- GUIで構成できる
- Google パートナー企業である Trifacta が運営する統合パートナーサービス
- データソースは、BigQuery、Cloud Storage、ファイルアップロードのみ
Cloud Dataproc
- Apache Hadoop、Apache Spark、Apache Flink、Prestoなどに対応したフルマネージドのMap Reduceサービス
- スケーラブルな環境でデータレイクのモダナイゼーション、ETL、安全なデータサイエンスを実現できる
- マスターとワーカーインスタンスはcompute engineにて構成されるのでサーバーレスではない
Cloud Data Fusion
- GUIで操作できるDataproc
- Dataprocクラスタを使用してパイプラインを構成
BigQuery
- データウェアハウスサービス
- カラム型ストレージ(列指向型)
- ツリーアーキテクチャ
事前定義ロール
- BigQuery管理者(roles/bigquery.admin)
- BigQuery Connection管理者(roles/bigquery.connectionAdmin)
- BigQuery Connectionユーザー(roles/bigquery.connectionUser)
- BigQueryデータ編集者(roles/bigquery.dataEditor)
- BigQueryデータオーナー(roles/bigquery.dataOwner)
- BigQueryデータ閲覧者(roles/bigquery.dataViewer)
- BigQueryフィルタ済みデータ閲覧者(roles/bigquery.filteredDataViewer)
- BigQueryジョブユーザー(roles/bigquery.jobUser)
- BigQueryメタデータ閲覧者(roles/bigquery.metadataViewer)
- BigQuery読み取りセッションユーザー(roles/bigquery.readSessionUser)
- BigQueryリソース管理者(roles/bigquery.resourceAdmin)
- BigQueryリソース編集者(roles/bigquery.resourceEditor)
- BigQueryリソース閲覧者(roles/bigquery.resourceViewer)
- BigQueryユーザー(roles/bigquery.user)
- マスクされた読み取り(roles/bigquerydatapolicy.maskedReader)
クエリ
コスト
- 購入した容量はリージョンリソースとなる
- 単一のリージョンまたはマルチリージョンで購入したスロットコミットメントは、別のリージョンで使用することも移行することもできない
- 分析料金
- クエリの処理にかかる費用
- オンデマンド料金または定額料金がある
- ストレージ料金
- BigQueryに読み込むデータを保存する費用
- アクティブストレージ
- 過去90日間で変更されたテーブルまたはテーブルパーティションを含む
- 長期保存
- 90日間連続して変更されていないテーブルまたはテーブルパーティションが含まれる
- エラーが返されたクエリまたはキャッシュから結果が返されたクエリには料金が発生しない
費用管理
- SELECT * を避ける
- プレビューオプションを使用してデータをサンプリングする
- クエリを実行する前に料金を見積もる
- クエリ検証ツールの使用
- ドライランの実行
- 料金計算ツールの使用
- 課金されるバイト数を制限してクエリ費用を抑える
- クラスタ化テーブルまたはパーティション分割テーブルの使用
- クラスタ化されていないテーブルの費用管理にLIMITを使わない
- クラスタ化されていないテーブルにおいてLIMITを使っても読み取りデータ量には影響しない
- ダッシュボードを使用し、費用を表示、監査ログを照会する
- データを日付別にパーティション分割する
- クエリ結果を段階的に実体化する
- 実体化された結果を保存する費用 > 大量のデータを処理する費用
- 大容量の結果セットの費用を検討する
- 大容量の結果セットを維持するには費用がかかるので、不要になったデータはテーブル有効期限を適用するなどして破棄する
費用見積もり
- オンデマンドクエリの費用見積もり
- 以下のいずれかでクエリ結果のバイト数を確認して、バイト数から見積もりを計算する
- Google Cloudコンソールのクエリ検証ツール
- bqコマンドラインツールの--dry_runフラグ
- APIまたはクライアントライブラリを使用し、クエリジョブをdryRunパラメータを使って送信
BigQuery Data Transfer Service
- スケジュールに基づいてBigQueryにデータの移動を自動化するマネージドサービス
- サポートするソース(データベースはサポートされていない)
- キャンペーンマネージャー
- Cloud Storage
- データセットコピー
- Googleアドマネージャー
- Google 広告(旧AdWords)
- Google広告
- Google Merchant Center
- Google Play
- スケジュールされたクエリ
- 検索広告360
- Youtubeチャンネル
- Youtubeコンテンツ所有者
- Amazon S3
- Azure Blog Storage
- Teradata
- Amazon Redshift
BIツール
- Googleデータポータル(Google Data Studio)
- BigQuery BI Engine
- Looker
機械学習
- Cloud Vison API
- Speech-To-Text Text-To-Speech
- Cloud Natural Language API
- Cloud Translation API
- Cloud Video Intelligence API
- 動画コンテンツ分析
Transfer Appliance
- 大容量のストレージデバイス
- 物理的なデータ移動
- Cloud Storageにアップロードする
- 適しているかの判断基準
- GCPを利用している
- データが10TB以上
- サービス利用可能なロケーションにデータがある
- ネットワーク経由でのアップロードが1週間以上かかる場合があるようなデータサイズ
API
CloudEndpoints
Apigee
Cloud Logging
ログ種別
- Google Cloudのサービスが生成するログ
- BigQuery、Cloud Run、Cloud Functionsなどの殆どのサービスのログ出力先はCloud Logging
- ユーザーが生成するログ
- VMにインストールされたエージェントやAPI経由で投入されるログ
- セキュリティログ
- Cloud Audit Logsのログ
- アクセスの透明性ログ
- Googleサポートなどがユーザーコンテンツにアクセスした際に出力されるログ
- マルチクラウド・ハイブリッドクラウドのログ
- 他クラウドサービスから取り込んだログやオンプレミスから取り込んだログ
ログの保存先
- ログバケット
- Cloud Storageバケット
- BigQueryデータセット
料金
シンク
- Cloud Loggingに取り込まれるログの振り分けをする機能