すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Terraform を使用したアプリケーションのバックアップと復元

最終更新日:Mar 26, 2026

Terraform CLI を使用して、ACK クラスター内にバックアップリポジトリ、アプリケーションバックアップ、アプリケーション復元用のカスタムリソース (CR) をデプロイします。これにより、バックアップおよび移行全体のワークフローをインフラストラクチャコードとして管理できます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

注意事項

  • バックアップまたは復元ジョブを削除する際に、kubectl delete を使用しないでください。関連するクラウドリソースが完全にクリーンアップされない場合があります。バックアップ関連リソースを削除するには、「手順 5:バックアップセンターからリソースを削除」に従ってください。

  • migrate-controller コンポーネントを最新バージョンに更新したままにしてください。詳細については、「コンポーネントの管理」をご参照ください。

  • サンプルコードからパラメーターを削除しないでください。パラメーターが不足すると、バックアップの復元が失敗する可能性があります。

手順 1:クラスターの関連付け

Kubernetes プロバイダーを使用して、Terraform をご利用のクラスターに接続します。詳細については、「Kubernetes プロバイダー」をご参照ください。

以下の例では、kubeconfig ファイルを使用してクラスターを関連付けます。

  1. Terraform の作業ディレクトリを作成します。

  2. 作業ディレクトリ内に、csdr.tf という名前の設定ファイルを作成します。Kubernetes プロバイダーの設定を以下のように追加します。

    provider "kubernetes" {
      config_path = "~/.kube/config"
    }
  3. Terraform 実行環境を初期化するために、以下のコマンドを実行します。

    terraform init

    以下の出力は、Terraform の初期化が正常に完了したことを示しています。

    出力を展開する

    Initializing the backend...
    
    Initializing provider plugins...
    - Reusing previous version of hashicorp/alicloud from the dependency lock file
    - Reusing previous version of hashicorp/kubernetes from the dependency lock file
    - Using previously-installed hashicorp/alicloud v1.223.1
    - Using previously-installed hashicorp/kubernetes v2.30.0
    
    ╷
    │ Warning: Additional provider information from registry
    │
    │ The remote registry returned warnings for registry.terraform.io/hashicorp/alicloud:
    │ - For users on Terraform 0.13 or greater, this provider has moved to aliyun/alicloud. Please
    │ update your source in required_providers.
    ╵
    
    Terraform has been successfully initialized!

手順 2:バックアップリポジトリの作成

  1. csdr.tf に以下の内容を追加し、必要に応じてパラメーターを変更します。

    パラメーター必須説明
    nameはいバックアップリポジトリの名前。Kubernetes の命名規則に準拠している必要があります。
    networkはいOSS バケットへのアクセスに使用するネットワークモード。有効な値:internal(関連付けられたすべてのクラスターがバケットと同じリージョンにある必要があります)、public(リージョン制限なし)。
    regionはいOSS バケットが存在するリージョン。
    bucketはいOSS バケットの名前。必ず cnfs-oss- で始まる必要があります。
    prefixいいえOSS バケット内のサブディレクトリ。指定した場合、バックアップはこのサブディレクトリに保存されます。
    resource "kubernetes_manifest" "backuplocation-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "BackupLocation"
        metadata = {
          name = "<yourBackupLocationName>"
          namespace = "csdr"
        }
    
        spec = {
          backupSyncPeriod = "0s"
          config = {
            network = "internal"
            region  = "cn-beijing"
          }
          objectStorage = {
            bucket  = "<cnfs-oss-yourBucketName>"
            prefix  = "<subDir>"
          }
          provider = "alibabacloud"
        }
      }
      wait {
        fields = {
          "status.phase" = "Available"
        }
      }
    
      timeouts {
        create = "10m"
      }
    }
  2. リソースプランをプレビューするために、以下のコマンドを実行します。

    terraform plan
  3. バックアップリポジトリを作成するために、以下のコマンドを実行します。

    terraform apply

    以下の出力は、バックアップリポジトリが正常に作成されたことを示しています。

    応答を展開する

    kubernetes_manifest.backuplocation-demo: Creating...
    kubernetes_manifest.backuplocation-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

手順 3:バックアップジョブの作成

ご使用のシナリオに応じて、バックアップタイプを選択します。

  • アプリケーションバックアップ:クラスター内で実行中のアプリケーション(クラスターリソースおよびそのアプリケーションが使用する永続ボリュームを含む)をバックアップします。

  • データ保護:永続ボリュームのデータのみをバックアップします。永続ボリューム要求 (PVC) および永続ボリューム (PV) のみが対象です。

これらの 2 つのモードの比較については、「アプリケーションのバックアップとデータ保護のシナリオ」をご参照ください。

アプリケーションバックアップ

即時バックアップの作成

  1. csdr.tf に以下の内容を追加し、必要に応じてパラメーターを変更します。

    wait ブロックはコメントアウトされています(バックアップの所要時間が可変であるため)。Terraform が完了を待機するようにするには、wait および timeouts ブロックのコメントを解除し、必要に応じてタイムアウトを調整してください。

    パラメーター必須説明
    csdr.alibabacloud.com/backuplocationsはいバックアップリポジトリに関する情報。バックアップリポジトリの構成と一致している必要があります。
    nameはい即時バックアップの名前。
    includedNamespacesはいバックアップ対象の名前空間。
    includedResourcesいいえバックアップ対象のクラスターリソースタイプ。includedResources または excludedResources のいずれか一方のみを設定してください。両方とも空欄の場合は、すべてのリソースタイプがバックアップされます。
    excludedResourcesいいえバックアップ対象外のクラスターリソースタイプ。includedResources または excludedResources のいずれか一方のみを設定してください。両方とも空欄の場合は、すべてのリソースタイプがバックアップされます。
    matchLabelsいいえリソースをフィルターするためのラベル。ラベルが一致するリソースのみがバックアップされます。
    includeClusterResourcesいいえクラスター階層のリソース(例:StorageClasses、CustomResourceDefinitions (CRDs)、Webhook)をバックアップするかどうか。true:すべてのクラスター階層リソースをバックアップ。false(ACK コンソールでのデフォルト):指定された名前空間内の名前空間階層リソースによって参照されるクラスター階層リソースのみをバックアップ(例:Pod のサービスアカウントが使用するクラスターロール、カスタムリソースの CRD)。
    defaultPvBackupいいえ永続ボリュームを含めるかどうか。true:アプリケーションおよびその永続ボリュームをバックアップ。false:アプリケーションのみをバックアップ。
    storageLocationはいバックアップリポジトリの名前。クラスターで既に Velero を使用している場合は、DingTalk グループ(ID:35532895)に参加してサポートを受けてください。
    ttlはい保持期間。バックアップの有効期限が切れた後は、データを復元できません。フォーマット:720h0m0s。有効範囲:24h0m0s1572864h0m0s
    resource "kubernetes_manifest" "applicationbackup-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "ApplicationBackup"
        metadata = {
          name      = "<yourApplicationBackupName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          includedNamespaces      = ["default","default1"]
          includedResources       = ["statefulset"]
          excludedResources       = ["excludedResources"]
          labelSelector = {
            matchLabels = {
              "app" = "mysql-sts"
            }
          }
          pvBackup = {
            defaultPvBackup = "false"
          }
          storageLocation          = "<yourBackupLocationName>"
          ttl                      = "720h0m0s"
          includeClusterResources  = "false"
        }
      }
    
      # バックアップの完了は、status.phase が Completed に変化したときです。
      # バックアップの所要時間は、リソース数および永続ボリュームデータ量に依存します。
      #wait {
      #  fields = {
      #    "status.phase" = "Completed"
      #  }
      #}
    
      #timeouts {
      #  create = "60m"
      #}
     }
  2. リソースプランをプレビューするために、以下のコマンドを実行します。

    terraform plan
  3. 即時バックアップを作成するために、以下のコマンドを実行します。

    terraform apply

    以下の出力は、バックアップジョブが正常に作成されたことを示しています。

    kubernetes_manifest.applicationbackup-demo: Creating...
    kubernetes_manifest.applicationbackup-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

バックアップスケジュールの作成

  1. csdr.tf に以下の内容を追加し、必要に応じてパラメーターを変更します。<details> <summary>設定ファイルを表示</summary>

    パラメーター必須説明
    csdr.alibabacloud.com/backuplocationsはいバックアップリポジトリに関する情報。バックアップリポジトリの構成と一致している必要があります。
    nameはいバックアップスケジュールの名前。
    scheduleはいバックアップスケジュール(cron 形式)。cron フィールドの順序:分 時 日 月 曜日。たとえば、"1 4 * * *" は、毎日 04:01 にバックアップを実行します。フォーマットの詳細については、「バックアッププランを作成する際にバックアップサイクルを指定する方法は?」をご参照ください。クイックリファレンス:# ┌── 分 (0–59) ┌── 時 (0–23) ┌── 日 (1–31) ┌── 月 (1–12) ┌── 曜日 (0–6、日曜日=0)
    includedNamespacesはいバックアップ対象の名前空間。
    includedResourcesいいえバックアップ対象のクラスターリソースタイプ。includedResources または excludedResources のいずれか一方のみを設定してください。両方とも空欄の場合は、すべてのリソースタイプがバックアップされます。
    excludedResourcesいいえバックアップ対象外のクラスターリソースタイプ。includedResources または excludedResources のいずれか一方のみを設定してください。両方とも空欄の場合は、すべてのリソースタイプがバックアップされます。
    matchLabelsいいえリソースをフィルターするためのラベル。ラベルが一致するリソースのみがバックアップされます。
    includeClusterResourcesいいえクラスター階層のリソースをバックアップするかどうか。即時バックアップのパラメーターテーブルの説明をご参照ください。
    defaultPvBackupはい永続ボリュームを含めるかどうか。true:アプリケーションおよびその永続ボリュームをバックアップ。false:アプリケーションのみをバックアップ。
    storageLocationはいバックアップリポジトリの名前。クラスターで既に Velero を使用している場合は、DingTalk グループ(ID:35532895)に参加してサポートを受けてください。
    ttlはい保持期間。フォーマット:720h0m0s。有効範囲:24h0m0s1572864h0m0s

    設定ファイルを展開する

    resource "kubernetes_manifest" "backupschedule-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "BackupSchedule"
        metadata = {
          name      = "<yourBackupScheduleName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          schedule = "1 4 * * *"
          template = {
            includedNamespaces      = ["default","default1"]
            includedResources       = ["statefulset"]
            excludedResources       = ["excludedResources"]
            labelSelector = {
              matchLabels = {
                "app" = "mysql-sts"
              }
            }
            pvBackup = {
              defaultPvBackup = "false"
            }
            storageLocation          = "<yourBackupLocationName>"
            ttl                      = "720h0m0s"
            includeClusterResources  = "false"
          }
        }
      }
      wait {
        fields = {
          "status.phase" = "Enabled"
        }
      }
      timeouts {
        create = "10m"
      }
    }
  2. リソースプランをプレビューするために、以下のコマンドを実行します。

    terraform plan

    出力を展開する

      # kubernetes_manifest.backupschedule-demo will be created
      + resource "kubernetes_manifest" "backupschedule-demo" {
          + manifest = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "BackupSchedule"
              + metadata   = {
                  + annotations = {
                      + "csdr.alibabacloud.com/backuplocations" = "{name:<yourBackupLocationName>,region:cn-beijing,bucket:<cnfs-oss-yourBucketName>,prefix:<subDir>,provider:alibabacloud}"
                    }
                  + name        = "<yourBackupScheduleName>"
                  + namespace   = "csdr"
                }
              + spec       = {
                  + schedule = "1 4 * * *"
                  + template = {
                      + excludedResources  = [
                          + "excludedResources",
                        ]
                      + includedNamespaces = [
                          + "default",
                          + "default1",
                        ]
                      + includedResources  = [
                          + "statefulset",
                        ]
                      + labelSelector      = {
                          + matchLabels = {
                              + app = "mysql-sts"
                            }
                        }
                      + pvBackup           = {
                          + defaultPvBackup = "false"
                        }
                      + storageLocation    = "<yourBackupLocationName>"
                      + ttl                = "720h0m0s"
                    }
                }
            }
          + object   = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "BackupSchedule"
              + metadata   = {
                  + annotations                = (known after apply)
                  + creationTimestamp          = (known after apply)
                  + deletionGracePeriodSeconds = (known after apply)
                  + deletionTimestamp          = (known after apply)
                  + finalizers                 = (known after apply)
                  + generateName               = (known after apply)
                  + generation                 = (known after apply)
                  + labels                     = (known after apply)
                  + managedFields              = (known after apply)
                  + name                       = "<yourBackupScheduleName>"
                  + namespace                  = "csdr"
                  + ownerReferences            = (known after apply)
                  + resourceVersion            = (known after apply)
                  + selfLink                   = (known after apply)
                  + uid                        = (known after apply)
                }
              + spec       = {
                  + backupAll = (known after apply)
                  + paused    = (known after apply)
                  + schedule  = "1 4 * * *"
                  + template  = {
                      + backupType              = (known after apply)
                      + excludedNamespaces      = (known after apply)
                      + excludedResources       = [
                          + "excludedResources",
                        ]
                      + includeClusterResources = (known after apply)
                      + includedNamespaces      = [
                          + "default",
                          + "default1",
                        ]
                      + includedResources       = [
                          + "statefulset",
                        ]
                      + labelSelector           = {
                          + matchExpressions = (known after apply)
                          + matchLabels      = {
                              + app = "mysql-sts"
                            }
                        }
                      + orderedResources        = (known after apply)
                      + pvBackup                = {
                          + defaultPvBackup  = false
                          + pvcList          = (known after apply)
                          + pvcSelector      = {
                              + matchExpressions = (known after apply)
                              + matchLabels      = (known after apply)
                            }
                          + snapshotPostRule = (known after apply)
                          + snapshotPreRule  = (known after apply)
                        }
                      + storageLocation         = "<yourBackupLocationName>"
                      + ttl                     = "720h0m0s"
                    }
                }
            }
          + timeouts {
              + create = "10m"
            }
    
          + wait {
              + fields = {
                  + "status.phase" = "Enabled"
                }
            }
        }
  3. バックアップスケジュールを作成するために、以下のコマンドを実行します。

    terraform apply

    以下の出力は、バックアップスケジュールが正常に作成されたことを示しています。

    kubernetes_manifest.backupschedule-demo: Creating...
    kubernetes_manifest.backupschedule-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

その他の操作

バックアップスケジュールによって作成されたバックアップの検索

labelSelector を使用して、特定のスケジュールによって作成されたバックアップを一覧表示します。

data "kubernetes_resources" "list-applicationbackup" {
  api_version    = "csdr.alibabacloud.com/v1beta1"
  kind           = "ApplicationBackup"
  namespace      = "csdr"
  label_selector = "csdr/schedule-name=terraform-schedule-test"
}

output "applicationbackup-name" {
  value = data.kubernetes_resources.list-applicationbackup.objects
}

バックアップスケジュールの変更

  1. バックアップスケジュールを一時停止するには、spec.pausedtrue に設定し、その後 spec.schedule などの他のフィールドを変更します。

    設定ファイルを展開する

    resource "kubernetes_manifest" "backupschedule-demo" {
      manifest = {
        apiVersion = "csdr.alibabacloud.com/v1beta1"
        kind       = "BackupSchedule"
        metadata = {
          name      = "<yourBackupScheduleName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          # バックアップスケジュールを一時停止します。
          paused = "true"
          # バックアップサイクルを変更します。
          schedule = "0 5 * * *"
          template = {
            includedNamespaces      = ["default","default1"]
            includedResources       = ["statefulset"]
            excludedResources       = ["excludedResources"]
            labelSelector = {
              matchLabels = {
                "app" = "mysql-sts"
              }
            }
            pvBackup = {
              defaultPvBackup = "false"
            }
            storageLocation          = "vault-a"
            ttl                      = "720h0m0s"
            includeClusterResources  = "false"
          }
        }
      }
      wait {
        fields = {
          # 一時停止後の期待されるステータスは Paused です。
          "status.phase" = "Paused"
        }
      }
      timeouts {
        create = "10m"
      }
    }
  2. 変更内容をプレビューするために、以下のコマンドを実行します。

    terraform plan

    以下の出力は、リソースプランが正常に作成されたことを示しています。

    kubernetes_manifest.backupschedule-demo: Refreshing state...
    
    Terraform used the selected providers to generate the following execution plan. Resource actions
    are indicated with the following symbols:
      ~ update in-place
    
    Terraform will perform the following actions:
    
      # kubernetes_manifest.backupschedule-demo will be updated in-place
      ~ resource "kubernetes_manifest" "backupschedule-demo" {
          ~ manifest = {
              ~ spec       = {
                  ~ paused   = "false" -> "true"
                  ~ schedule = "1 4 * * *" -> "0 5 * * *"
                    # (1 unchanged attribute hidden)
                }
                # (3 unchanged attributes hidden)
            }
          ~ object   = {
              ~ spec       = {
                  ~ paused    = false -> true
                  ~ schedule  = "1 4 * * *" -> "0 5 * * *"
                    # (2 unchanged attributes hidden)
                }
                # (3 unchanged attributes hidden)
            }
    
          ~ wait {
              ~ fields = {
                  ~ "status.phase" = "Enabled" -> "Paused"
                }
            }
    
            # (1 unchanged block hidden)
        }
    
    Plan: 0 to add, 1 to change, 0 to destroy.
  3. 変更を適用するために、以下のコマンドを実行します。

    terraform apply

    以下の出力は、バックアップスケジュールが正常に更新されたことを示しています。

    kubernetes_manifest.backupschedule-demo: Modifying...
    kubernetes_manifest.backupschedule-demo: Modifications complete after 1s
    
    Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

データ保護

即時バックアップの作成

  1. csdr.tf に以下の内容を追加し、必要に応じてパラメーターを変更します。

    resource "kubernetes_manifest" "applicationbackup-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "ApplicationBackup"
        metadata = {
          name      = "<yourApplicationBackupName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          backupType         = "PvBackup"
          includedNamespaces = ["default","default1"]
          pvBackup = {
            pvcList = [
              {
                namespace = "default"
                name      = "pvc-nas"
              },
              {
                namespace = "default1"
                name      = "pvc-oss"
              }
            ]
            storageClassList = ["disk-essd","disk-ssd"]
          }
          storageLocation = "<yourBackupLocationName>"
          ttl             = "720h0m0s"
        }
      }
    
      # バックアップの完了は、status.phase が Completed に変化したときです。
      # バックアップの所要時間は、永続ボリュームデータ量に依存します。
      #wait {
      #  fields = {
      #    "status.phase" = "Completed"
      #  }
      #}
    
      #timeouts {
      #  create = "60m"
      #}
     }
    }
  2. リソースプランをプレビューするために、以下のコマンドを実行します。

    terraform plan
  3. 即時バックアップを作成するために、以下のコマンドを実行します。

    terraform apply

    以下の出力は、バックアップジョブが正常に作成されたことを示しています。

    出力を展開する

    kubernetes_manifest.applicationbackup-demo: Creating...
    kubernetes_manifest.applicationbackup-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

バックアッププランの作成

  1. csdr.tf に以下の内容を追加し、必要に応じてパラメーターを変更します。<details> <summary>設定ファイルを表示</summary>

    パラメーター必須説明
    csdr.alibabacloud.com/backuplocationsはいバックアップリポジトリに関する情報。バックアップリポジトリの構成と一致している必要があります。
    nameはいバックアッププランの名前。
    scheduleはいバックアップスケジュール(cron 形式)です。cron フィールドの順序は、分 時 日 月 曜日 です。フォーマットの詳細については、「バックアッププランを作成するときにバックアップサイクルを指定する方法は?」をご参照ください。
    includedNamespacesはいバックアップ対象の名前空間。
    pvcListいいえ名前および名前空間で指定された PVC をバックアップ対象とします。pvcList および storageClassList の両方が指定されている場合、storageClassList は無視されます。どちらも指定されていない場合、指定された名前空間内のすべての PV がバックアップされます。
    storageClassListいいえバックアップ対象の PV の StorageClass を指定します。
    storageLocationはいバックアップリポジトリの名前。クラスターで既に Velero を使用している場合は、DingTalk グループ(ID:35532895)に参加してサポートを受けてください。
    ttlはい保持期間。フォーマット:720h0m0s。有効範囲:24h0m0s1572864h0m0s
    resource "kubernetes_manifest" "backupschedule-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "BackupSchedule"
        metadata = {
          name      = "<yourBackupScheduleName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          schedule = "1 4 * * *"
          template = {
            includedNamespaces = ["default","default1"]
            pvBackup = {
              pvcList = [
                {
                  namespace = "default"
                  name      = "pvc-nas"
                },
                {
                  namespace = "default1"
                  name      = "pvc-oss"
                }
              ]
              storageClassList = ["disk-essd","disk-ssd"]
            }
            storageLocation = "<yourBackupLocationName>"
            ttl             = "720h0m0s"
          }
        }
      }
      wait {
        fields = {
          "status.phase" = "Enabled"
        }
      }
      timeouts {
        create = "10m"
      }
    }
  2. リソースプランをプレビューするために、以下のコマンドを実行します。

    terraform plan
  3. バックアッププランを作成するために、以下のコマンドを実行します。

    terraform apply

    以下の出力は、バックアッププランが正常に作成されたことを示しています。

    kubernetes_manifest.backupschedule-demo: Creating...
    kubernetes_manifest.backupschedule-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

手順 4:復元ジョブの作成

  1. csdr.tf に以下の内容を追加し、必要に応じてパラメーターを変更します。

    wait ブロックはコメントアウトされています(復元の所要時間が可変であるため)。Terraform が完了を待機するようにするには、wait および timeouts ブロックのコメントを解除し、必要に応じてタイムアウトを調整してください。

    パラメーター必須説明
    csdr.alibabacloud.com/backuplocationsはいバックアップリポジトリに関する情報。バックアップリポジトリの構成と一致している必要があります。
    nameはい復元ジョブの名前。
    appRestoreOnlyいいえアプリケーションバックアップタスク(データ保護ではない)にのみ適用されます。PVC、PV、およびボリュームデータを復元せずにアプリケーションのみを復元するかどうかを指定します。true:アプリケーションのみを復元(データソースを変更する場合は、あらかじめ PVC および PV を手動で作成する必要があります)。false(デフォルト):アプリケーションおよびすべてのボリュームデータを復元。
    preserveNodePortsいいえアプリケーションバックアップタスク(データ保護ではない)にのみ適用されます。NodePort を保持するかどうかを指定します。バックアップおよび復元クラスターが同じ NodePort を共有する場合は、代わりにランダムポートを割り当てるために、これを false に設定します。それ以外の場合は、true に設定します。
    includedNamespacesはい復元対象の名前空間。空欄の場合は、バックアップされたすべての名前空間が復元されます。
    includedResourcesいいえアプリケーションバックアップタスクにのみ適用されます。復元対象のクラスターリソースタイプ。includedResources または excludedResources のいずれか一方のみを設定してください。両方とも空欄の場合は、すべてのリソースタイプが復元されます。
    excludedResourcesいいえアプリケーションバックアップタスクにのみ適用されます。復元対象外のクラスターリソースタイプ。includedResources または excludedResources のいずれか一方のみを設定してください。両方とも空欄の場合は、すべてのリソースタイプが復元されます。
    backupNameはい復元対象のバックアップの名前。スケジュールされたバックアップの場合は、特定のポイントインタイムバックアップの名前を指定します。バックアップ名の形式は <BackupScheduleName>-<Timestamp> であり、<Timestamp>YYYYMMDDhhmmss 形式(例:my-schedule-20221205225845)です。
    namespaceMappingいいえバックアップクラスターの名前空間を復元クラスターの名前空間にマップします。<backupNamespace>:バックアップからの名前空間。<restoreNamespace>:復元クラスターのターゲット名前空間。ターゲット名前空間が存在しない場合は、自動的に作成されます。このパラメーターを空欄のままにした場合、リソースはバックアップ時の名前空間と同じ名前空間に復元されます。
    imageRegistryMappingいいえ復元時にイメージレジストリのアドレスを再マップします。<oldimageregistry>:元のレジストリアドレス。<newImageRegistry>:ターゲットレジストリアドレス。設定されていない場合、イメージ設定は変更されません。
    convertedargいいえファイルシステム型ボリューム(OSS、NAS、CPFS、およびローカルボリューム)の復元時に StorageClass を変換します。サポートされるターゲットタイプ:ディスクまたは NAS StorageClass。StorageClass は現在のクラスターに存在している必要があります。必須フィールド:convertToStorageClassType(ターゲット StorageClass)、namespace(PVC 名前空間)、persistentVolumeClaim(PVC 名)。オプションフィールド:convertToAccessModes(ターゲットアクセスモード)。
    重要

    ReadWriteMany または ReadOnlyMany ボリュームをディスクに復元する場合、強制的なディスクデタッチを防ぐために、convertToAccessModesReadWriteOnce に設定します。バックアップ内の PVC 情報を照会するには、kubectl -ncsdr describe <backup-name> を実行し、status.resourceList.dataResource.pvcBackupInfo を確認してください。

    resource "kubernetes_manifest" "applicationrestore-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "ApplicationRestore"
        metadata = {
          name      = "<yourApplicationRestoreName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          appRestoreOnly     = "false"
          preserveNodePorts  = "true"
          includedNamespaces = ["default","default1"]
          includedResources  = ["statefulset"]
          excludedResources  = ["excludedResources"]
          convertedarg = [
            {
              convertToStorageClassType = "alicloud-disk-topology-alltype"
              namespace                 = "default"
              persistentVolumeClaim     = "pvc-nas"
            },
            {
              convertToStorageClassType = "alicloud-disk-topology-alltype"
              namespace                 = "default1"
              persistentVolumeClaim     = "pvc-oss"
            }
          ]
          backupName       = "<yourApplicationBackupName>"
          namespaceMapping = {
            "<backupNamespace>" = "<restoreNamespace>"
          }
        }
      }
    
      # 復元の完了は、status.phase が Completed に変化したときです。
      # 復元の所要時間は、リソース数および永続ボリュームデータ量に依存します。
      #wait {
      #  fields = {
      #    "status.phase" = "Completed"
      #  }
      #}
    
      #timeouts {
      #  create = "60m"
      #}
    }
  2. リソースプランをプレビューするために、以下のコマンドを実行します。

    terraform plan
  3. 復元ジョブを作成するために、以下のコマンドを実行します。

    terraform apply

    以下の出力は、復元ジョブが正常に作成されたことを示しています。

    返された情報を展開する

    kubernetes_manifest.applicationrestore-demo: Creating...
    kubernetes_manifest.applicationrestore-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

手順 5:バックアップセンターからリソースを削除

重要

他のクラスターでも作成したバックアップリポジトリを使用している可能性があります。BackupLocation オブジェクトの削除はサポートされていません。

バックアップスケジュールの削除

バックアップスケジュールリソースを削除し、スケジュールされたバックアップを停止するには、terraform destroy を実行します。

バックアップまたは復元ジョブの削除

  1. csdr.tf に以下の内容を追加し、必要に応じてパラメーターを変更します。

    パラメーター必須説明
    nameはい削除要求の名前。バックアップジョブの場合は <ApplicationBackupName>-dbr、復元ジョブの場合は <ApplicationRestoreName>-dbr の形式を使用します。
    deleteObjectNameはい削除対象のリソースの名前。
    deleteObjectTypeはい削除対象のリソースのタイプ。"Backup":ApplicationBackup オブジェクトおよび関連リソースを削除。"Restore":ApplicationRestore オブジェクトおよび関連リソースを削除。バックアップジョブを削除しても、クラスター内に既に作成されたバックアップには影響しません。復元ジョブを削除しても、すでに復元されたデータには影響しません。
    resource "kubernetes_manifest" "deleterequest-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "DeleteRequest"
        metadata = {
          name      = "<objectName-dbr>"
          namespace = "csdr"
        }
        spec = {
          deleteObjectName = "<objectName>"
          deleteObjectType = "Backup"
        }
      }
    }
  2. リソースプランをプレビューするために、以下のコマンドを実行します。

    terraform plan
  3. 削除要求を送信するために、以下のコマンドを実行します。

    terraform apply

    以下の出力は、削除要求が正常に処理されたことを示しています。

    出力を展開する

    kubernetes_manifest.deleterequest-demo: Creating...
    kubernetes_manifest.deleterequest-demo: Creation complete after 0s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

    バックアップまたは復元ジョブが削除されると、DeleteRequest リソースは自動的に削除されます。

次のステップ

関連ドキュメント