Google Cloud Associate Cloud Engineer受験時の学習内容をまとめたもの。公式の試験概要より、指定されている範囲のサービスを触ってみた記録です。
目次
- 目次
- 1. クラウド ソリューション環境の設定
- 2. クラウド ソリューションの計画と構成
- 3. クラウド ソリューションのデプロイと実装
- 3.1 Compute Engine リソースをデプロイ、実装する。以下のようなタスクを行います。
- Cloud Console と Cloud SDK(gcloud)を使用してコンピューティング インスタンスを起動する(例: ディスク、可用性ポリシー、SSH 認証鍵の割り当て)
- インスタンス テンプレートを使用して、自動スケーリングされるマネージド インスタンス グループを作成する
- インスタンス用のカスタム SSH 認証鍵を生成、アップロードする
- VM で Stackdriver Monitoring と Stackdriver Logging の構成を行う
- コンピューティングの割り当てを評価し、割り当ての引き上げをリクエストする
- モニタリングとロギング用に Stackdriver Agent をインストールする
- 3.2 Google Kubernetes Engine リソースをデプロイ、実装する。以下のようなタスクを行います。
- 3.3 App Engine リソース、Cloud Run リソース、Cloud Functions リソースをデプロイ、実装する。以下のようなタスクを行います(該当する場合)。
- 3.4 データ ソリューションをデプロイ、実装する。以下のようなタスクを行います。
- 3.5 ネットワーキング リソースをデプロイ、実装する。以下のようなタスクを行います。
- サブネットを持つ VPC(例: カスタムモード VPC、共有 VPC)を作成する
- カスタム ネットワーク構成(例: 内部専用 IP アドレス、限定公開の Google アクセス、静的外部 IP アドレスとプライベート IP アドレス、ネットワーク タグ)を持つ Compute Engine インスタンスを起動する
- VPC 用の上り(内向き)および下り(外向き)ファイアウォール ルール(例: IP サブネット、タグ、サービス アカウント)を作成する
- Cloud VPN を使用して Google VPC と外部ネットワークとの間の VPN を作成する
- アプリケーションへのネットワーク トラフィックを分散するロードバランサ(例: グローバル HTTP(S) ロードバランサ、グローバル SSL プロキシ ロードバランサ、グローバル TCP プロキシ ロードバランサ、リージョン ネットワーク ロードバランサ、リージョン内部ロードバランサ)を作成する
- 3.6 Cloud Marketplace を使用してソリューションをデプロイする。以下のようなタスクを行います。
- 3.7 Cloud Deployment Manager を使用してアプリケーション インフラストラクチャをデプロイする。以下のようなタスクを行います。
- 3.1 Compute Engine リソースをデプロイ、実装する。以下のようなタスクを行います。
- 4. クラウド ソリューションの正常なオペレーションの確保
- 4.1 Compute Engine リソースを管理する。以下のようなタスクを行います。
- 単一の VM インスタンス(例: 起動、停止、構成の編集、インスタンスの削除)を管理する
- インスタンスに SSH / RDP で接続する
- GPU を新しいインスタンスに接続し、CUDA ライブラリをインストールする
- 現在実行されている VM のインベントリ(インスタンス ID、詳細)を見る
- スナップショットを操作する(例: VM からのスナップショットの作成、スナップショットの表示、スナップショットの削除)
- イメージを操作する(例: VM またはスナップショットからのイメージの作成、イメージの表示、イメージの削除)
- インスタンス グループを操作する(例: 自動スケーリング パラメータの設定、インスタンス テンプレートの割り当てや作成、インスタンス グループの削除)
- 管理インターフェース(例: Cloud Console、Cloud Shell、GCloud SDK)を操作する
- 4.2 Google Kubernetes Engine リソースを管理する。以下のようなタスクを行います。
- 4.3 App Engine リソースと Cloud Run リソースをデプロイする。以下のようなタスクを行います。
- 4.4 ストレージとデータベースのソリューションを管理する。以下のようなタスクを行います。
- Cloud Storage バケット間でオブジェクトを移動する
- ストレージ クラス間で Cloud Storage バケットを変換する
- Cloud Storage バケットのオブジェクト ライフサイクル管理ポリシーを設定する
- データ インスタンス(例: Cloud SQL、BigQuery、Cloud Spanner、Cloud Datastore、Cloud Bigtable)からデータを取得するクエリを実行する
- BigQuery クエリのコストを見積もる
- データ インスタンス(例: Cloud SQL、Cloud Datastore)のバックアップと復元を行う
- Cloud Dataproc、Cloud Dataflow、BigQuery のジョブ ステータスを確認する
- 管理インターフェース(例: Cloud Console、Cloud Shell、Cloud SDK)を操作する
- 4.5 ネットワーキング リソースを管理する。以下のようなタスクを行います。
- 既存の VPC にサブネットを追加する
- サブネットを拡張して IP アドレスを増やす
- 静的外部または内部 IP アドレスを予約する
- 管理インターフェース(例: Cloud Console、Cloud Shell、Cloud SDK)を操作する
- 4.6 モニタリングとロギングを行う。以下のようなタスクを行います。
- リソース指標に基づいて Stackdriver アラートを作成する
- Stackdriver カスタム指標を作成する
- ログが外部システム(例: オンプレミスまたは BigQuery)にエクスポートされるようにログシンクを構成する
- Stackdriver のログを表示、フィルタリングする
- Stackdriver のログメッセージの詳細を見る
- Cloud Diagnostics を使用してアプリケーションの問題を調査する(例: Cloud Trace データの確認、Cloud Debug を使用したアプリケーションのポイントインタイムの確認)
- Google Cloud Platform のステータスを見る
- 管理インターフェース(例: Cloud Console、Cloud Shell、Cloud SDK)を操作する
- 4.1 Compute Engine リソースを管理する。以下のようなタスクを行います。
- 5. アクセスとセキュリティの構成
1. クラウド ソリューション環境の設定
1.1 クラウド プロジェクトとアカウントを設定する。以下のような作業を行います。
プロジェクトを作成する
プロジェクトを作成する。
$ gcloud projects create --name=sample \ [--organization=ORGANIZATION_ID] [--folder=FOLDER_ID] # OrganizationやFolder配下に作成する場合
プロジェクト内で事前定義された IAM ロールにユーザーを割り当てる
ユーザー(メンバー)の種類。
- Google アカウント
- Gmailアカウントのこと
- サービスアカウント
- アプリケーションやGoogle CloudのResourceに相当
- 非エンドユーザー
Google Workspace
ドメイン、およびCloud Identity
ドメインと、それぞれのドメインユーザー- グループ
Projectを対象に、IAM Roleをメンバーに割り当て。
$ gcloud projects add-iam-policy-binding sample-123456 --member='user:kiritan@goodbyegangster.com' --role='roles/storage.objectViewer' $ gcloud projects add-iam-policy-binding sample-123456 --member='serviceaccount:sample@sample-123456.iam.gserviceaccount.com' --role='roles/bigquery.dataViewer' $ gcloud projects add-iam-policy-binding sample-123456 --member='group:group@goodbyegangster.com' --role='roles/appengine.deployer''
gcloud projects add-iam-policy-binding
Cloud Identity でユーザーを管理する(手動および自動)
Cloud IdentityとはGoogleが提供するIDaaSのこと。
Cloud Identity ヘルプ - GCP 管理者向けの設定手順
Google Cloudのリソース階層。
- Organization
- Folders
- Projectを束ねるもの
- Google Cloudの機能ではあるものの、Organizationが存在しないと作成できない
- Projectを束ねるもの
- Projects
- Resources
フォルダの作成。
$ gcloud resource-manager folders create \ --display-name=sample \ --organization=ORAGANIZATION-ID # 上位となるOrganization IDを指定
gcloud resource-manager folders create
各階層(Organization, Folder, Project, 一部のResource)を対象に、IAM Roleをメンバーに割り当てることができる。上位階層に割り当てられた権限は、下位の階層に継承される。
Organizationを対象に、IAM Roleをメンバーに割り当てる。
$ gcloud organization add-iam-policy-bindings ORGANIZATION-ID --member='user:zunko@goodbyegangster.com' --role='role/editor'
gcloud organization add-iam-policy-bindings
フォルダを対象に、IAM Roleをメンバーに割り当てる。
$ gcloud resource-manager folders add-iam-policy-bindings FOLDER-ID --member='user:akane@goodbyegangster.com' --role='role/editor'
gcloud resource-managers folders add-iam-policy-bindings
プロジェクトで API を有効にする
APIを有効化。
$ gcloud services enable storage.googleapis.com
Stackdriver ワークスペースをプロビジョニングする
プロジェクトの Cloud Monitoring 構成を変更する
1.2 課金構成を管理する。以下のような作業を行います。
請求先アカウントを作成する
プロジェクトを請求先アカウントにリンクする
$ gcloud beta billing projects link sample-123456 --billing-account=012345-012345-012345
gcloud beta billing projects link
課金の予算とアラートを設定する
budgetの作成。thresholdの値が100倍して登録される。JPYだからか。
$ gcloud alpha billing budgets create \ --display-name=sample-budget \ --billing-account=123456-123456-123456 \ --budget-amount=10000JPY \ --threshold-rule=percent=50 \ --threshold-rule=percent=75,basis=forecasted-spend
gcloud alpha billing budgets create
日 / 月単位の料金見積もりを目的として請求関連のエクスポートを設定する
BigQuery への Cloud Billing のエクスポート機能を使用することで、指定した BigQuery データセットに Google Cloud の詳細な課金データ(使用量、費用予測、料金データなど)を終日、自動的にエクスポートできます。
Cloud Billing データを BigQuery にエクスポートする
1.3 コマンドライン インターフェース(CLI)、具体的には Cloud SDK をインストール、構成する(例: デフォルト プロジェクトの設定)。
googleアカウントのクレデンシャルを、WEBベースで取得する。
$ gcloud auth login
gcloud configurationを新規追加する。
$ gcloud config configurations create sample
gcloud config configurations create
作成したconfiguration(現在アクティブなconfiguration)にprojectを紐付ける。
$ gcloud config set project sample-123456
作成したconfiguration(現在アクティブなconfiguration)にGoogleアカウントを紐付ける。
$ gcloud config set account zunko@goodbyegangster.com
作成したconfigurationにデフォルトリージョン・ゾーンを設定する。
$ gcloud config set compute/region asia-northeast1 $ gcloud config set compute/zone asia-northeast1-a
作成済みconfigurationの一覧を表示する。
$ gcloud config configurations list NAME IS_ACTIVE ACCOUNT PROJECT COMPUTE_DEFAULT_ZONE COMPUTE_DEFAULT_REGION sample True zunko@goodbyegangster.com sample-123456 asia-northeast1-a asia-northeast1
gcloud config configurations list
activeなconfigurationにスイッチする。
$ gcloud config configurations activate sample
gcloud config configurations activate
コマンド実行時に利用configurationを指定する方法。
$ gcloud compute instances list --configurations=sample
2. クラウド ソリューションの計画と構成
2.1 料金計算ツールを使用して GCP プロダクトの使用量を計画して見積もる
Google Cloud Pricing Calculator
2.2 コンピューティング リソースを計画、構成する。以下のような点を考察します。
ワークロードに適したコンピューティング サービス(例: Compute Engine、Google Kubernetes Engine、App Engine、Cloud Run、Cloud Functions)の選択
Googke Cloudサービス名 | サービス | AWSで相当するサービス |
---|---|---|
Google Compute Engine | IaaS | Amazon EC2 |
Google Kubernetes Engine | Managed Kubernetes Service | Amazon EKS |
Google App Engine | PaaS | AWS Elastic Beanstalk |
Google Cloud Run | Managed Container Service | AWS Fargate |
Google Cloud Function | FaaS | AWS Lambda |
プリエンプティブル VM とカスタム マシンタイプの適宜使用
プリエンプティブル・インスタンスとは
プリエンプティブル VM は、通常のインスタンスよりはるかに低価格で作成、実行できるインスタンスです。ただし、他のタスクがリソースへのアクセスを必要とする場合、Compute Engine がこのインスタンスを停止(プリエンプト)する可能性があります。プリエンプティブル インスタンスは Compute Engine の余剰のキャパシティを利用する機能であり、使用できるかどうかは利用状況に応じて異なります。
gcloud compute では、通常のインスタンスを作成する場合に使用するものと同じ instances create コマンドを使用しますが、--preemptible フラグを追加します。
$ gcloud compute instances create [INSTANCE_NAME] --preemptible
カスタム マシンタイプ
事前定義されたマシンタイプがニーズに合わない場合は、カスタムの仮想ハードウェア設定を使用して VM インスタンスを作成できます。具体的には、カスタム マシンタイプを効果的に利用して、vCPU の数とメモリ容量をカスタマイズした VM インスタンスを作成できます。カスタム マシンタイプは、汎用マシンタイプでのみ使用できます。カスタム マシンタイプを作成すると、E2、N2、N2D、または N1 マシンタイプ ファミリーからカスタム マシンタイプを効果的にデプロイできます。
$ gcloud compute instances create example-instance --custom-cpu=6 --custom-memory=3072MB --custom-vm-type=n2
2.3 データ ストレージ オプションを計画、構成する。以下のような点を考察します。
プロダクト(例: Cloud SQL、BigQuery、Cloud Spanner、Cloud Bigtable)の選択
Google Cloudサービス名 | サービス | AWSで相当するサービス |
---|---|---|
Cloud SQL | Managed Relational Database Service(MySQL, PostgreSQL, MS SQLServer) | Amazon RDS |
BigQuery | Data Warehouse | Amazon Redshift |
Cloud Spanner | 水平スケーリング可能な分散RDB | Aurora Serverless |
Cloud Bigtable | Managed 分散 NoSQL, KV型, Bigdata | ? Amazon Timestream |
ストレージ オプション(例: Standard、Nearline、Coldline、Archive)の選択
GCSのストレージクラスについて。
Storage Class | 最低保存期間(日) | ストレージ料金($) | クラスAオペレーション料金($) ※10000オペレーションあたり | 適するデータ |
---|---|---|---|---|
Standard | なし | 0.023 | 0.05 | 頻繁にアクセスされるデータ |
Nearline | 30 | 0.016 | 0.10 | 月に1回程度アクセスされるデータ |
Coldline | 90 | 0.006 | 0.10 | 四半期に1回程度アクセスされるデータ |
Archive | 365 | 0.0025 | 0.50 | 1年間に1回未満しかアクセスしないデータ |
2.4 ネットワーク リソースを計画、構成する。以下のようなタスクを行います。
負荷分散オプションの違いを見分ける
ロードバランサー種類 | トラフィックの種類 | クライアントIPの保持 | グローバルorリージョン | 負荷分散スキーム | 宛先ポート | プロキシorパススルー |
---|---|---|---|---|---|---|
External HTTP(S) | HTTP HTTPS |
x | グローバル(※) | EXTERNAL | HTTP: 80, 8080 HTTPS: 443 |
プロキシ |
Internal HTTP(S) | HTTP HTTPS |
x | リージョン | INTERNAL_MANAGED | HTTP: 80, 8080 HTTPS: 443 |
プロキシ |
SSL プロキシ | TCP SSLオフロード |
x | グローバル(※) | EXTERNAL | Google Cloudにより限定された複数ポート | プロキシ |
TCP プロキシ | TCP SSLオフロードなし |
x | グローバル(※) | EXTERNAL | Google Cloudにより限定された複数ポート | プロキシ |
External TCP/UDP Network | TCP UDP |
o | リージョン | EXTERNAL | 任意 | パススルー |
Internal TCP/UDP | TCP UDP |
o | リージョン | INTERNAL | 任意 | パススルー |
※プレミアムティアではグローバル、スタンダードティアでは実質的にリージョン
Network Service Tiers を使用すると、インターネット上のシステムと Google Cloud インスタンス間の接続を最適化できます。プレミアム ティアは Google のプレミアム バックボーンでトラフィックを配信し、スタンダード ティアは通常の ISP ネットワークを使用します。
ロードバランサー毎の機能一覧表。
可用性を考慮してネットワーク内のリソースのロケーションを決定する
Compute Engine のリージョン選択に関するベスト プラクティス
Cloud DNS を構成する
Cloud DNS は、高パフォーマンスで復元力を備えたグローバル ドメインネーム システム(DNS)サービスで、費用対効果の高い方法でグローバル DNS にドメイン名を公開します。
3. クラウド ソリューションのデプロイと実装
3.1 Compute Engine リソースをデプロイ、実装する。以下のようなタスクを行います。
Cloud Console と Cloud SDK(gcloud)を使用してコンピューティング インスタンスを起動する(例: ディスク、可用性ポリシー、SSH 認証鍵の割り当て)
$ gcloud compute instances create VM_NAME \ [--image=IMAGE | --image-family=IMAGE_FAMILY] \ --image-project=IMAGE_PROJECT \ --machine-type=MACHINE_TYPE \ --zone=asia-northeast1-a \ --subnet=default \ --network-tier=PREMIUM \ --boot-disk-size=30GB \ # ブートディスク --boot-disk-type=pd-ssd \ # ブートディスク --boot-disk-device-name=vm-name \ # ブートディスク --create-disk=mode=rw,size=100,type=projects/project-name/zones/us-central1-a/diskTypes/pd-balanced,name=add-disk,device-name=add-disk \ # 追加ディスク --maintenance-policy=(MIGRATE or TERMINATE) \ # 可用性ポリシー:onHostMaintenance [--no-restart-on-failure] \ # 可用性ポリシー:automaticRestart --metadata-from-file=./startup.sh # 起動スクリプトの指定
gcloud compute instances create
メタデータに渡すことで、起動スクリプトは直接コードを記述することも可能。
$ gcloud compute instances create VM_NAME \ --metadata startup-script='#! /bin/bash sudo su - apt update EOF'
GCEのディスクタイプ
利用可能なストレージ。
- 永続ディスク
- ゾーン永続ディスク
- リージョン永続ディスク
- リージョン内の2つのゾーンで同期レプリケーション
- ブートディスク利用不可
- ローカルSSD
- Cloud Storage バケット
- Filestore
- FilestoreをNFSマウントして利用
永続ディスクのディスクタイプ。
- 標準永続ディスク(pd-standard)
- HDD
- バランス永続ディスク(pd-balanced)
- SSD
- パフォーマンスとコストのバランスが良い
- SSD永続ディスク(pd-ssd)
- エクストリーム永続ディスク(pd-extreme)
- SSD
- 高パフォーマンス
- IOPSを指定可能
可能性ポリシー
onHostMaintenance
プロパティとautomaticRestart
プロパティを使ってインスタンスのメンテナンス動作と自動再起動を構成します。
- onHostMaintenance
- メンテナンス・イベントが発生時の動作を指定
- プロパティ値
- MIGRATE(default)
- TERMINATE
- automaticRestart
- インスタンス・クラッシュ時の動作を指定
- プロパティ値
- true(default)
- false
インスタンス テンプレートを使用して、自動スケーリングされるマネージド インスタンス グループを作成する
マネージド・インスタンス・グループ(MIG) は、単一のエンティティとして制御する仮想マシン(VM)インスタンスのグループです。MIG は、自動修復、負荷分散、自動スケーリング、自動更新、ステートフル ワークロードなどの機能をサポートしています。
マネージド・インスタンス・グループ(MIG)の種類。
- ステートレスMIG
- ステートレス サービスやバッチ ワークロード
- ウェブサイトのフロントエンド、キューからの画像処理など
- ステートレス サービスやバッチ ワークロード
- ステートフルMIG
- ステートフル アプリケーション
- でータベースやレガシー アプリケーションなど
- ステートフル アプリケーション
- リージョンMIG
- リージョン単位で分配
- ゾーンMIG
- ゾーン単位で分配
ゾーン分配の、ステートレスMIGの作成。
$ gcloud compute instance-groups managed create sample-mig \ --size=2 \ --template=sample-template \ --zone=asia-northeast1-b
gcloud compute instance-groups managed create
インスタンス用のカスタム SSH 認証鍵を生成、アップロードする
SSH認証鍵の適用範囲。
プロジェクト全体SSH認証鍵
の登録。
$ gcloud compute project-info add-metadata --metadata-from-file ssh-keys=[LIST_PATH]
LIST_PATH
にSSH公開鍵のPATHを指定して登録する訳だが、個別でSSH公開鍵を登録できないため、コンソールからやるほうが良い。
gcloud compute project-info add-metadata
VMインスタンスでの、プロジェクト全体SSH認証鍵
の利用制御。
$ gcloud compute instances add-metadata sample-instance --metadata=block-project-ssh-keys=[TRUE/FALSE]
VMインスタンス作成時にも、--metadata
オプションを付与して設定できる。
gcloud compute instances add-metadata
$ gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=[LIST_PATH]
プロジェクト全体と同じくLIST_PATH
にSSH公開鍵のPATHを指定して登録する訳だが、こちらも個別でSSH公開鍵を登録できないため、コンソールからやるほうが良い。
VM で Stackdriver Monitoring と Stackdriver Logging の構成を行う
Stackdriverは、Google Cloud Operation Suite
という後継サービスになっている。Google Cloud Operation Suite内に、メトリクス管理用のCloud Monitoring
、ログ管理用のCloud Logging
等のサービスがある。
Google Cloud のオペレーション スイート(旧称 Stackdriver)
Cloud Monitoringの構成
Cloud Monitoring Agentを利用する。標準のOSイメージには同梱済み。インストール時の初期設定のまま、基本的なOSのメトリクスを取得できる。
NginxやRedis等の、特定のミドルウェア向けのモニタリング・プラグインが用意されている。プラグインを有効にすることで、対象のミドルウェアのメトリクスを取得可能となる。
Cloud loggingの構成
Cloud Logging Agentを利用する。Cloud Logging Angetはfluentd
を基に開発されている。そのためAgentのコンフィグ設定は、fluentdの設定方法と同じ。
syslogやNginxログ等向けのコンフィグ設定が用意されている。
デフォルト外のログを対象としたい場合は、fluentd利用時と同じ。
- fluentd向けに用意されているpluginを利用する
- fluetndのルールに従いコンフィグを編集する
コンピューティングの割り当てを評価し、割り当ての引き上げをリクエストする
モニタリングとロギング用に Stackdriver Agent をインストールする
モニタリング用
Cloud Monitoring Agentのインストール方法。
- 候補1: OSにログインし、ダウンロードしたインストールモジュールを実行
- 候補2: コンソールのCloud Logging Dashboard画面より、対象VMインスタンスにインストールを実行
- 実際は、Cloud Shell上でインストールスクリプトを実行する感
単一の VM に Cloud Monitoring エージェントをインストールする
ロギング用
Cloud Logging Agentのインストール方法。
- 候補1: OSにログインし、ダウンロードしたインストールモジュールを実行
- 候補2: コンソールのCloud Logging Dashboard画面より、対象VMインスタンスにインストールを実行
- 実際は、Cloud Shell上でインストールスクリプトを実行する感
3.2 Google Kubernetes Engine リソースをデプロイ、実装する。以下のようなタスクを行います。
Google Kubernetes Engine クラスタをデプロイする
GKEクラスタの種類。
- Autopilot
- ワーカーノードも含めてマネージド
- Standard
- ワーカーノードは利用者側で、ある程度管理
Standardクラスタの可用性。
Standardクラスの種類 | Controle Planeのゾーン配置 | Worker Nodeのゾーン配置 |
---|---|---|
シングルゾーン・クラスタ | シングル | シングル |
マルチゾーン・クラスタ | シングル | マルチ |
リージョン・クラスタ | マルチ | マルチ |
スタンダード・リージョン・クラスタの作成。
東京リージョンのdefaultネットワークに、ワーカーノード数を指定して実行(3つのゾーンに2台づつ配置)。
$ gcloud container clusters create "cluster-sample" \ --release-channel=regular \ # リージョンクラスタを指定 --region=asia-northeast1 \ --num-nodes=2 \ --enable-autoscaling \ # 自動スケーリング・クラスタの作成(この方法のほか、ノードプール側でも指定できる) --min-nodes=1 \ --max-nodes=3
gcloud container clusters create
Pod を使用して Google Kubernetes Engine にコンテナ アプリケーションをデプロイする
まず、ローカルにあるコンテナイメージをGCRへpush。
GCRへ認証用のコマンドを実行。Docker Credential Helper用のコンフィグを生成してくれる。
$ gcloud auth configure-docker
コンテナイメージを、GCR用レジストリ用ネームフォーマット(HOSTNAME/PROJECT-ID/IMAGE:tag
)でタギングする。
$ docker tag nginx:latest asia.gcr.io/sample-123456/nginx:latest
GCRにpushする。
$ docker push asia.gcr.io/sample-123456/nginx
ローカルのkubeconfigに、作成したGKE Clusterへの接続情報を追加する。
$ gcloud container clusters get-credentials cluster-sample --region=asia-northeast1
gcloud container clusters get-crendentials
GCRにpushしたイメージを利用して、Podを作成。
$ kubectl run sample --image=asia.gcr.io/sample-123456/nginx:latest
Google Kubernetes Engine アプリケーションのモニタリングとロギングを構成する
GKE 用 Google Cloud のオペレーション スイートの概要
- Operation Suite内のCloud LoggingとCloud Monitoringに、GKE Cluster内のログ・メトリクスが統合されている
- Cloud Monitoring内で、GKE用ダッシュボードが提供されている
統合されるログ。
- システムログ
- GKE Clusterのログ
- アプリケーションログ
- コンテナ内の
STDOUT
とSTDERR
- コンテナ内の
3.3 App Engine リソース、Cloud Run リソース、Cloud Functions リソースをデプロイ、実装する。以下のようなタスクを行います(該当する場合)。
アプリケーションをデプロイし、スケーリング構成、バージョン、トラフィック分割を更新する
App Engine リソース
App Engine環境の種類。
- スタンダード環境
- マネージドなサンドボックス環境で実行される
- 暗黙的にコンテナ化されている
- マネージドなサンドボックス環境で実行される
- フレキシブル環境
プロジェクトフォルダ内に用意されたapp.yaml
構成ファイルを参照される形で、アプリケーションがデプロイされる。
App Engine アプリの設定は app.yaml ファイルで構成します。app.yaml ファイルには、ランタイムや最新バージョンの ID など、アプリコードについての情報も記載されています。
スタンダード環境のサービスをデプロイ。プロジェクトフォルダのルートフォルダでコマンド実行すると、Code Buildが自動実行され、サービス(アプリケーション)がデプロイされる。
$ gcloud app deploy # コマンド実行後、デプロイ先のRegionやProjectの選択表示が出てくる
サービスの表示(デプロイしたサービスのWEB画面を表示してくれる)。
$ gcloud app browse
gcloud app deploy
を再度実行することで、サービスの更新(バージョンの更新)となる。対象サービスをapp.yaml
構成ファイルに定義することで、異なるプロジェクトフォルダからサービスを更新することも可能。
$ gcloud app versions list SERVICE VERSION.ID TRAFFIC_SPLIT LAST_DEPLOYED SERVING_STATUS default 20210601t162405 0.00 2021-06-01T16:25:20+09:00 SERVING default 20210601t181314 1.00 2021-06-01T18:14:38+09:00 SERVING
複数バージョン作成時、トラフィックを「どのように移行するか」、「どのように分割するか」を設定できる。
新規バージョン作成時のデフォルトでは、新しいバージョンに即時トラフィックは移行されるが、app.yaml
構成ファイルにinbound_services
要素を追加することで、段階的なトラフィック移行が可能となる。
以下コマンドを実行することで、バージョン間でトラフィックを分割できる。
$ gcloud app services set-traffic default --splits=20210601t181314=0.5,20210601t162405=0.5 --split-by=ip --quiet
20210601t181314
はバージョン名。バージョン名もapp.yaml内で指定できる。
gcloud app services set-traffic
Cloud Run リソース
GCR上にあるコンテナイメージを利用して、サービス(k8sでのPod、ECSでのtaskに相当)のデプロイ。
$ gcloud run deploy sample --image=asia.gcr.io/sample-123456/nginx:latest \ --platform=managed \ --region=asia-northeast1 \ --allow-unauthenticated \ --port=80 \ --revision-suffix=v1
スケーリング構成を変更するには、上記のgcloud run deploy
コマンドでスケーリング系パラメーターを付与して実行するか、下記のgcloud run services update
コマンドを実行する。新規リビジョンが作成される。
$ gcloud run services update sample \ --platform=managed \ --region=asia-northeast1 \ --max-instances=3 \ # ここ --revision-suffix=v2
リビジョンの一覧。
$ gcloud run revisions list \ --service=sample \ --platform=managed \ --region=asia-northeast1 REVISION ACTIVE SERVICE DEPLOYED DEPLOYED BY ✔ sample-v2 yes sample 2021-06-01 13:54:33 UTC zunko@goodbyegangster.com ✔ sample-v1 sample 2021-06-01 13:37:52 UTC zunko@goodbyegangster.com
スケーリング系パラメーター以外の、コンテナで利用するリソース量やコンテナ環境変数、ENTRYPOINTの指定もgcloud run services update
で同様に更新できる。
複数リビジョン間で、トラフィックの移行、段階的なトラフィックの移行、トラフィックの分割を行える。
リビジョン間でトラフィックの分割を実行。
$ gcloud run services update-traffic sample \ --platform=managed \ --region=asia-northeast1 \ --to-revisions=sample-v1=50,sample-v2=50
gcloud run services update-traffic
Cloud Functions リソース
クイックスタート: gcloud コマンドライン ツールの使用
ローカル上にあるPythonソースコードを、Cloud Functionの関数にデプロイする。デプロイしたいコードのあるディレクトリで実行。
$ gcloud functions deploy sample_function_1 \ --runtime=python38 \ --entry-point=hello_get \ --trigger-http \ --allow-unauthenticated \ --region=asia-northeast1
HTTPトリガーでの、作成した関数の実行。
$ curl https://asia-northeast1-sample-123456.cloudfunctions.net/sample_function_1 Hello World!
gcloud経由にて、作成した関数の実行。
$ gcloud functions call sample_function_1 --region=asia-northeast1 executionId: p2zgio5uo7l8 result: Hello World!
Google Cloud イベント(例: Cloud Pub/Sub イベント、Cloud Storage オブジェクト変更通知イベント)を受け取るアプリケーションをデプロイする
Cloud Pub/Sub イベントを受け取るアプリケーション(Cloud Function)をデプロイ
Cloud Pub/Subのpublishイベントをトリガーとして、実行されるCloud Funtion関数の作成。
$ gcloud functions deploy hello_pubsub \ # デプロイするコード内でイベント受け取る処理を書いてあげる --runtime=python38 \ --trigger-topic sample-topic # Cloud Pub/Subのtopic名を指定
Cloud Storage オブジェクト変更通知イベントを受け取るアプリケーション(Cloud Function)をデプロイ
Cloud Storageの通知イベントをトリガーとして、実行されるCloud Function関数の作成。
$ gcloud functions deploy hello_gcs \ # デプロイするコード内でイベント受け取る処理を書いてあげる --runtime=python38 \ --trigger-resource=pekomiko \ # Cloud StorageのBucket名を指定 --trigger-event=google.storage.object.finalize # トリガーとするイベントを指定
3.4 データ ソリューションをデプロイ、実装する。以下のようなタスクを行います。
プロダクト(例: Cloud SQL、Cloud Datastore、BigQuery、Cloud Spanner、Cloud Pub/Sub、Cloud Bigtable、Cloud Dataproc、Cloud Dataflow、Cloud Storage)を使用してデータシステムを初期化する
Cloud SQL
PostgreSQLインスタンスの作成。
$ gcloud sql instances create sample-instance \ --database-version=POSTGRES_13 \ --availability-type=regional \ # high availability構成を指定 --zone=asia-northeast1-a \ --secondary-zone=asia-northeast1-b \ --replica-type=FAILOVER \ --cpu=1 \ --memory=4096MB \ --storage-size=10GB \ --storage-type=SSD \ --storage-auto-increase \ --assign-ip \ # Public IPの利用 --authorized-networks=0.0.0.0/0 # 承認済みネットワークの指定
cloudsqlsuperuser
権限をもつDBユーザーのパスワードを設定。
Cloud SQL を使用して作成されたユーザーには、cloudsqlsuperuser 役割と関連付けられている権限(CREATEROLE、CREATEDB、LOGIN)があります。これらのユーザーによって作成されたユーザーは、データベース接続権限を持つことができます。これにより、ユーザーが削除されるのを防ぐことができます。
$ gcloud sql users set-password postgres \ --instance=sample-instance \ --prompt-for-password
Postgresを作成した場合、potgresという名前のユーザーが自動的に作成されている。
作成したインスタンスに接続する。Cloud SQLインスタンス作成時に、自動的にpostgres
という名前のデータベースが作成されている。
$ psql -h 34.84.43.99 -p 5432 -U postgres -d postgres Password for user postgres: SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. postgres=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ---------------+-------------------+----------+------------+------------+----------------------------------------- cloudsqladmin | cloudsqladmin | UTF8 | en_US.UTF8 | en_US.UTF8 | postgres | cloudsqlsuperuser | UTF8 | en_US.UTF8 | en_US.UTF8 | template0 | cloudsqladmin | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/cloudsqladmin + | | | | | cloudsqladmin=CTc/cloudsqladmin template1 | cloudsqlsuperuser | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/cloudsqlsuperuser + | | | | | cloudsqlsuperuser=CTc/cloudsqlsuperuser (4 rows)
Cloud SQL Auth Proxyについて。
Cloud SQL Auth Proxy を使用すると、承認済みネットワークや SSL の構成を必要とせずに、安全にインスタンスへアクセスできます。
Cloud SQL Auth Proxy を使用して Cloud SQL インスタンスにアクセスする利点は次のとおりです。
・安全な接続: Cloud SQL Auth Proxy は、TLS 1.2 と 128 ビット AES 暗号を使用して、データベースとの間で送受信されるトラフィックを自動的に暗号化します。クライアントとサーバーの ID の確認には、SSL 証明書が使用されます。
・簡単な接続管理: Cloud SQL Auth Proxy が Cloud SQL との認証を処理するので、静的な IP アドレスを提供する必要がなくなります。
Cloud SQL側に用意されたProxy Server機能と、ローカルPCにインストールしたProxy Clientが通信することで、Public IPのないCloud SQLインスタンスであっても接続できるようになる。Proxy Server/Client間の認証には、サービスアカウントが利用される。
Cloud Datastore(Firestore)
Firestoreは、Datastoreの次期メジャーバージョン。ネイティブモード
とDatastoreモード
がある。
コンソールを利用した基本的な操作方法。
データの操作は、各言語向けのライブラリまたはAPI経由で行うことになる。またSQLライクな検索を行えるGQLというクエリ言語を利用できる。
概念。
- namespace
- その名の通り、名前空間
- kind
- namespaceに紐づく
- entityのproperty(スキーマに相当)を定義したもの(と言ってもNoSQLであるため緩い)
- entity
- kindに紐づく
- 実際のデータオブジェクト
BigQuery
データセット(RDBにおけるテーブルスペースに相当)の作成。
$ bq --location=asia-northeast1 mk --dataset sample-123456:sample
スキーマ(テーブル定義)を指定しつつ、テーブルの作成。
$ bq mk --table \ sample-123456:sample.names_2014 \ name:string,gender:string,count:integer
作成したテーブルに、ローカル上のCSVファイルをインポートする。インポートしたサンプルデータ
$ bq load \ --source_format=CSV \ sample-123456:sample.names_2014 \ ./names/yob2014.txt
データの検索。
$ bq --location=asia-northeast1 query \ --use_legacy_sql=false \ 'SELECT name, gender, count FROM `sample-123456.sample.names_2014` limit 3' Waiting on bqjob_r72dc1deb8a410791_00000179d01d76f0_1 ... (0s) Current status: DONE +--------+--------+-------+ | name | gender | count | +--------+--------+-------+ | Emma | F | 20943 | | Olivia | F | 19823 | | Sophia | F | 18630 | +--------+--------+-------+
Cloud Spanner
Spannerインスタンスの作成。
$ gcloud spanner instances create test-instance \ --config=regional-asia-northeast1 \ --description="Test Instance" \ --nodes=1
gcloud spanner instances create
作成したSpannerインスタンス上に、データベースの作成。
$ gcloud spanner databases create example-db --instance=test-instance
gcloud spanner databases create
テーブル(スキーマ)の作成。
$ gcloud spanner databases ddl update example-db --instance=test-instance \ --ddl='CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId)' $ $ gcloud spanner databases ddl update example-db --instance=test-instance \ --ddl='CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX)) PRIMARY KEY (SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE'
Cloud Spannerのデータモデルと、スキーマ設計時の考慮。
gcloud spanner databases ddf update
データの挿入。
$ gcloud spanner rows insert --table=Singers --database=example-db --instance=test-instance \ --data=SingerId=1,FirstName=Marc,LastName=Richards $ $ gcloud spanner rows insert --table=Singers --database=example-db --instance=test-instance \ --data=SingerId=2,FirstName=Catalina,LastName=Smith $ $ gcloud spanner rows insert --table=Albums --database=example-db --instance=test-instance \ --data=SingerId=1,AlbumId=1,AlbumTitle="Total Junk" $ $ gcloud spanner rows insert --table=Albums --database=example-db --instance=test-instance \ --data=SingerId=2,AlbumId=1,AlbumTitle="Green"
データの検索。
$ gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql='SELECT SingerId, AlbumId, AlbumTitle FROM Albums' SingerId AlbumId AlbumTitle 1 1 Total Junk 2 1 Green
gcloud spanner databases execute-sql
Cloud Pub/Sub
クイックスタート: gcloud コマンドライン ツールの使用
トピックの作成。
$ gcloud pubsub topics create sample-topic
サブスクリプションの作成。
$ gcloud pubsub subscriptions create sample-sub \ --topic=sample-topic \ --ack-deadline=10 \ --expiration-period=30d \ --message-retention-duration=7d
gcloud pubsub subscriptions create
gcloudコマンドラインにて、メッセージをパブリッシュ。
$ gcloud pubsub topics publish sample-topic \ --message="Hello World" \ --attribute="key=value"
gcloudコマンドラインにて、メッセージを受信(pull)。
$ gcloud pubsub subscriptions pull sample-sub --auto-ack ┌─────────────┬──────────────────┬──────────────┬────────────┬──────────────────┐ │ DATA │ MESSAGE_ID │ ORDERING_KEY │ ATTRIBUTES │ DELIVERY_ATTEMPT │ ├─────────────┼──────────────────┼──────────────┼────────────┼──────────────────┤ │ Hello World │ 2489941872487215 │ │ key=value │ │ └─────────────┴──────────────────┴──────────────┴────────────┴──────────────────┘
gcloud pubsub subscriptions pull
Cloud Bigtable
$ gcloud bigtable instances create sample-instance \ --display-name="sample instance" \ --cluster-config=id=sample-cluster-id-1,zone=asia-northeast1-a,nodes=1 \ # 東京と大阪リージョンでレプリケーション設定 --cluster-config=id=sample-cluster-id-2,zone=asia-northeast2-a,nodes=1 \ --cluster-storage-type=ssd
gcloud bigtable instances create
Bigtable操作用のサービスアカウントの作成。下記のcbtツール
にて利用される。
cbtツール
のコンフィグファイルを設定。
cbt ツールは、Cloud Bigtable でさまざまなオペレーションを行うためのコマンドライン インターフェースです。
$ echo project = sample-123456 > ~/.cbtrc $ echo instance = sample-instance >> ~/.cbtrc
テーブルの作成。
$ cbt createtable my-table
テーブルに列ファミリーの追加。
$ cbt createfamily my-table cf1
下は、Bigtableのデータモデルについての説明資料。
データの書き込み。
$ cbt set my-table r1 cf1:c1=test-value1 cf1:c2=test-value2
データの読み取り。
$ cbt read my-table ---------------------------------------- r1 cf1:c1 @ 2021/06/04-16:45:23.776000 "test-value1" cf1:c2 @ 2021/06/04-16:45:23.776000 "test-value2"
Cloud Dataproc
クイックスタート: gcloud コマンドライン ツールの使用
# 実際はすごい量のパラメーターがあるが、下はdefault値で作成している例 $ gcloud dataproc clusters create sample-cluster --region=asia-northeast1
gcloud dataproc clusters create
サンプルのjarファイルを利用してジョブの送信(円周率の計算)。
$ gcloud dataproc jobs submit spark \ --cluster=sample-cluster \ --region=asia-northeast1 \ --class=org.apache.spark.examples.SparkPi \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \ -- 1000
gcloud dataproc jobs submit spark
Cloud Dataflow
Pythonを利用して、パイプラインの実行をする。
Dataflowパイプライン実行用のサービスアカウントを作成する。下記のApache Beam SDK
にて利用する。
Google Cloud 上のパイプラインのセキュリティと権限
Apache Beam SDK
を利用して、サンプルとなるPythonコードのパイプラインをデプロイする。サンプルコード:apache_beam.examples.wordcount
$ python -m apache_beam.examples.wordcount \ --region asia-northeast1 \ --input gs://dataflow-samples/shakespeare/kinglear.txt \ --output gs://mikochi/results/outputs \ --runner DataflowRunner \ --project sample-123456 \ --temp_location gs://mikochi/tmp/
実行されたパイプライン処理の結果が、上記ouputパラメーターに指定したバケットに出力されている。
Cloud Storage
バケットの作成。
$ gsutil mb \ -b on \ # バージョニングの有効化 -c Standard \ -l asia-northeast1 \ -p sample-123456 \ --retention 500d \ gs://pekomiko
オブジェクトのアップロード・ダウンロード。コピー。
$ gsutil cp ./kitten.png gs://pekomiko/sample/
バケットレベルに対するIAM権限を用いたアクセス制御の設定。
$ gsutil iam ch allUsers:objectViewer gs://pekomiko # バケットを一般公開する(https://storage.googleapis.com/pekomiko/xxx.jpg)
$ gsutil iam ch user:kiritan@goodbyegangster.com:objectCreator gs://pekomiko
顧客指定の暗号鍵を利用してアップロードする方法(コンソールでの操作不可)。
$ gsutil cp -o "GSUtil:encryption_key=YOUR_ENCRYPTION_KEY" gs://pekomiko/aaaa.jpg # -oフラグで鍵情報を与える
この方法以外に、Boto構成ファイルに鍵情報を組み込む方法もある。
データを読み込む(例: コマンドラインによるアップロード、API による転送、インポート / エクスポート、Cloud Storage からのデータの読み込み、Cloud Pub/Sub へのデータのストリーミング)
データ転送系サービス。
Google Cloud サービス | 詳細 | AWSで相当するもの |
---|---|---|
Transfer Service for On Premises Data | GCSへデータ転送してくれるManaged Service | AWS DataSync |
Transfer Appliance | GCSへオフラインでデータ転送してくれるアプライアンス | Snowball |
BigQuery Data Transfer Service | SaaSやGCS, S3, Redshift, TeradataからBigQueryにデータ転送するサービス | AppFlow |
Clud Scheduler | Managed Cron サービス | Data Pipeline |
Transfer Service for On Premises Data の概要 Transfer Appliance の概要 BigQuery Data Transfer Service の概要 Cloud Scheduler
3.5 ネットワーキング リソースをデプロイ、実装する。以下のようなタスクを行います。
サブネットを持つ VPC(例: カスタムモード VPC、共有 VPC)を作成する
Google Cloudにおけるネットワークリソースの範囲。
ネットワークリソース | 範囲 | 備考 |
---|---|---|
VPC | グローバル | |
サブネット | リージョン | Zoneをまたいで作成される |
Firewall Rule | グローバル | VPCにアタッチされる |
Route | グローバル | VPCにアタッチされる |
VPCの種類。
カスタムモードVPCの作成。
$ gcloud compute networks create custom-vpc \ --subnet-mode=custom \ # 自動モードVPCの場合は`Auto`を指定 --enable-flow-logs \ # VPCフローログを有効化 --bgp-routing-mode=regional
gcloud compute networks create
共有VPCとは。
共有 VPC を使用して、組織は複数のプロジェクトから共通の Virtual Private Cloud(VPC)ネットワークにリソースを接続できるため、そのネットワークの内部 IP を使用して、安全で効率的な相互通信ができます。
例とユースケースの図がわかりやすい。
共有VPCの作成。
VPCが同一組織に属していない場合の補足。VPC ネットワーク ピアリング
について。
Google Cloud VPC ネットワーク ピアリングでは、2 つの Virtual Private Cloud(VPC)ネットワークが同じプロジェクトまたは同じ組織に属しているかにかかわらず、内部 IP アドレス接続できます。
VPC ネットワーク ピアリングを使用すると、異なる VPC ネットワーク内のワークロードが内部で通信できるように、VPC ネットワークを接続できます。トラフィックは Google のネットワーク内に留まり、公共のインターネットを経由することはありません。
VPCフローログについて。
VPC フローログには、VM インスタンスによって送受信されたネットワーク フローのサンプルが記録されます。これには GKE ノードとして使用されるインスタンスも含まれます。これらのログは、ネットワーク モニタリング、フォレンジック、リアルタイム セキュリティ分析、および費用の最適化に使用できます。
収集された結果はCloud Loggingにて参照できる。
カスタム ネットワーク構成(例: 内部専用 IP アドレス、限定公開の Google アクセス、静的外部 IP アドレスとプライベート IP アドレス、ネットワーク タグ)を持つ Compute Engine インスタンスを起動する
$ gcloud compute instances create instance-static-private-ip \ --subnet=sample-subnet \ --no-address \ --private-network-ip=192.168.0.10
特定の内部 IP アドレスを使用して VM インスタンスを作成する
限定公開のGoogleアクセス
を利用するVMインスタンスの作成。実際は、限定公開のGoogleアクセス
はサブネットを単位に有効/無効にすることができ、有効とされたサブネットに配置されたVMインスタンスが、その機能を利用できる。
デフォルトでは、Compute Engine VM がネットワーク インターフェースに割り当てられた外部 IP アドレスを持たない場合、他の内部 IP アドレスの宛先にのみパケットを送信できます。VM のネットワーク インターフェースが使用するサブネットで限定公開の Google アクセスを有効にすると、Google API とサービスで使用される一連の外部 IP アドレスに VM を接続できます。
$ gcloud compute networks subnets update sample-subnet \ --region=asia-northeast1 \ --enable-private-ip-google-access
静的外部IPアドレス
と静的内部IPアドレス
を利用するVMインスタンスの作成。
$ gcloud compute instances create instance-both-ip \ --subnet=sample-subnet \ --address=sample-external-ip \ --private-network-ip=192.168.0.10
タグは、Compute Engine 仮想マシン(VM)インスタンスやインスタンス テンプレートなどのリソースのタグフィールドに追加される文字からなる文字列です。タグは個別のリソースではないため、個別に作成することはできません。その文字列を持つすべてのリソースには、そのタグがあると考えられます。タグを使用して、特定の VM インスタンスに適用されるファイアウォール ルールやルートを作成できます。
$ gcloud compute instances create instance-with-tag \ --subnet=sample-subnet \ --tags='sample-tag'
VPC 用の上り(内向き)および下り(外向き)ファイアウォール ルール(例: IP サブネット、タグ、サービス アカウント)を作成する
Implied deny ingress rule
について。
--direction="INGRESS" \ --action="DENY" \ --source-ranges="0.0.0.0/0" \ --priority="65535" \
Implied allow egress rule
について。
--direction="EGRESS" \ --action="ALLOW" \ --destination-ranges="0.0.0.0/0" \ --priority="65535" \
上り(内向き)のFirewall Ruleを作成。
$ gcloud compute firewall-rules create allow-http-rule \ --network=custom-vpc \ --direction=INGRESS \ --target-tags=web-server \ --source-ranges=0.0.0.0/0 \ --action=ALLOW \ --rules=tcp:80 \ --priority=1000 \ --no-enable-logging
下り(外向き)のFirewall Ruleを作成。
$ gcloud compute firewall-rules create deny-all \ --network=custom-vpc \ --direction=EGRESS \ --destination-ranges=0.0.0.0/0 \ --action=DENY \ --rules=tcp \ --priority=1000 \ --no-enable-logging
SourceとTargetの指定にサービスアカウントを利用して作成。
$ gcloud compute firewall-rules create allow-sa-db \ --network=custom-vpc \ --direction=INGRESS \ --target-service-accounts=db-server@sample-123456.iam.gserviceaccount.com \ --source-service-accounts=app-server@sample-123456.iam.gserviceaccount.com \ --action=ALLOW \ --rules=tcp:1443 \ --priority=1000 \ --no-enable-logging
gcloud compute firewall-rules create
Cloud VPN を使用して Google VPC と外部ネットワークとの間の VPN を作成する
Cloud VPN は、IPsec VPN 接続を使用してピア ネットワークを Virtual Private Cloud(VPC)ネットワークへ安全に接続します。2 つのネットワーク間のトラフィックは、一方の VPN ゲートウェイで暗号化され、もう一方の VPN ゲートウェイで復号されます。これにより、インターネットでデータをやり取りする際もデータが保護されます。Cloud VPN の 2 つのインスタンスを相互に接続することもできます。
HA(High Availability) VPNゲートウェイを設定するための一連の作業。
ピア VPN ゲートウェイへの HA VPN ゲートウェイの作成
$ gcloud compute vpn-gateways create sample-vpn-gateway \ --network=custom-vpc \ --region=asia-northeast1
gcloud compute vpn-gateways create
対向VPNルーターの定義となるピアVPNゲートウェイ
の作成。
$ gcloud compute external-vpn-gateways create sample-peer-vpn-gateway \ --interfaces 0=219.167.191.210,1=219.167.191.211
gcloud compute external-vpn-gateways create
VPCにアタッチされる仮想ルーターであるCloud Router
の作成。
$ gcloud compute routers create sample-router \ --region=asia-northeast1 \ --network=custom-vpc \ --asn=64512
VPNトンネルの設定。
$ gcloud compute vpn-tunnels create sample-vpn-tunnel1 \ --peer-external-gateway=sample-peer-vpn-gateway \ --peer-external-gateway-interface=0 \ --region=asia-northeast1 \ --ike-version=2 \ --shared-secret=ILPltuJmR9FNf/D6rd1j/kd3Qju+h5m8 \ --router=sample-router \ --vpn-gateway=sample-vpn-gateway \ --interface=0
$ gcloud compute vpn-tunnels create sample-vpn-tunnel2 \ --peer-external-gateway=sample-peer-vpn-gateway \ --peer-external-gateway-interface=1 \ --region=asia-northeast1 \ --ike-version=2 \ --shared-secret=xVDESZGI8WkiSFqOMoOCVmCc96iugfj7 \ --router=sample-router \ --vpn-gateway=sample-vpn-gateway \ --interface=1
gcloud compute vpn-tunnels create
BGPセッションの設定。
$ gcloud compute routers add-interface sample-router \ --interface-name=sample-bgp-session1 \ --mask-length=30 \ --vpn-tunnel=sample-vpn-tunnel1 $ $ gcloud compute routers add-bgp-peer sample-router \ --peer-name=sample-bgp-session1 \ --peer-asn=65000 \ --interface=sample-bgp-session1 \ --region=asia-northeast1
$ gcloud compute routers add-interface sample-router \ --interface-name=sample-bgp-session2 \ --mask-length=30 \ --vpn-tunnel=sample-vpn-tunnel2 $ $ gcloud compute routers add-bgp-peer sample-router \ --peer-name=sample-bgp-session2 \ --peer-asn=65001 \ --interface=sample-bgp-session2 \ --region=asia-northeast1
gcloud compute routers add-interface
gcloud compute routers add-bgp-peer
Cloud VPN以外の拠点間ネットワーク接続方法。
Google Cloud サービス | 詳細 | AWSで相当するサービス |
---|---|---|
Cloud Interconnect - Dedicated Interconnect | オンプレミスとGoogle Cloud間の物理的接続サービス | DirectConnect 専有型 |
Cloud Interconnect - Partner Interconnect | サービス・プロバイダ経由にてDedicated Interconnectを利用できるサービス | DirectConnect 共有型 |
アプリケーションへのネットワーク トラフィックを分散するロードバランサ(例: グローバル HTTP(S) ロードバランサ、グローバル SSL プロキシ ロードバランサ、グローバル TCP プロキシ ロードバランサ、リージョン ネットワーク ロードバランサ、リージョン内部ロードバランサ)を作成する
グローバル HTTP(S) ロードバランサの作成
External HTTP Load Balancerの作成手順を確認。
Managed Instance Group(MIG)の作成。
$ gcloud compute instance-groups managed create backend-web \ --template=sample-template \ --size=1 \ --zones=asia-northeast1-a,asia-northeast1-b
作成したMIGに名前付きポートの定義
を設定。名前付きポートの定義は、Load Balancingサービスで利用するメタ情報のこと。
Named ports are key:value pairs metadata representing the service name and the port that it's running on. Named ports can be assigned to an instance group, which indicates that the service is available on all instances in the group. This information is used by the HTTP Load Balancing service.
$ gcloud compute instance-groups set-named-ports backend-web \ --named-ports=web:80 \ --region=asia-northeast1
gcloud compute instance-group set-named-ports
ファイアーウォールルールの作成。Google Cloudヘルスチェックシステム(130.211.0.0/22,35.191.0.0/16)からのトラフィック用。
$ gcloud compute firewall-rules create fw-allow-health-check \ --network=default \ --action=allow \ --direction=INGRESS \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp:80
$ gcloud compute addresses create lb-ip --ip-version=IPV4 --global
ヘルスチェック定義の作成。
$ gcloud compute health-checks create http http-basic-check --port=80 --global
gcloud compute health-checks create http
バックエンドサービスの作成。作成した名前付きポートの定義
とヘルスチェック定義
を紐付ける。
$ gcloud compute backend-services create backend-web-service \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
gcloud compute backend-service create
作成したバックエンドサービスにMIGを紐付ける。
$ gcloud compute backend-services add-backend backend-web-service \ --instance-group=backend-web \ --instance-group-region=asia-northeast1 \ --global
gcloud compute backend-services add-backend
URLマップの作成。作成したバックエンドサービスを紐付ける。
$ gcloud compute url-maps create web-map-http --default-service=backend-web-service
gcloud compute url-maps create
HTTPプロキシの作成。作成したURLマップを紐付ける。
$ gcloud compute target-http-proxies create http-proxy --url-map=web-map-http
gcloud compute target-http-proxies
グローバル転送ルールの作成。予約した静的外部IPと作成したHTTPプロキシを紐付け、待ち受けポートを宣言する。
$ gcloud compute forwarding-rules create http-rule \ --address=lb-ip \ --target-http-proxy=http-proxy \ --ports=80 \ --global
gcloud compute forwarding-rules
上で作ったロードバランサーを、HTTPS化(External HTTPS Load Balancer)する手順を確認。
$ gcloud compute ssl-certificates create sample-cert \ --domains=sample.goodbyegangster.com \ --global
gcloud compute ssl-certificates create
HTTPSプロキシの作成。URLマップのほか、利用するSSL証明書情報を付与する。
$ gcloud compute target-https-proxies create https-proxy \ --url-map=web-map-http \ --ssl-certificates=sample-cert \ --global-ssl-certificates \ --global
gcloud compute target-https-proxies create
グローバル転送ルールの作成。
$ gcloud compute forwarding-rules create https-rule \ --address=lb-ip \ --target-https-proxy=https-proxy \ --ports=443 \ --global
gcloud compute forwarding-rules create
グローバル SSL プロキシ ロードバランサの作成
グローバルHTTPSロードバランサーと同じく、以下の設定を実施。
HTTPSプロキシの代わりに、SSLプロキシを作成。まず、SSLプロキシに紐付けるポリシーを作成する。
$ gcloud compute ssl-policies create my-ssl-policy \ --profile=MODERN \ --min-tls-version=1.0
gcloud compute ssl-policies create
SSLプロキシを作成。上記で作成したSSLポリシーのほか、SSL証明書情報を付与する。
$ gcloud compute target-ssl-proxies create my-ssl-lb-target-proxy \ --backend-service=my-ssl-lb \ --ssl-certificates=sample-cert \ --ssl-policy=my-ssl-policy \ --proxy-header=NONE
gcloud compute target-ssl-proxies create
グローバル転送ルールの作成。作成したSSLプロキシと予約済みの静的外部IPアドレスを紐付ける。
$ gcloud compute forwarding-rules create my-ssl-lb-forwarding-rule \ --target-ssl-proxy=my-ssl-lb-target-proxy \ --address=ssl-lb-static-ipv4 \ --ports=443 \ --global
グローバル TCP プロキシ ロードバランサの作成
$ gcloud compute target-tcp-proxies create PROXY_NAME \ --backend-service BACKEND_NAME \ --proxy-header NONE
リージョン ネットワーク ロードバランサの作成
Google Cloud の外部 TCP / UDP ネットワーク負荷分散(以降はネットワーク負荷分散と呼びます)は、リージョンのパススルー ロードバランサです。ネットワーク ロードバランサは、同じリージョン内の仮想マシン(VM)インスタンス全体に TCP または UDP トラフィックを分散します。
・ネットワーク ロードバランサはプロキシではありません。
・負荷分散パケットは、ソース IP が変更されていない状態でバックエンド VM で受信されます。
・負荷分散接続はバックエンド VM によって終端されます。
・バックエンド VM からのレスポンスは、ロードバランサを経由せず、クライアントに直接送信されます。これを業界用語で Direct Server Return といいます。
以下のリソースより構成される。
- インスタンスグループを持つ
backendサービス
- backendサービスと連携される
転送ルール
リージョン内部ロードバランサの作成
ターゲットプロキシを配置するための、プロキシ専用サブネットを事前に作成しておく必要があり。
プロキシ専用サブネットは、内部 HTTP(S) 負荷分散プロキシ専用として予約されています。他の目的には使用できません。各 VPC ネットワークのリージョンごとに、1 つのプロキシ専用サブネットだけをアクティブにできます。
内部 HTTP(S) ロードバランサの転送ルールを作成する前に、プロキシ専用サブネットを作成しておく必要があります。内部 HTTP(S) ロードバランサを使用する仮想プライベート ネットワーク(VPC)の各リージョンに、プロキシ専用サブネットを作成する必要があります。
内部 HTTP(S) ロードバランサのプロキシ専用サブネット
プロキシ専用サブネット作成。
$ gcloud compute networks subnets create proxy-subnet \ --purpose=INTERNAL_HTTPS_LOAD_BALANCER \ --role=ACTIVE \ --region=asia-northeast1 \ --network=custom-vpc \ --range=172.168.0.0/23
gcloud compute networks subnets create proxy-subnet
3.6 Cloud Marketplace を使用してソリューションをデプロイする。以下のようなタスクを行います。
Cloud Marketplace カタログを閲覧し、ソリューションの詳細を見る
Google Cloud Marketplace を使用すると、Google Cloud で動作する機能的なソフトウェア パッケージをすばやくデプロイできます。Compute Engine、Cloud Storage などのサービスに慣れていない場合でも、なじみのあるソフトウェア パッケージを簡単に使い始めることができます。ソフトウェア、仮想マシン インスタンス、ストレージ、ネットワークの構成を手動で行う必要はありません。今すぐソフトウェア パッケージをデプロイして、アプリケーションで追加の容量が必要になったら後から拡張できます。
カタログの確認。
Cloud Marketplace ソリューションをデプロイする
Deployment Managerにてデプロイされる事になるので、Deployment Managerで管理することができる。
3.7 Cloud Deployment Manager を使用してアプリケーション インフラストラクチャをデプロイする。以下のようなタスクを行います。
Deployment Manager テンプレートを開発する
リソースの作成にあたっては、構成(Configuration)のファイルを作成する必要がある。
Configurationは以下の要素よりなる。
- resource
- 作成するリソース毎のリスト
- 下記3つの要素を含む
- name
- リソースを特定するためのユーザー定義の文字列
- type
- デプロイされるリソースタイプ
- リソースタイプ一覧
- propaties
- デプロイされるリソースで設定するパラメーター
Configurationのサンプル。
resources: - name: sample-vm type: compute.v1.instance properties: zone: asia-northeast1-a machineType: https://www.googleapis.com/compute/v1/projects/sample-123456/zones/asia-northeast1-a/machineTypes/e2-micro disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20150526 networkInterfaces: - network: https://www.googleapis.com/compute/v1/projects/sample-123456/global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT
Configurationで利用できる機能たち。
- メタデータ
- Configuration内の各リソース毎に、固有の設定を適用可能
- 例えば、メタデータに
dependsOn
を設定することで、各リソースの作成順序を制御できる - 明示的な依存関係の作成
- 例えば、メタデータに
- Configuration内の各リソース毎に、固有の設定を適用可能
- 参照
- Configuration内で作成されている、他リソースのパラメーターを参照できる
- 参照の使用
- テンプレート
- jinja2やpythonで記載されたファイルを、configuration内でimportすることができる
- 基本テンプレートの作成
- 環境変数
- テンプレート内で固有の環境変数を利用可能
deployment名
やproject id
の値を、自動的に引っ張ってこれる- デプロイメント固有の環境変数の使用
- ヘルパースクリプト
- テンプレート内で関数ぽく利用
- jinja2やpythonで定義された文字列に、テンプレート内文字列を変換できる
- テンプレート モジュールの使用
Deployment Manager テンプレートを起動する
Configuration(構成)をデプロイする。
$ gcloud deployment-manager deployments create sample-deployment --config ./sample-configuration.yaml
gcloud deployment-manager deployment create
Configuration(構成)を更新するために、プレビューする。
$ gcloud deployment-manager deployments update sample-deployment --config ./sample-configuration-update.yaml --preview
gcloud deployment-manager deployments update
Configuration(構成)を更新する。
$ gcloud deployment-manager deployments update sample-deployment
4. クラウド ソリューションの正常なオペレーションの確保
4.1 Compute Engine リソースを管理する。以下のようなタスクを行います。
単一の VM インスタンス(例: 起動、停止、構成の編集、インスタンスの削除)を管理する
起動
$ gcloud compute instances start sample1
gcloud compute instances start
停止
$ gcloud compute instances stop sample1
構成の編集
現在の設定情報をエクスポートして、編集する。
$ gcloud compute instances export sample1 --destination=./export.yaml
gcloud compute instances export
編集したファイルを用いてアップデートのテスト。--most-disruptive-allowed-action NO_EFFECT
オプションを付与すると、変更内容の確認と更新時の再起動必要有無が分かる。
$ gcloud compute instances update-from-file sample1 --source=./export.yaml --most-disruptive-allowed-action NO_EFFECT ERROR: (gcloud.compute.instances.update-from-file) Could not fetch resource: - Invalid value for field 'mostDisruptiveAllowedAction': 'NO_EFFECT'. 'machineType' changed. Insufficient allowed action to perform the update. Required action: RESTART.
アップデート。
$ gcloud compute instances update-from-file sample1 \ --source=./export.yaml \ --most-disruptive-allowed-action RESTART
gcloud compute instances update-from-file
インスタンスのゾーン間の移動
インスタンスをゾーン間で移動する。
$ gcloud compute instances move sample1 -zone=asia-northeast1-a --destination-zone=asia-northeast-b
インスタンスの削除
インスタンスを削除する。
$ gcloud compute instances delete sample1 --delete-disks=all --quiet
gcloud compute instances delete
インスタンスに SSH / RDP で接続する
Linux VMインスタンスへのSSH接続
メタデータ・マネージドSSH接続の方法(Project、もしくはVM InstanceにSSH公開鍵を登録した場合の方法)。
$ gcloud compute ssh sample-instance --project=sample-123456 --zone=asia-northeast1-a
Windows VMインスタンスへのRDP接続
Window VMインスタンスの、ログイン用アカウントにパスワードを設定する。尚、パスワード・リセットも同コマンドで可能。
$ gcloud compute reset-windows-password sample-instance --user=foo # ランダムなパスワードが生成される
gcloud compute reset-windows-password
RDP接続する。
利用可能なRDPクライアント。
- Native RDP Client
- Chrome RDP plugin
- Google Cloudコンソール画面から、RDPボタンを押して接続する時に利用されている
- Chrome Remote Desktop
- IAP Desktop
- IAP TCP転送機能を利用して、RDP接続するためのツール
GPU を新しいインスタンスに接続し、CUDA ライブラリをインストールする
1 つ以上の GPU を使用してインスタンスを作成する場合、ホスト メンテナンス時にインスタンスが停止するように設定する必要があります。GPU を使用するインスタンスは、特定のハードウェア デバイスに割り当てられているため、ライブ マイグレーションができません。
$ gcloud compute instances create sample-gpu \ --image=ubuntu-2004-focal-v20210510 \ --image-project=ubuntu-os-cloud \ --machine-type=n1-standard-4 \ # アクセラレータ最適化マシンタイプを指定 --accelerator=type=nvidia-tesla-t4,count=1 \ # 利用するGPUとGPU数を指定 --maintenance-policy=TERMINATE \ # LiveMigrationできない --restart-on-failure
CUDAライブラリ(NVIDIA CUDA Toolkit)をインストールする。
- 各OS標準のパッケージマネージャーにてインストールできる
現在実行されている VM のインベントリ(インスタンス ID、詳細)を見る
詳細の確認。
$ gcloud compute instances describe sample1 --format="table(name,status, id)" NAME STATUS ID sample1 RUNNING 808218861529190553
スナップショットを操作する(例: VM からのスナップショットの作成、スナップショットの表示、スナップショットの削除)
スナップショットの作成。
$ gcloud compute disks snapshot DISK_NAME --snapshot-names=snapshot-test
gcloud compute disks shanpshot
スナップショットの表示。
$ gcloud compute snapshots list
NAME DISK_SIZE_GB SRC_DISK STATUS
tzqx0wjoz2ej 10 asia-northeast1-a/disks/sample1 READY
スナップショットの削除。
$ gcloud compute snapshots delete tzqx0wjoz2ej --quiet
gcloud compute snapshots delete
イメージを操作する(例: VM またはスナップショットからのイメージの作成、イメージの表示、イメージの削除)
ソースディスク、イメージ、スナップショット、Cloud Storage に保存されているイメージからカスタム イメージを作成し、それらのイメージを使用して仮想マシン(VM)インスタンスを作成できます。これは、永続ブートディスクまたは特定のイメージを作成して特定の状態に変更し、その状態を保存してインスタンスを作成する場合に理想的です。
スナップショットから、カスタムイメージの作成。
$ gcloud compute images create sample-image --source-disk=sample1 --family=sample
カスタムイメージの表示。
$ gcloud compute images list --project=sample-123456 --no-standard-images NAME PROJECT FAMILY DEPRECATED STATUS sample-image sample-123456 sample READY
カスタムイメージの削除。
$ gcloud compute images delete sample-image --quiet
マシンイメージを使用すると、Compute Engine で実行される VM インスタンス用に、すべての構成、メタデータ、権限、データを 1 つ以上のディスクから格納できます。マシンイメージを作成するために使用する VM インスタンスは、ソース インスタンスと呼ばれます。
$ gcloud beta compute machine-images create sample-image --source-instance sample1
gcloud beta compute machine-images create
インスタンス グループを操作する(例: 自動スケーリング パラメータの設定、インスタンス テンプレートの割り当てや作成、インスタンス グループの削除)
自動スケーリング パラメータの設定
マネージド インスタンス グループ(MIG)には、負荷の増減に基づいて、MIG から仮想マシン(VM)インスタンスを自動的に追加または削除できる自動スケーリング機能が備わっています。自動スケーリングによって、トラフィックの増加をアプリで適切に処理できると同時に、リソースの必要性が低下した場合は費用を削減できます。自動スケーリング ポリシーを定義すると、測定された負荷と構成したオプションに基づいてオートスケーラーが自動スケーリングを実行します。
利用可能な目標使用率。
- 平均CPU使用率
- 1秒あたりのリクエスト数、または使用率に基づいたHTTP負荷分散処理能力
- Cloud Monitoringの指標
作成済みのMIGに自動スケーリングを設定。
$ gcloud compute instance-groups managed set-autoscaling sample-mig \ --max-num-replicas=3 \ --min-num-replicas=1 \ --mode=on \ --target-cpu-utilization=0.60 \ # 平均CPU使用率を指標に利用 --cool-down-period=60 \ --zone=asia-northeast1-b
gcloud compute instance-groups managed set-autoscaling
インスタンス テンプレートの割当や作成
インスタンス・テンプレートを作成する。
$ gcloud compute instance-templates create sample-template \ --machine-type=n1-standard-2 \ --image-project=sample-123456 \ --image=sample-image \ --boot-disk-size=30GB
gcloud compute instance-templates create
インスタンス グループの削除
インスタンス・グループを削除する。
$ gcloud compute instance-groups managed delete sample-mig --zone=asia-northeast1-b --quiet
gcloud compute instance-groups managed delete
管理インターフェース(例: Cloud Console、Cloud Shell、GCloud SDK)を操作する
省略。
4.2 Google Kubernetes Engine リソースを管理する。以下のようなタスクを行います。
現在実行されているクラスタのインベントリ(ノード、Pod、サービス)を見る
ノードの表示。
$ kubectl get node NAME STATUS ROLES AGE VERSION gke-cluster-sample-default-pool-3a65b553-kmmg Ready <none> 6h27m v1.19.9-gke.1400 gke-cluster-sample-default-pool-43fbf440-8ms5 Ready <none> 6h27m v1.19.9-gke.1400 gke-cluster-sample-default-pool-8d39884a-thgq Ready <none> 6h27m v1.19.9-gke.1400
Podの表示。
$ kubectl get pod NAME READY STATUS RESTARTS AGE sample 1/1 Running 0 115m
サービスの表示。
$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.7.240.1 <none> 443/TCP 6h28m svc-sample LoadBalancer 10.7.252.5 34.85.117.72 80:32650/TCP 17m
コンテナ イメージ リポジトリを閲覧し、コンテナ イメージの詳細を見る
GCRのイメージリポジトリの一覧を表示。
$ gcloud container images list --repository=asia.gcr.io/sample-123456
NAME
asia.gcr.io/sample-123456/nginx
コンテナイメージの詳細を表示。
$ gcloud container images describe asia.gcr.io/sample-123456/nginx:latest image_summary: digest: sha256:61191087790c31e43eb37caa10de1135b002f10c09fdda7fa8a5989db74033aa fully_qualified_digest: asia.gcr.io/sample-123456/nginx@sha256:61191087790c31e43eb37caa10de1135b002f10c09fdda7fa8a5989db74033aa registry: asia.gcr.io repository: sample-123456/nginx
gcloud container images describe
ノードプールを操作する(例: ノードプールの追加、編集、削除)
ノードプールの追加。
$ gcloud container node-pools create addtional-pool \ --cluster=cluster-sample \ --region=asia-northeast1 \ --num-nodes=1 \ --node-locations=asia-northeast1-a \ --enable-autoscaling --min-nodes=1 --max-nodes=4 # クラスタ・オートスケラーの有効化
gcloud container node-pools create
ワーカーノードが追加されている。
$ kubectl get node NAME STATUS ROLES AGE VERSION gke-cluster-sample-addtional-pool-d7ffa347-gd5c Ready <none> 35s v1.19.9-gke.1400 gke-cluster-sample-default-pool-3a65b553-kmmg Ready <none> 17h v1.19.9-gke.1400 gke-cluster-sample-default-pool-43fbf440-8ms5 Ready <none> 17h v1.19.9-gke.1400 gke-cluster-sample-default-pool-8d39884a-thgq Ready <none> 17h v1.19.9-gke.1400
ノードプールの編集。ノード数を2にする。
$ gcloud container clusters resize cluster-sample \ --region=asia-northeast1 \ --node-pool=addtional-pool \ --num-nodes=2
gcloud container clusters resize
ノードプールの削除。
$ gcloud container node-pools delete addtional-pool --quiet \ --cluster=cluster-sample \ --region=asia-northeast1
gcloud container node-pools delete
Pod を操作する(例: Pod の追加、編集、削除)
Podの作成。
$ kubectl run sample --image=nginx
Podの編集。
$ kubectl edit pod sample
Podの削除。
$ kubectl delete pod sample
サービスを操作する(例: サービスの追加、編集、削除)
LoadBalancerタイプのサービスを作成すると、External TCP Network LoadBalancer
が作成される。
$ kubectl expose pod sample --name=svc-sample --type=LoadBalancer --port=80 --target-port=80
サービスの削除。
$ kubectl delete service svc-sample
ステートフル アプリケーション(例: 永続ボリューム、ステートフル セット)を操作する
永続ボリュームの操作
GCEのリージョン永続ディスクを、GKE ClusterのPersistent Volumeとして利用できる。以下はリージョン永続ディスクを指定したStorageClass作成用のマニフェスト・サンプル。
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: regionalpd-storageclass provisioner: pd.csi.storage.gke.io parameters: type: pd-standard replication-type: regional-pd volumeBindingMode: WaitForFirstConsumer allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - europe-west1-b - europe-west1-c
ステートフルセットの操作
管理インターフェース(例: Cloud Console、Cloud Shell、Cloud SDK)を操作する
省略。
4.3 App Engine リソースと Cloud Run リソースをデプロイする。以下のようなタスクを行います。
アプリケーションのトラフィック分割パラメータを調整する
省略。
自動スケーリング インスタンスのスケーリング パラメータを設定する
App Engineの自動スケーリング
app.yaml
構成ファイルに、スケーリング関連のパラメーター定義をすることで設定できる。
利用可能なスケーリングタイプ。
- 自動スケーリング
- 基本スケーリング
- 手動スケーリング
- 負荷レベルに関係なく、常に実行されるインスタンスの数を指定
app.yamlの例。
automatic_scaling: target_cpu_utilization: 0.65 min_instances: 5 max_instances: 100 min_pending_latency: 30ms # リクエストを保留キューで待機させる最短時間 max_pending_latency: automatic # リクエストが保留キューで待機できる最長時間(これを超過するとスケールアップされる) max_concurrent_requests: 50
管理インターフェース(例: Cloud Console、Cloud Shell、Cloud SDK)を操作する
省略。
4.4 ストレージとデータベースのソリューションを管理する。以下のようなタスクを行います。
Cloud Storage バケット間でオブジェクトを移動する
ストレージ クラス間で Cloud Storage バケットを変換する
バケットにデータが含まれている場合は、新しい名前、ロケーション、プロジェクトを指定して新しいバケットを作成し、データを古い方のバケットから新しいバケットにコピーしたうえで、古いバケットとその内容を削除します。
Cloud Storage バケットのオブジェクト ライフサイクル管理ポリシーを設定する
オブジェクトのバージョニングを有効にする。
$ gsutil versioning set on gs://pekomiko
非現行バージョンのオブジェクトの表示。
$ gsutil ls -a gs://pekomiko
オブジェクトのライフサイクル管理ルールを設定する。
ライフサイクル管理ルールを定義したファイルを利用して更新。
$ gsutil lifecycle set ./lifecycle-rule.json gs://pekomiko
ライフサイクル管理ルールのサンプル。
{ "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": { "numNewerVersions": 3 } }, { "action": { "type": "SetStorageClass", "storageClass": "NEARLINE" }, "condition": { "age": 100, "matchesStorageClass": ["STANDARD"] } }, { "action": {"type": "Delete"}, "condition": { "age": 300, "matchesStorageClass": ["NEARLINE"] } } ] } }
IAM Roleではなく、ACLにてバケット・オブジェクトのアクセス管理をする方法。(コンソールでの操作不可)
$ gsutil acl ch -u zunda@goodbyegangster.com:O gs://zunpero/example-bucket
指定するパーミッションはLinuxと同じく、R(Read), W(Write),O(Owner)となる。
データ インスタンス(例: Cloud SQL、BigQuery、Cloud Spanner、Cloud Datastore、Cloud Bigtable)からデータを取得するクエリを実行する
省略。
BigQuery クエリのコストを見積もる
--dry_run
フラグをつけてクエリを実行すると、読み取るデータ量(バイト数)を見積もることができる。
$ bq --location=asia-northeast1 query \ --use_legacy_sql=false \ --dry_run \ 'SELECT name, gender, count FROM `sample-123456.sample.names_2014` limit 3' Query successfully validated. Assuming the tables are not modified, running this query will process 637986 bytes of data.
MB単位で課金され端数は四捨五入、最小は10MBから。
データ インスタンス(例: Cloud SQL、Cloud Datastore)のバックアップと復元を行う
Cloud SQLのバックアップと復元
バックアップを取得する。
オンデマンド バックアップと自動バックアップを作成、管理する
$ gcloud sql backups create --async --instance=sample-intance
バックアップから復元する。
バックアップ元のインスタンスに復元(上書きリストア)する場合。
$ gcloud sql backups list -i sample-instance ID WINDOW_START_TIME ERROR STATUS 1622678175712 2021-06-02T23:56:15.712+00:00 - SUCCESSFUL $ $ gcloud sql backups restore 1622678175712 --restore-instance=sample-instance
Cloud Datastoreのバックアップと復元を行う
Cloud Datastoreのバックアップは、エンティティのエクスポートとインポートを行う事で実現できる。
特定の名前空間にある、特定の種類(kind)のエンティティをエクスポートする。
$ gcloud datastore export gs://zunpero --async \ --namespaces="(default)" \ --kinds=test
上記でエクスポートしたエンティティをインポートする。
$ gcloud datastore import gs://zunpero/2021-06-03T02:29:59_71784/2021-06-03T02:29:59_71784.overall_export_metadata --async \ --namespaces="(default)" \ --kinds=test
Bigtableのバックアップとリストア
バックアップを取得する。
$ gcloud bigtable backups create backup-20210607 \ --instance=sample-instance \ --cluster=sample-cluster-id-1 \ --table=my-table \ --retention-period=1d \ --async
gcloud bigtable backups create
取得したバックアップをリストアする。
$ gcloud bigtable instances tables restore \ --source-instance=sample-instance \ --source-cluster=sample-cluster-id-1 \ --source=backup-20210607 \ --destination-instance=sample-instance \ --destination=restore-table \ --async
gcloud bigtable instances tables restore
Cloud Dataproc、Cloud Dataflow、BigQuery のジョブ ステータスを確認する
Dataprocのジョブステータスを確認する
実行されたSparkのジョブを確認する。
$ gcloud dataproc jobs list --cluster=sample-cluster --region=asia-northeast1 JOB_ID TYPE STATUS 400da74c05c74274b83389e69c31f2c1 spark DONE
Dataflowのジョブステータスを確認する
実行されたDataflowのジョブを確認する。
$ gcloud dataflow jobs list --region asia-northeast1 JOB_ID NAME TYPE CREATION_TIME STATE REGION 2021-06-05_05_27_09-3727785196286762344 beamapp-zunda-0605122649-706841 Batch 2021-06-05 12:27:12 Done asia-northeast1
BigQueryのジョブステータスを確認する
BigQuryジョブとは、
データの読み込み
、データのエクスポート
、データのクエリ
、データのコピー
など、BigQuery がユーザーに代わって実行するアクションのことです。
ジョブ実行履歴を確認する。
$ bq ls --jobs --all -n 5 sample-123456 jobId Job Type State Start Time Duration ------------------------------------------------------ ---------- --------- ----------------- ---------------- scheduled_query_60b7267f-0000-2e38-86bd-30fd38166cc8 query SUCCESS 03 Jun 13:46:13 0:00:01.215000 bquxjob_66343773_179d030c84a query SUCCESS 03 Jun 13:45:28 0:00:00.028000 bqjob_r72dc1deb8a410791_00000179d01d76f0_1 query SUCCESS 03 Jun 13:24:23 0:00:00.221000 bquxjob_49377bf4_179d01cf5a8 query SUCCESS 03 Jun 13:23:49 0:00:00.261000 bqjob_r1d01ec8414166ac5_00000179d011f5c4_1 load SUCCESS 03 Jun 13:11:49 0:00:01.307000
実行されたジョブの詳細を確認する。
$ bq show --format=prettyjson --job sample-123456:bquxjob_66343773_179d030c84a
管理インターフェース(例: Cloud Console、Cloud Shell、Cloud SDK)を操作する
省略。
4.5 ネットワーキング リソースを管理する。以下のようなタスクを行います。
既存の VPC にサブネットを追加する
サブネットを追加する。
$ gcloud compute networks subnets create sample-subnet \ --network=custom-vpc \ --range=192.168.0.0/24 \ --region=asia-northeast1
gcloud compute networks subnets create
サブネットを拡張して IP アドレスを増やす
サブネットのCIDRを拡張する。
$ gcloud compute networks subnets expand-ip-range sample-subnet \ --region=asia-northeast1 \ --prefix-length=16
gcloud compute networks subnets expand-ip-range
静的外部または内部 IP アドレスを予約する
IPアドレスの種類。
静的外部IPアドレスを予約する。--addresses
フラグで既存のエフェメラルIPアドレスを指定すると、静的IPアドレスに昇格される。
$ gcloud compute addresses create sample-external-ip \ --region=asia-northeast1
gcloud compute addresses create
静的内部IPアドレスを予約する。
$ gcloud compute addresses create sample-internal-ip \ --region=asia-northeast1 \ --subnet=sample-subnet \ --addresses=192.168.0.10
gcloud compute addresses create
管理インターフェース(例: Cloud Console、Cloud Shell、Cloud SDK)を操作する
--filter
オプションを利用して検索。
$ gcloud compute networks subnets list --filter="region:asia-northeast1 OR region:asia-northeast2" NAME REGION NETWORK RANGE default asia-northeast1 default 10.146.0.0/20 default asia-northeast2 default 10.174.0.0/20 $ $ gcloud compute networks subnets list --filter="REGION:(asia-northeast1 asia-northeast2)" NAME REGION NETWORK RANGE default asia-northeast1 default 10.146.0.0/20 default asia-northeast2 default 10.174.0.0/20
--format
オプションを利用して表示。
$ gcloud compute networks subnets list \ --format="table[box,title=Subnets](REGION,RANGE)" \ --filter="region:asia-northeast1 OR region:asia-northeast2" ┌──────────────────────────────────┐ │ Subnets │ ├─────────────────┬────────────────┤ │ REGION │ RANGE │ ├─────────────────┼────────────────┤ │ asia-northeast1 │ 10.146.0.0/20 │ │ asia-northeast2 │ 10.174.0.0/20 │ └─────────────────┴────────────────┘
4.6 モニタリングとロギングを行う。以下のようなタスクを行います。
リソース指標に基づいて Stackdriver アラートを作成する
Cloud Monitringのアラート機能を利用する。
作成したポリシーファイルを登録する。
$ gcloud alpha monitoring policies create --policy-from-file="rising-cpu-usage.json"
ポリシーファイルのサンプル。
Stackdriver カスタム指標を作成する
ログが外部システム(例: オンプレミスまたは BigQuery)にエクスポートされるようにログシンクを構成する
Google Cloud Console でのログのエクスポート
Stackdriver のログを表示、フィルタリングする
コマンドラインで表示。
$ gcloud logging read "resource.type=gce_instance AND logName=projects/sample-123456/logs/syslog" --limit 1 --format json
フィルタリングのための言語。
Stackdriver のログメッセージの詳細を見る
省略。
Cloud Diagnostics を使用してアプリケーションの問題を調査する(例: Cloud Trace データの確認、Cloud Debug を使用したアプリケーションのポイントインタイムの確認)
Cloud Error Reportingについて。
Error Reporting では、Google Cloud プロジェクト内のすべてのアプリとサービスおよび Amazon Elastic Compute Cloud(EC2)アプリケーションからのエラー条件を一元的にモニタリングできます。
Cloud Traceについて。
Cloud Trace では、アプリケーションの分散トレースデータを提供します。アプリケーションをインストルメント化すると、Cloud Trace コンソールで、1 つのリクエストのレイテンシ データを分析して、アプリケーション全体の集約したレイテンシを確認できます。
ソースコード内に、指定のライブラリ(OpenTelemetry クライアント ライブラリ等)を組み込む事で、トレース情報をCloud上へ連携してあげる。
Cloud Debuggerについて。
Google Cloud上で動作するコードのスナップショット(ローカル変数のキャプチャ等)を利用して調査できるもの。
ソースコード内に、指定のライブラリ(google-python-cloud-debugger等)を組み込む事で、ソースコードをCloud上に連携している。
Google Cloud Platform のステータスを見る
管理インターフェース(例: Cloud Console、Cloud Shell、Cloud SDK)を操作する
省略。
5. アクセスとセキュリティの構成
5.1 Identity and Access Management(IAM)を管理する。以下のようなタスクを行います。
IAM ロールの割り当てを見る
割り当てを確認する。
$ gcloud projects get-iam-policy sample-123456 --format=yaml
gcloud projects get-iam-policy
出力されるポリシーファイルのサンプル。
bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3
IAM ロールをアカウントまたは Google グループに割り当てる
上記コマンドget-iam-policy
で取得したpolicyファイルを編集して、そのファイルを適用する。
$ gcloud projects set-iam-policy sample-123456 ./iam-policy.yaml
gcloud projects set-iam-policy
カスタム IAM ロールを定義する
カスタムIAMロールを作成するには、マニフェストファイルを作成して適用するか、gcloudコマンドのパラメーターで指定する。
カスタムIAMロールの作成。
$ gcloud iam roles create sampleCustomRole \ --project=sample-123456 \ [--organization=ORGANIZATION-ID] \ # projectのほか、Organizationに対してもカスタムIAMロールを作成できる --title="Sample Custome Role" \ --description="sample" \ --permissions=storage.buckets.list,storage.objects.list \ # 付与する権限を指定 --stage=GA
カスタムIAMロールに付与できる権限の一覧。
IAMロールを、Organizationや別プロジェクトにコピーする。
$ gcloud iam roles copy \ --source-project=sample-123456 \ --source=sampleCustomRole \ --dest-project=copy-123456 \ # Organizationをコピー先として指定もできる --destination=copyRole
5.2 サービス アカウントを管理する。以下のようなタスクを行います。
特権が制限されているサービス アカウントを管理する
サービス アカウントは、ユーザーではなく、アプリケーションや仮想マシン(VM)インスタンスで使用される特別なアカウントです。アプリケーションはサービス アカウントを使用して、承認された API 呼び出しを行います。これは、サービス アカウント自体として承認されるか、ドメイン全体の委任により Google Workspace または Cloud Identity ユーザーとして承認されます。
サービスアカウントの作成。
$ gcloud iam service-accounts create sample-sa \ --display-name="Sample Service Account"
gcloud iam service-accounts create
サービスアカウントにIAMロールを付与する。
$ gcloud projects add-iam-policy-binding sample-123456 \ --member="serviceAccount:sample-sa@sample-123456.iam.gserviceaccount.com" \ --role="roles/editor"
gcloud projects add-iam-policy-binding
サービス アカウントを VM インスタンスに割り当てる
$ gcloud compute instances create sample-with-sa \ --service-account=sample-sa@sample-123456.iam.gserviceaccount.com \ --scopes=cloud-platform
別のプロジェクトのサービス アカウントにアクセス権を付与する
サービスアカウントsample-sa@sample-123456.iam.gserviceaccount.com
に、プロジェクトaaaaaa-123456
のIAM Roleroles/editor
を付与する。
$ gcloud projects add-iam-policy-binding aaaaaa-123456 \ --member="serviceAccount:sample-sa@sample-123456.iam.gserviceaccount.com" \ --role="roles/editor"
5.3 プロジェクトとマネージド サービスの監査ログを見る。
Cloud Audit Logsは、組織・フォルダ・プロジェクト毎に、以下の監査ログを収集している。
- 管理アクティビティ監査ログ
- リソース構成を変更するAPIの呼び出し履歴
- 管理アクションの履歴
- データアクセス監査ログ
- リソース構成を参照するAPIの呼び出し履歴
- ユーザー定義データ(GCS上のオブジェクト等)のアクセス履歴
- BigQueryを除いて、デフォルトで無効になっている
- システム イベント監査ログ
- リソース構成を変更するGoogle Cloud側アクションの履歴
- ポリシー拒否監査ログ
- セキュリティポリシー違反により、ユーザーまたはサービスアカウントのアクセスが拒否された履歴
gcloud logging read
にて、表示するグループ毎に、表示したいログを指定する。
$ gcloud logging read "logName : projects/sample-123456/logs/cloudaudit.googleapis.com%2Factivity" --project=sample-123456 --limit=1