OCIのComputeをTerraformで構築する際につまづいたポイントをメモ代わりに残しておこうと思います。
TerraformはローカルのWindowsにインストールしています。
手順はこちらのOCIチュートリアルを参照。
この記事は下記リンク先とほとんど同じではあるものの、最新のシェイプのVM.Standard.E5.Flex
をデプロイする時だとこの通りに行かないので、その辺りを中心に書きます。
前提条件
- OCIのアカウントを持っていること
- VCNの作成が完了していること
- Terraformのインストールなどの設定が完了していること
- Terraformのバージョンは1.13.1です
必要な情報の収集
スクリプトを記述する際に、以下の情報が必要となるので、事前にメモ帳にまとめておきます。
- テナンシOCID
- コンパートメントOCID
- APIキーのフィンガープリント
- リージョン名(東京リージョンならap-tokyo-1)
- API署名用のRSAキーのディレクトリパス
- SSH公開鍵のディレクトリパス
- インスタンスシェイプ
- インスタンスイメージOCID
- サブネットのOCID
RSAキー、SSH公開鍵のディレクトリパスについて
ローカルのファイルに鍵を置いていたので、普通にコピーすると以下のようにコピーされます。
C:\xxx\xxx\.oci\oci_api_key.pem
しかし、\
だとError: Invalid escape sequence
となるので、/
に修正しておく必要があります。
Github Copilotが事前にエラーを表示してくれていたのを無視して強行突破したらエラー出ました...
インスタンスシェイプの情報について
シェイプの一覧は下記のリンク先にあるので、作成したいシェイプを選択します。
インスタンスイメージのOCIDについて
今回は、Oracle-Autonomous-Linux-9.6-2025.09.18-0
を東京リージョンに作りたいので、以下のOCIDになります。
ocid1.image.oc1.ap-tokyo-1.aaaaaaaaumo2uzlz4yxl77p5lmjearkcwkvg25konr7ttyztfk2nddt5qrxa
リージョンごとにOCIDが異なるので、下記リンクから使いたいリージョンのOCIDを探します。
スクリプトの作成
スクリプトは、provider-tf
、availability-domains.tf
、output.tf
に関してはOCIチュートリアルに記載の内容で問題ありませんでした。
compute.tfの作成
compute.tf
に関しては、OCIチュートリアルではVM.Standard2.1
という古いシェイプを使っているのと、子のシェイプはOCPUとメモリが固定値でした。
しかし、今回使うVM.Standard.E5.Flex
はフレキシブルシェイプなので、スクリプトの中でOCPUとメモリを指定してあげる必要があります。
それを考慮すると下記のようなスクリプトになります。
今回は小さめの1OCPU、16GBのインスタンスを作成します。
resource "oci_core_instance" "test-terraform" {
# Required
availability_domain = data.oci_identity_availability_domains.ads.availability_domains[0].name
compartment_id = "ocid1.compartment.oc1..xxx"
shape = "VM.Standard.E5.Flex"
source_details {
source_id = "ocid1.image.oc1.ap-tokyo-1.aaaaaaaaumo2uzlz4yxl77p5lmjearkcwkvg25konr7ttyztfk2nddt5qrxa"
source_type = "image"
}
# Optional
display_name = "test-terraform"
create_vnic_details {
assign_public_ip = true
subnet_id = "ocid1.subnet.oc1.ap-tokyo-1.xxx"
}
metadata = {
ssh_authorized_keys = file("C:/xxx/xxx/ssh-key-xxx.key.pub")
}
preserve_boot_volume = false
# インスタンスのシェイプ構成
shape_config {
# CPU数を設定
ocpus = 1
# メモリサイズを設定
memory_in_gbs = 16
}
}
その他のOptionなどについてはTerraformのドキュメントについて詳しく書いてありました。
一応、OCIのドキュメントにも書いてありましたが、Terraformのドキュメントの方が細かく記載されています。
インスタンスのプロビジョニング
# 初期化
terraform init
# 計画
terraform plan
# 適用
terraform apply
プロビジョニングの確認
# プロビジョニングの確認
terraform apply
一応コンソールからも確認しておきます。
きちんと指定したシェイプで作成されていました。