コンテンツにスキップ

Always Free ガードレール

PAYG アカウントにはクレジットカードが紐づいているため、シェイプ(Shape)を 1 つ間違えるだけで実際に課金されます。以下は学習期間中ずっと守ってきたルールです。

ルール

リソース ルール 理由
リージョン(Region) ホームリージョン(Home Region、ap-osaka-1)のみ使用 Always Free の Compute はホームリージョンにしか作成できない
Compute VM.Standard.A1.Flex は合計 4 OCPU / 24GB 以内、または VM.Standard.E2.1.Micro を最大 2 台 超えた分は従量課金
ブロック・ボリューム(Block Volume) ブート・ボリューム(Boot Volume)も含めて合計 200GB 以内 ブート・ボリュームは最小 50GB → 実質 VM は最大 4 台
ロード・バランサ(Load Balancer) flexible、帯域 min = max = 10Mbps、1 つだけ デフォルト値やその他の帯域は課金対象
Autonomous DB is_free_tier = true をコードに直書きし、変数にはしない この 1 行が漏れると有償の ADB になる
OKE type = "BASIC_CLUSTER" ENHANCED_CLUSTER はコントロール・プレーン(Control Plane)が時間課金
オブジェクト・ストレージ(Object Storage) 20GB 以内 state ファイルの容量は無視できる程度

書き間違いをコードで防ぐ

記憶に頼るのは危ないので、ルールはできるだけコードに書き込みます。

variable "shape" {
  type = string
  validation {
    condition     = contains(["VM.Standard.A1.Flex", "VM.Standard.E2.1.Micro"], var.shape)
    error_message = "Always Free のシェイプのみ指定できます:VM.Standard.A1.Flex または VM.Standard.E2.1.Micro。"
  }
}
  • validation があれば terraform plan の段階でエラーになり、課金リソースが作られることはありません
  • ADB の is_free_tier や OKE の type のように「間違えると課金される」値は、変数にせず直書きします

アラートと確認

  1. 予算(Budget)アラート:コンパートメント(Compartment)tf-lab に $1、テナンシ(Tenancy)全体に $5。実績が 1% を超えたらメール通知
    • 予算の評価は数時間おきで、リアルタイムではありません。これだけに頼るのは危険です
  2. 演習が終わったらすぐ terraform destroy。次の Phase で枠が必要なときも、先に前の Phase を削除します
  3. Usage API で費用を確認:ローカルのスクリプト tools/cost.py(OCI Python SDK の request_summarized_usages)
    • サービス + SKU ごとに集計。コンソール(GUI)を開く必要がありません
    • データには数時間〜1 日の遅れがあります

結果

Phase 0〜6 をすべて終えて、テナンシ全体の費用は 0 円でした。

  • A1、E2 Micro、ブロック・ボリューム、LB、ADB いずれも使用量の記録はありますが、金額はすべて 0
  • NAT ゲートウェイ(NAT Gateway)/ サービス・ゲートウェイ(Service Gateway)は明細に出てきません(そもそも課金 SKU がない)
  • OKE Basic クラスタのコントロール・プレーンも明細に出てきません(無料)

Kubernetes が間接的に作るリソース

OKE では Service type=LoadBalancer が OCI の LB を、PVC がブロック・ボリュームを作成します。これらは Terraform の state に含まれないため、terraform destroy では削除できません。 先に kubectl delete、そのあと terraform destroy の順で実行します。詳しくは Phase 6 を参照してください。