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のように「間違えると課金される」値は、変数にせず直書きします
アラートと確認¶
- 予算(Budget)アラート:コンパートメント(Compartment)
tf-labに $1、テナンシ(Tenancy)全体に $5。実績が 1% を超えたらメール通知- 予算の評価は数時間おきで、リアルタイムではありません。これだけに頼るのは危険です
- 演習が終わったらすぐ
terraform destroy。次の Phase で枠が必要なときも、先に前の Phase を削除します - 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 を参照してください。