ボリュームの管理
OCI Terraformプロバイダを使用して、ブート・ボリュームを管理します。
このガイドでは、次のシナリオについて説明します:
- コンピュート・インスタンスをスケーリングする際のブート・ボリュームの保持
- ブート・ボリュームのトラブルシューティングおよび修復
- 別の可用性ドメインへのボリュームのレプリケート
ブート・ボリュームの詳細は、ブート・ボリュームを参照してください。
ブート・ボリュームの保存
同じブート・ボリュームを使用しながらコンピュート・インスタンスのシェイプを変更できます。インスタンスを終了するとき、関連するブート・ボリュームを保存しておいて、別のインスタンス・タイプやシェイプで新しいインスタンスを作成することができます。このアプローチは、インスタンスのサイズ設定中にインスタンス・シェイプを変更できないシナリオに役立ちます。
これを実現するには、実行中のインスタンスからブート・ボリュームをデタッチする必要があります。これは、ブート・ボリュームを保持したままインスタンスを終了するか、インスタンスを停止してブート・ボリュームをデタッチすることで実行できます。
タイプがoci_core_instanceのすべてのTerraformリソースでは、パラメータpreserve_boot_volumeがデフォルトでtrueに設定されています。このパラメータにより、インスタンスの終了時に、アタッチされたブート・ボリュームが終了しないことが保証されます。
resource "oci_core_instance" "TFInstance" {
...
state = "STOPPED" // set this state to stop the instance
preserve_boot_volume = true
}
output "bootVolumeFromInstance" {
value = [oci_core_instance.TFInstance.boot_volume_id]
}
次の例に示すように、ブート・ボリュームがデタッチされた後は、新しいインスタンスのソースと呼ばれることができます:
resource "oci_core_instance" "TFScaleInstance" {
...
source_details {
source_type = "bootVolume"
// reference the original boot volume id here
source_id = "ocid1.bootvolume.oc1.phx.exampleuniqueID"
}
}
トラブルシューティングおよび修復のためのブート・ボリュームのデタッチ
ブート・ボリュームの問題がコンピュート・インスタンスの問題を引き起こしていると考えられる場合は、インスタンスを停止し、ブート・ボリュームをデタッチできます。その後、それをデータ・ボリュームとして別のインスタンスにアタッチすることにより、トラブルシューティングを実行できます。問題を解決した後は、それを元のインスタンスに再アタッチするか、それを使用して新しいインスタンスを起動することができます。
ブート・ボリュームがデタッチされた後は、ブート・ボリュームのOCIDを、別のインスタンスのブロック・ボリューム・パラメータとして参照できます。
resource "oci_core_volume_attachment" "TFBlockAttach" {
...
attachment_type = "iscsi"
compartment_id = "ocid1.compartment.oc1..exampleuniqueID"
// new instance
instance_id = "ocid1.instance.oc1.phx.exampleuniqueID"
// attach the boot volume as a block volume
volume_id = "ocid1.bootvolume.oc1.phx.exampleuniqueID"
}
問題を解決した後、2番目のインスタンスからこのボリュームをデタッチし、ブート・ボリュームとして元のインスタンスにアタッチします。
resource "oci_core_instance" "TFScaleInstance" {
...
source_details {
source_type = "bootVolume"
// attach back as boot volume
// reference the volume id here
source_id = "ocid1.bootvolume.oc1.phx.exampleuniqueID"
}
}
リージョン内の可用性ドメインへのボリュームのレプリケート
Terraformを使用して、既存のコンピュート・インスタンスのブート・ボリュームとブロック・ボリュームを、同じリージョン内の別のアベイラビリティ・ドメインにレプリケートできます。
ボリュームをレプリケートするには、次のようにします:
oci_core_boot_volumeまたはoci_core_volumeを使用して、ボリュームのデータ・ソースを作成します。- ソース・ボリュームのバックアップを作成するには、
oci_core_boot_volume_backupまたはoci_core_volume_backupリソースを使用します。 - バックアップから作成するターゲット・ボリューム・リソースを定義します。
次のTerraform構成の例では、ブート・ボリュームとブロック・ボリュームの両方をレプリケートしています:
provider "oci" {
region = "us-ashburn-1"
}
locals {
compartment_id = "ocid1.compartment.oc1..exampleuniqueID"
target_ad = "ilMx:US-ASHBURN-AD-2"
source_boot_id = "ocid1.bootvolume.oc1.iad.exampleuniqueID"
source_volume_id = "ocid1.volume.oc1.iad.exampleuniqueID"
}
# Boot Volume Clone
data "oci_core_boot_volume" "source" {
boot_volume_id = local.source_boot_id
}
resource "oci_core_boot_volume_backup" "backup" {
boot_volume_id = data.oci_core_boot_volume.source.id
type = "FULL"
}
resource "oci_core_boot_volume" "target" {
availability_domain = local.target_ad
compartment_id = local.compartment_id
source_details {
id = oci_core_boot_volume_backup.backup.id
type = "bootVolumeBackup"
}
display_name = "Test Cloned Boot Volume"
}
# Block Volume Clone
data "oci_core_volume" "source" {
volume_id = local.source_volume_id
}
resource "oci_core_volume_backup" "backup" {
volume_id = data.oci_core_volume.source.id
type = "FULL"
}
resource "oci_core_volume" "target" {
availability_domain = local.target_ad
compartment_id = local.compartment_id
source_details {
id = oci_core_volume_backup.backup.id
type = "volumeBackup"
}
display_name = "Test Cloned Block Volume"
}
次のステップを実行して、2番目の可用性ドメインにインスタンスを移動したり、2番目の可用性ドメインにディザスタ・リカバリ・デプロイメントを作成したりできます。
ソース・ボリューム(およびバックアップ)が複製後に削除される純粋なターゲット変更のシナリオでこの方法を使用する場合は、次に適用するときにターゲット・インスタンスが破棄されないよう、ソース・ボリュームの削除後にTerraform構成をリファクタする必要があります。
このシナリオをディザスタ・リカバリのコールド・スタンバイに使用する場合、Terraformのtaintコマンドを定期的に使用して、次に構成を適用する際に破棄や再作成を行うボリュームをマークできます。