こんにちは!開発エンジニアのクリスです。

最近、初めてOCI (Oracle Cloud Infrastructure) を触る機会がありました。他のクラウドプラットフォームの知識があったので、「まあ、リソース作成や環境構築はサクッといけるだろう」と高を括っていたんです。

大枠は問題なかったのですが、リソースを管理するための「タグ」を設定しようとしたところで、ちょっとした違和感に気づきました。

「あれ? タグの付け方がなんか2種類ない……?」

今回は、私のようにOCIを初めて触る人が(たぶん)少し戸惑う、OCIの2種類のタグ機能について共有します!

OCIのタグは「2種類」ある!

クラウドインフラストラクチャなどを触ったことがあると、「タグ」といえば基本的にKey-Valueペア(例: Environment: Production)を自由に設定するものを想像しますよね。

もちろんOCIにもその機能はあるのですが、それとは別にもう一つ、より強力でガバナンスに特化したタグ機能が用意されていました。

それが「フリーフォーム・タグ」と「定義済タグ」です。

1. フリーフォーム・タグ (Free-form Tags)

こちらは私たちがお馴染みの、いわゆる「普通の」タグです。

  • Key (キー)Value (値) を自由に設定できます。
  • 例: Environment : DevelopmentOwner : Chris といった具合です。
  • 事前準備は不要で、リソース作成時や作成後にすぐに追加できます。

ただ、OCIを触っていて気づいたのは、このフリーフォーム・タグは特定の「タグ・ネームスペース」という管理体系に属していない点です。手軽な反面、管理は利用者に完全に委ねられています。

便利な点:

手軽さ。個人での検証や、一時的な目印としては最適です。

注意点:

「手軽さ」は「統制の欠如」と表裏一体です。Environmentと入力するつもりがEnviroment(nが足りない!)とタイプミスしたり、ある人はDev、別の人はDevelopmentと入力したり、「表記ゆれ」が発生しやすくなります。

2. 定義済タグ (Defined Tags)

こちらがOCIのタグ機能の「本命」とも言える、高機能なタグです。

フリーフォーム・タグと違い、利用するには事前の準備(定義)が必要になります。

利用するまでのステップは以下の通りです。

  1. 「タグ・ネームスペース」を作成するまず、タグを管理するための「箱」のようなもの(ネームスペース)を作成します。(例: CompanyInternal)このネームスペース自体に、IAMポリシー(権限管理)を設定できます。参考: タグ・ネームスペースの管理 (公式ドキュメント)
  2. ネームスペース内に「タグ・キー」を定義する次に、ネームスペースの中に「キー」を定義します。(例: Environment
  3. キーの値のタイプを指定するここが強力なポイントです。このEnvironmentキーに対して、値を「単なる文字列(自由入力)」にするか、「事前定義した値のリスト(選択式)」にするかを選べます。

例えば、Environmentキーに ["Production", "Staging", "Development"] という選択リストを設定しておけば、リソース作成者はこの3つから選ぶことしかできなくなります。タイプミスや「Dev」のような表記ゆれを完全に防ぐことができます。

タグの値を事前に設定しておくと、タグつけの際はミスなく選択するだけで設定可能

「定義済タグ」が重要な理由 (メリット)

「わざわざ事前定義するなんて面倒だ」と思うかもしれませんが、OCIを本格的に利用する上では、この定義済タグが非常に重要になります。

メリット1:正確なコスト管理

「フリーフォーム・タグはコスト管理に使えない」という声が色々なフォーラムにありましたが、調べてみると少しニュアンスが異なりました。

正しくは、「フリーフォーム・タグもコスト分析のフィルタとしては利用可能」です。しかし、前述の通り表記ゆれのリスクがあるため、DevDevelopmentのコストが別々に集計されてしまう可能性があります。

一方、「定義済タグ」はOCIの「コスト・トラッキング・タグ」として正式に指定できます。

これにより、表記ゆれのない正確なデータでコスト分析や予算アラートを設定できるようになります。公式ドキュメントでも、コスト・トラッキングには定義済タグの使用が強く推奨されています。

参考: コスト・トラッキング・タグの使用 (公式ドキュメント)

メリット2:ガバナンスとアクセス制御

定義済タグは、OCIのIAMポリシーと強力に連携します。

例えば、「CompanyInternal.Environment タグの値が Production になっているリソースは、Admins グループ以外は削除できない」といった、タグに基づいた詳細なアクセス権限制御が可能です。

参考: タグを使用したアクセス管理 (公式ドキュメント)

メリット3: タグの一括編集 (Bulk-edit)

定義済タグは、複数のリソースに対して一括で適用(バルク編集)することもサポートされています。環境構築後にタグ付けルールを変更した際も、効率的にメンテナンスが可能です。

参考: Bulk Editing tags on resources using the OCI CLI公式ドキュメントより、このOracleブログの記事の方がわかりやすかった

まとめ

OCIの2種類のタグについて、使い分けをまとめてみました。

  • フリーフォーム・タグ
    • 個人での検証や開発環境
    • 一時的な目印やメモ
    • 厳密なコスト管理やガバナンスが不要な場合
  • 定義済タグ
    • 本番環境やステージング環境
    • 複数人・複数チームでリソースを共有する場合
    • 正確なコスト管理や予算編成を行いたい場合
    • タグに基づいてアクセス権限を制御したい場合

手軽にリソースを分類したいだけならフリーフォーム・タグでも十分ですが、OCIで本格的なシステムを運用し、コストやガバナンスをしっかり管理していくためには、「定義済タグ」の設計と運用が必須だと感じました。

また、タグを付けることが可能なリソースは下記ドキュメントに記載されています。

Resources That Can Be Tagged

最初の設定は少し手間がかかりますが、後々の運用を考えると、OCIを使い始めるときにこそ、この「定義済タグ」のルールを決めておくのがベストプラクティスですね!

この記事が少しでも参考になると嬉しいです!