Google Compute Engineについて利用する機会ができたので、関連する概念の概要をまとめておこうと思います。
主に用語とその簡単な概要みたいな形になるかと思います。
Google Compute Engineとは
Google Compute Engine(以降GCE)は、Google Cloud PlatformのIaaSサービスの1つです。
GCEはKVM(Kernel-based Virtual Machine)とcgroupsを利用したLinux仮想マシン、およびWindowsベースの仮想マシンを提供し、以下の方法でその仮想マシンの管理を行うことができます。
- Developers Console (Web管理画面)
- gcloud コマンド
- API
料金について
料金としては、概ね以下に対する利用時間で計算されます。
料金についての詳細は以下を確認してください。
Google Compute Engine の料金 | Compute Engine ドキュメント | Google Cloud Platform
料金計算については、料金計算ツールも提供されているのでそちらも合わせて利用できます。
Google Cloud Platform 料金計算ツール | Google Cloud Platform
全体像
インスタンス
GCEにおいてメインになるのが、インスタンスです。
インスタンスとは、Googleのインフラストラクチャがホストする仮想マシンのことです。
基本的にはGCEで作成できる仮想マシンのことになります。
仮想マシン、インスタンス、仮想マシンインスタンスなどと呼ばれます。
マシンタイプ
インスタンスで利用できる、ハードウェアリソースの種類を指します。
一般的には、GCEに最初から定義されているマシンタイプを利用することが多いですが、独自に定義することもできます。
マシンタイプには主に以下のリソースが定義されています。
- 仮想CPU数
- メモリサイズ
- 永続ディスク容量
イメージ
イメージとは、オペレーティング システム イメージのことを指し、インスタンスはこのイメージを使用してルート永続ディスクを作成します。
イメージは、公開イメージと非公開イメージがあります。
公開イメージはドキュメントに一覧が記載されています。
Images | Compute Engine Documentation | Google Cloud Platform
非公開イメージは、必要に応じてプロジェクト単位で独自に作成・利用することができます。
ストレージ
インスタンスには、オペラ−ティングシステムをルート永続ディスクが1つと、追加のディスクを準備することができます。
ストレージの種類には以下の4つが準備されています。
それぞれの特徴については以下で確認できます。
Storage Options | Compute Engine Documentation | Google Cloud Platform
ネットワーク
GCEでは、プロジェクト単位で複数のVPNを持つことができます。
すべてのインスタンスはプロジェクトのVPNの1つに所属することになります。 デフォルトでは"default"と呼ばれるVPNが使用されます。
内部・外部問わず、他のホストとの通信はゲートウェイを経由するL3で行われます。 L2前提の場合には注意が必要です。
ちなみにVPNはゾーン、リージョンをまたいで設定することができます。(VPNは本来そういうものですが)
外部IPアドレス
外部IPにはインスタンス起動時に動的に割り当てられるエフェメラルIPと、停止中も保持できる静的IPがあります。
エフェメラルIPはインスタンスが停止すると揮発しますが、料金が発生しません。
静的IPはそのIPを使用中のインスタンスが停止していると、料金が発生します。
DNS
VPNには、他の用途と兼任のDNSサーバが2台用意されます。
メタデータとメタデータサーバ
GCEにはメタデータという概念があります。
メタデータはプロジェクトやインスタンスに関する情報を指し、VPN内に1台用意されるメタデータサーバに保持されます。
メタデータには以下のようなものがあります。
メタデータサーバはVPN内で一意のアドレスでアクセスできるようになっています。また、インスタンスからであれば認証なしでアクセスすることができるようになっています。
メタデータサーバにはWeb APIでアクセスできるため、特殊なクライアント等を用意する必要なくメタデータを取得することができます。
またカスタムメタデータは既存のメタデータ以外のデータをKey-Value形式で保存することができます。
メタデータサーバは更新検知機能も備えているため、メタデータの更新を利用したデプロイフローなども可能になっています。
リージョンとゾーン
Google Cloud Platformには、リージョンとゾーンと言う概念があります。
リージョンとは、リソースを実行できるGoogleのデータセンターのある各地域を指しています。 主に地理的分散やルーティングドメイン用に用意されています。
ゾーンは、リージョン内における物理的に独立した各システムを指します。 主にフォールトトレランス用に用意されています。
引用元: https://cloud.google.com/docs/overview/
Google Cloud Platform において、リージョンとゾーンは以下のドキュメントにまとめられています。
リージョンとゾーン | Compute Engine ドキュメント | Google Cloud Platform
ゾーンは、GCEインスタンスの作成時などにユーザが指定することができます。
ゾーンを指定できるのには、大きく以下の理由があります。
- 地域による料金の違い
- 提供サービスの違い
- リソースの分散による障害対応
- レイテンシの軽減
現実のサービス運用に利用する場合には、上記を考慮してゾーン選択をする必要があります。
プロジェクト
Google Cloud Platformには、プロジェクトと言う概念があります。
プロジェクトは、特定のサービスやリソース群を構築するために組織的なグルーピングをするためのものと捉えると良さそうです。
リソース等の所有権やメンバーシップ、請求等はプロジェクト単位になります。
ドキュメントを引用すると『構築するもののための組織エンティティ』*1となっていますが、わかるようなわからないようなという感じです。
GCEのインスタンス等のGoogle Cloud Platformにおける使用するリソースは、プロジェクトに所属する事になります。
そのためプロジェクト全体のGCEインスタンスに対しての権限などの設定も行えます。
プロジェクトには、以下の情報が含まれます。
- プロジェクト名
- プロジェクトID
- プロジェクト番号
プロジェクトは(課金が有効になると)特定の請求先アカウントに紐付けられます。
複数のプロジェクトが1つのアカウントに対して請求をすることができます。
まとめ
この記事に書いたこと以外にも、GCEを利用する上で知っておくべきことはたくさんあるかと思います。 (大きなところではサービスアカウント、スケーリングなど)
説明自体で非常に簡略化した部分もあるため、実際の運用では気をつけるべき点も多くあるようです。