Google Cloud API と Terraform について

このガイドの目的は、Terraform が Google Cloud API と連携する方法を(公開 API と非公開 API の違いを区別しながら)明確にし、API の有効化やリソースのインポートなどの重要なコンセプトについて説明することです。Terraform で Google Cloud リソースを効果的に管理し、一般的な落とし穴を回避するには、この点について理解することが不可欠です。

Google Cloud での公開 API と非公開 API

Google Cloud サービスは、アプリケーションやツール(Terraform など)がリソースと連携したり、リソースを管理したりできるようにするさまざまな API を公開しています。これらの API は、大きく次の 2 つのカテゴリに分類されます。

公開 API

目的: これらは、お客様とツールが Google Cloud リソース(Compute Engine インスタンス、Cloud Storage バケット、BigQuery データセットなど)を作成、構成、および管理するためのプライマリ インターフェースです。

公開: 公開 API は、十分に文書化されており、定義済みの REST エンドポイントを持ち、外部での使用を意図しています。google Terraform プロバイダは、これらの API と連携するように構築されています。

例: compute.googleapis.comstorage.googleapis.combigquery.googleapis.com

非公開(内部)API

目的: これらの API は Google Cloud サービスの内部にあり、Google 自体がそのマネージド サービスを内部で操作、オーケストレーション、およびプロビジョニングするために使用します。これらは、お客様の直接のインタラクションまたは管理を目的としない機能を公開しています。

公開: 非公開 API は通常、一般向けに文書化されておらず、安定した外部エンドポイントも持っていません。また Terraform などのサードパーティ製ツールから直接アクセスされるようには設計されていません。これらはサービスの実装の詳細です。

例: dataproc-control.googleapis.com は、Dataproc がその運用コントロール プレーンに使用する内部 API です。お客様はこの API を直接操作または管理しません。

Terraform での API の有効化とリソースのインポート

Google Cloudで Terraform を効果的に使用するには、「API の有効化」と「リソースのインポート」の違いを理解することが重要です。

API の有効化

  • 意味: Google Cloudで「API を有効化する」とは、プロジェクトで特定の Google Cloud サービスをアクティブ化することです。これにより、そのサービスの機能を使用したり、そのサービスによって管理されるリソースを作成したりするために必要な権限とアクセス権がプロジェクトに付与されます。

Terraform コンテキスト: Terraform では、これは通常、google_project_service リソースを使用して行います。このリソースは、指定された公開 API(compute.googleapis.com など)が Google Cloud プロジェクトで有効になっていることを検証します。

目的: API を有効化することは、そのサービスに属するリソースを作成または管理するための前提条件です。たとえば、google_compute_instance リソースを作成する前に compute.googleapis.com を有効化する必要があります。

例(Terraform):

```hcl resource "google_project_service" "compute_api" {   project            = "your-gcp-project-id"   service            = "compute.googleapis.com"   disable_on_destroy = false } ``` 

重要な注意事項: google_project_service リソースは、一般公開されている Google Cloud API の有効化の状態を管理することのみを目的に設計されています。内部 API や非公開 API 向けに設計されておらず、それらの API とは動作しません。このリソースを非公開 API に使用しようとするとエラーが発生します。これらの API は、このような管理のために公開 API サーフェスを介して公開されていないためです。

リソースのインポート

意味: Terraform では、「インポート」とは、既存のクラウド リソース(手動で作成されたリソース、または Terraform の外部の別のプロセスで作成されたリソース)を Terraform の管理下に置くことを指します。リソースをインポートすると、Terraform はそのリソースの状態エントリを生成し、Terraform の構成を使用してリソースのライフサイクル(更新、削除)を管理できるようにします。

Terraform コンテキスト: これを行うには、terraform import コマンドを使用するか、Terraform 1.5 以降で導入された import ブロックを活用します。

目的: Terraform で最初にプロビジョニングされなかったリソースを制御できるようにすることです。

例(Terraform CLI):

```bash terraform import google_compute_instance.my_instance projects/your-gcp-project-id/zones/us-central1-a/instances/my-vm ``` 

非公開 API(dataproc-control.googleapis.com など)に関する懸念への対処

お客様は、ログやドキュメントで非公開 API(Dataproc の dataproc-control.googleapis.com など)へのリファレンスを見つけ、Terraform でそれらの API を有効化またはインポートする必要があるかどうか疑問に思うことがあります。

お客様のアクションは不要: API が非公開または内部 Google Cloud API として識別された場合、google_project_service を使用して明示的に有効化したり、Terraform でインポートを試みたりする必要はありません

内部管理: これらの API は、Google Cloud サービスの内部操作に不可欠です。これらは Google によって自動的に管理され、お客様が公開ツールを使用して直接操作または管理するようには設計されていません。

サービスの使用に影響なし: Terraform を使用してこのような非公開 API を「インポート」または明示的に管理できない場合でも、関連する Google Cloud サービスの使用には影響しません(たとえば、Dataproc は、dataproc-control.googleapis.com を管理しなくても正しく機能します)。必要な内部 API インタラクションは Google によって処理されます。

公開 API に焦点を当てる: Terraform で Google Cloud リソースを管理する場合は、プロビジョニングするサービスとリソースに対応する公開 API の有効化と構成のみに焦点を当てる必要があります。

まとめ

Google Cloudでの公開 API と非公開 API との明確な違いと、Terraform での API の「有効化」とリソースの「インポート」の具体的な役割を理解することで、 Google Cloud インフラストラクチャを効果的に管理できるようになります。非公開 Google Cloud API を明示的に管理またはインポートしようとしないでください。これらは Google が処理する内部コンポーネントです。Terraform 構成では、一般公開されている API とそれに対応するリソースに焦点を当ててください。