Cloud Service
Service Directory
散在するサービスの所在を一元管理し、名前で見つけられるようにする Service Directory。VM・コンテナ・外部サービスを横断してエンドポイントを登録・検索でき、DNS とも統合する。AWS Cloud Map に相当。
- 1.サービスの所在(エンドポイント)を一元レジストリで登録・検索する、フルマネージドなサービス管理。
- 2.API・DNS・gRPC のいずれからも名前解決でき、VM・コンテナ・外部を横断して扱える。
- 3.サービスディスカバリの基盤として使う、AWS Cloud Map 相当のサービス。
解決する課題
サービスがどこで動いているか(IP・ポート・メタデータ)を、環境を横断して一元的に把握し、名前で見つけられるようにするのが核心です。
- VM・コンテナ・サーバーレス・オンプレミスと、サービスの実体が分散し、所在の管理が煩雑になっている
- アプリのコードや設定に IP・ポートを直書きしてしまい、変更のたびに各所を直す必要がある
- サービスの所在を DNS でも API でも 同じ情報源から引きたい
- マイクロサービス間の名前解決(サービスディスカバリ)を、自前のレジストリを運用せずに済ませたい
ロードバランサや DNS が「どこへ流すか」を担うのに対し、Service Directory は「どんなサービスが、どこに、どんな属性で存在するか」という**レジストリ(登録簿)**を担うのが位置づけです。
主要概念と用語
- ネームスペース: サービスをまとめる入れ物。リージョン単位のリソースで、配下にサービスを格納する
- サービス: 論理的なサービス名。配下に複数のエンドポイントと、サービス単位のメタデータ(アノテーション)を持つ
- エンドポイント: サービスの実体の所在。IP アドレスとポート、および任意のメタデータ(アノテーション)を持つ。1 つのサービスに複数登録できる
- アノテーション: サービスやエンドポイントに付けるキーと値のメタデータ。バージョン・環境・プロトコルなどの属性を持たせ、検索やフィルタに使う
- Service Directory の DNS ゾーン: ネームスペースを 限定公開(プライベート)DNS ゾーンに紐づけ、登録したサービスを VPC 内から DNS 名で解決できるようにする統合機能
- 解決の経路: 登録した情報は API(resolve)/DNS/gRPC のリゾルバのいずれからも引ける。同じレジストリを複数の方法で参照する
仕様・制限・クォータ
- リージョン単位のリソース。ネームスペース・サービス・エンドポイントはいずれもリージョンに属する
- 階層は ネームスペース → サービス → エンドポイントの 3 段。エンドポイントは IP とポート、任意のアノテーションを持つ
- 1 サービスあたりのエンドポイント数、1 ネームスペースあたりのサービス数、アノテーションの数やサイズなどに上限がある。大規模構成では事前に上限を確認し、必要なら引き上げを申請する
- DNS 統合では、ネームスペースを限定公開 DNS ゾーンに対応づけ、紐づけた VPC からサービスを名前解決できる
- 課金は API 呼び出し回数と登録リソース数を中心とした従量。具体的な単価・上限値は変動するため公式の料金・クォータページで最新値を確認する
内部の仕組み
Service Directory は、サービスの所在情報を保持するマネージドなレジストリとして動き、登録された情報を複数の経路から一貫して提供します。
- アプリやインフラ自動化が、サービスとエンドポイントを API でレジストリへ登録する。登録内容は IP・ポートとアノテーション
- 利用側は API の resolve でサービスを引き、条件に合うエンドポイント群とメタデータを受け取る
- ネームスペースを 限定公開 DNS ゾーンに紐づけると、同じ情報が **DNS(A/AAAA/SRV など)**として VPC 内から解決できる。アプリ側を変えずに名前解決へ載せられる
- gRPC のネームリゾルバ統合により、gRPC クライアントが Service Directory を直接参照してエンドポイントを取得できる
- レジストリ自体は Google が冗長構成で運用するため、利用者は可用性やスケールを意識せずに済む
Service Directory は「どんなサービスがどこにあるか」を保持するレジストリであり、トラフィックを実際に分散するのはロードバランサ、名前を IP へ解く配送は DNS の役目です。Service Directory はその DNS の情報源にもなり、レジストリと名前解決を同じ唯一の情報源に揃えられるのが利点です。
設計パターン / ベストプラクティス
- IP・ポートをアプリへ直書きせず、Service Directory へ登録して名前で参照することで、所在変更をレジストリ更新に閉じ込める
- VM・コンテナ・外部サービスを同一のネームスペース体系へ登録し、環境を横断したサービスディスカバリの基盤にする
- 環境・バージョン・プロトコルなどをアノテーションで表現し、利用側がメタデータで対象を絞り込めるようにする
- 既存アプリを改修せずに導入したい場合は、DNS 統合を使い、アプリからは通常の DNS 名前解決として扱わせる
- gRPC マイクロサービス間では gRPC リゾルバ統合を使い、クライアントから直接エンドポイントを取得させる
運用・監視
- Cloud Monitoring で API 呼び出し量や解決状況のメトリクスを監視し、想定外の急増や解決失敗を検知する
- Cloud Audit Logs でネームスペース・サービス・エンドポイントの作成・変更・削除を追跡し、誰がレジストリを変えたかを把握する
- エンドポイント登録を**自動化(IaC やデプロイパイプライン)**し、手作業による登録漏れ・削除漏れを防ぐ
- 解決できない場合は、ネームスペース・サービスの存在、エンドポイントの登録内容、DNS 統合ゾーンと VPC の紐づけ、IAM 権限を順に確認する
コスト
課金の中心は API 呼び出し回数と、登録しているリソースの規模です。
| 課金対象 | 課金の考え方 | コスト最適化のヒント |
|---|---|---|
| API 呼び出し | 登録・更新・解決などの呼び出し回数の従量 | 解決結果を適切にキャッシュし過剰な呼び出しを避ける |
| 登録リソース | ネームスペース・サービス・エンドポイントの規模 | 不要になったサービス・エンドポイントを整理する |
| DNS 統合 | 紐づく限定公開ゾーンの DNS クエリ | TTL を適切に設定しキャッシュヒットを増やす |
具体的な単価は変動するため、料金は公式の料金ページで最新値を確認してください。
セキュリティ
- IAM でネームスペース・サービス・エンドポイントへの参照・編集権限を分離し、登録(書き込み)と解決(読み取り)の権限を最小化する
- DNS 統合は限定公開(プライベート)DNS ゾーンを用いるため、登録したサービス名を外部へ露出させず VPC 内に閉じられる
- Cloud Audit Logs でレジストリ変更を記録し、不正・誤操作による所在情報の改ざんを追跡できるようにする
- アノテーションに機密情報を入れない。メタデータは検索・属性付けの目的に限り、認証情報などは Secret Manager 等で別管理する
レジストリは「サービスの正しい所在」を示す情報源です。エンドポイント登録の権限を広く配ると、誤った IP・ポートが登録されてトラフィックが誤誘導される恐れがあります。書き込み権限はデプロイ自動化など限られた主体に絞り、人手による直接編集は最小限にとどめます。
関連サービス・比較
| 観点 | Service Directory(GCP) | AWS Cloud Map(AWS) |
|---|---|---|
| 位置づけ | サービスの所在を一元管理するレジストリ | サービスの所在を一元管理するレジストリ |
| 登録単位 | ネームスペース・サービス・エンドポイント | ネームスペース・サービス・インスタンス |
| 解決経路 | API・DNS・gRPC リゾルバ | API・DNS |
| DNS 統合 | 限定公開 DNS ゾーンと連携 | Route 53 と連携 |
| メタデータ | アノテーション | カスタム属性 |
| 主目的 | 環境横断のサービスディスカバリ | 環境横断のサービスディスカバリ |
名前を IP へ解く配送そのものは Cloud DNS、トラフィックの分散は Cloud Load Balancing が担い、Service Directory はその上位で「どんなサービスがどこにあるか」を保持します。マイクロサービス間の通信制御まで踏み込む場合は Cloud Service Mesh が比較対象になり、Service Directory は所在の登録・検索に焦点を絞ったレジストリとして位置づけられます。
ハンズオン / CLI例
# ネームスペースを作成
gcloud service-directory namespaces create my-namespace \
--location=asia-northeast1
# ネームスペース配下にサービスを作成(アノテーション付き)
gcloud service-directory services create my-service \
--namespace=my-namespace \
--location=asia-northeast1 \
--annotations=env=prod,protocol=grpc
# サービスにエンドポイント(IP とポート)を登録
gcloud service-directory endpoints create ep-1 \
--service=my-service \
--namespace=my-namespace \
--location=asia-northeast1 \
--address=10.10.0.10 \
--port=8080
# サービスを解決し、登録済みエンドポイントを取得
gcloud service-directory services resolve my-service \
--namespace=my-namespace \
--location=asia-northeast1
Google Cloud Service
Service Directoryを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ネットワーキング
比較で見る軸
クラウド: Google Cloud / カテゴリ: ネットワーキング / 難易度: intermediate
導入後に効く点
API・DNS・gRPC のいずれからも名前解決でき、VM・コンテナ・外部を横断して扱える。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- ネットワーキング
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / reliability
判断チェックリスト
- 自社の用途が「ネットワーキング / operational」に近いか確認する。
- 強みである「サービスの所在(エンドポイント)を一元レジストリで登録・検索する、フルマネージドなサービス管理。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。