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

ApsaraDB RDS:Terraformを使用したApsaraDB RDS for PostgreSQLインスタンスのデータの復元

最終更新日:Feb 05, 2025

このトピックでは、Terraformを使用してApsaraDB RDS for PostgreSQLインスタンスを復元する方法について説明します。

説明

このトピックのサンプルコードは、数回クリックするだけで実行できます。 詳細については、「Terraform Explorer」をご参照ください。

前提条件

  • RDSインスタンスが作成されました。 詳細については、「RDSインスタンスの作成」をご参照ください。

  • RDS インスタンスが実行中の状態である必要があります。 次のいずれかの方法を使用して、RDSインスタンスが [実行中] 状態であるかどうかを確認できます。

    • クエリインスタンスの詳細に記載されている手順に従って、statusパラメーターの値を確認します。 値が [実行中] の場合、RDSインスタンスは [実行中] 状態です。

    • ApsaraDB RDSコンソールにログインし、必要なリージョンに切り替えてRDSインスタンスを見つけ、インスタンスのステータスを確認します。

  • Alibaba Cloudアカウントには、アカウント内のリソースに対するすべての権限があります。 Alibaba Cloudアカウントが漏洩した場合、リソースは大きなリスクにさらされます。 Resource Access Management (RAM) ユーザーを使用し、RAMユーザーのAccessKeyペアを作成することを推奨します。 詳細については、「RAMユーザーの作成」および「AccessKeyペアの作成」をご参照ください。

  • RAMを使用して、クラウドリソースに対するアクセス許可を効率的に管理する必要があります。 これにより、マルチユーザーコラボレーションの要件を満たすことができ、最小限の権限 (PoLP) の原則に基づいてユーザーに権限を付与して、過度の権限によるセキュリティの脆弱性を防ぐことができます。 詳細については、「RAMユーザーへの権限付与」をご参照ください。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "vpc:DescribeVpcAttribute",
                    "vpc:DescribeRouteTableList",
                    "vpc:DescribeVSwitchAttributes",
                    "vpc:DeleteVpc",
                    "vpc:DeleteVSwitch",
                    "vpc:CreateVpc",
                    "vpc:CreateVSwitch"
                ],
                "Resource": "*"
            },
            {
                "Action": "rds:*",
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": "dbs:*",
                "Resource": "acs:rds:*:*:*",
                "Effect": "Allow"
            },
            {
                "Action": "hdm:*",
                "Resource": "acs:rds:*:*:*",
                "Effect": "Allow"
            },
            {
                "Action": "dms:LoginDatabase",
                "Resource": "acs:rds:*:*:*",
                "Effect": "Allow"
            },
            {
                "Effect": "Allow",
                "Action": "ram:CreateServiceLinkedRole",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "ram:ServiceName": [
                            "backupencryption.rds.aliyuncs.com"
                        ]
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": "bss:ModifyAgreementRecord",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "bss:DescribeOrderList",
                    "bss:DescribeOrderDetail",
                    "bss:PayOrder",
                    "bss:CancelOrder"
                ],
                "Resource": "*"
            }
        ]
    }
  • Terraformのランタイム環境は、次のいずれかの方法を使用して準備されます。

    • Cloud ShellでTerraformを使用する: TerraformはCloud Shellにプリインストールされ、ID認証情報が設定されています。 Cloud ShellでTerraformコマンドを実行できます。 詳細については、「Cloud ShellでのTerraformの使用」をご参照ください。 この方法は、Terraformを高速で便利な方法で低コストで使用およびデバッグするシナリオに適しています。

    • オンプレミスのマシンにTerraformをインストールして構成する: この方法は、ネットワークの状態が悪い、またはカスタム開発環境が使用されているシナリオに適しています。 詳細については、「ローカルPCでのTerraformのインストールと設定」をご参照ください。

Resources

説明

この例では、特定のリソースに対して料金が生成され得る。 リソースが不要になった場合は、リソースを解放または購読解除する必要があります。

時点ごとにRDSインスタンスを復元する

  1. 作業ディレクトリとmain.tfという名前のファイルをディレクトリに作成します。 次の内容をmain.tfファイルにコピーします。

    • 必要なリソースを作成します。

      variable "region" {
        default = "cn-heyuan"
      }
      
      provider "alicloud" {
        region = var.region
      }
      
      variable "zone_id" {
        default = "cn-heyuan-b"
      }
      
      variable "instance_type" {
        default = "pg.n2.2c.2m"
      }
      
      # Create a VPC.
      resource "alicloud_vpc" "main" {
        vpc_name   = "alicloud"
        cidr_block = "172.16.0.0/16"
      }
      
      # Create a vSwitch.
      resource "alicloud_vswitch" "main" {
        vpc_id     = alicloud_vpc.main.id
        cidr_block = "172.16.192.0/20"
        zone_id    = var.zone_id
      }
      
      # Create an RDS instance.
      resource "alicloud_db_instance" "instance" {
        engine               = "PostgreSQL"
        engine_version       = "13.0"
        instance_type        = var.instance_type
        instance_storage     = "30"
        instance_charge_type = "Postpaid"
        vswitch_id           = alicloud_vswitch.main.id
      }
      
      # Create a backup file.
      resource "alicloud_rds_backup" "instance" {
        db_instance_id    = alicloud_db_instance.instance.id
        remove_from_state = true
      }
      
      # Query backup files.
      data "alicloud_rds_backups" "example" {
        db_instance_id = alicloud_db_instance.instance.id
        depends_on     = [alicloud_rds_backup.instance]
      }
    • main.tfファイルに、リソース "alicloud_rds_clone_db_instance" "clone_time" {} 設定項目を追加し、次のコードスニペットに基づいて設定項目を設定します。

      # Restore an instance by point in time.
      resource "alicloud_rds_clone_db_instance" "clone_time" {
        source_db_instance_id    = alicloud_db_instance.instance.id
        db_instance_description  = "terraform-test-clone"
        db_instance_storage_type = "cloud_essd"
        payment_type             = "PayAsYouGo"
        # Obtain the value of the backup_end_time parameter in the query result. 
        restore_time             = data.alicloud_rds_backups.example.backups.0.backup_end_time
        db_instance_storage      = "50"
      }
    説明

    restore_timeフィールドの値を取得するには、次の手順を実行します。

    1. terraform.tfファイルで、data "alicloud_rds_backups" "example" { db_instance_id = alicloud_db_instance.instance.id} の設定項目を追加してバックアップファイルを照会します。

    2. terraform applyコマンドを実行します。

    3. terraform showコマンドを実行してバックアップファイルに関する情報を照会し、照会結果のbackup_end_timeパラメーターの値を取得します。

    詳細については、「Terraformを使用したApsaraDB RDS For PostgreSQLインスタンスのバックアップファイルの管理」をご参照ください。

  2. 次のコマンドを実行してTerraformを初期化します。

    terraform init

    次の情報が返されると、Terraformは初期化されます。

    Initializing the backend...
    
    Initializing provider plugins...
    - Checking for available provider plugins...
    - Downloading plugin for provider "alicloud" (hashicorp/alicloud) 1.90.1...
    ...
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
  3. 実行計画を作成し、変更をプレビューします。

    terraform plan
  4. 次のコマンドを実行してリソースを作成します。

    terraform apply

    実行中に、プロンプトに従ってyesと入力し、enterキーを押します。 コマンドが実行されるまで待ちます。 次の情報が表示された場合、操作は成功です。

    alicloud_rds_clone_db_instance.example: Creating...
    alicloud_rds_clone_db_instance.example: Still creating... [10s elapsed]
    ...
    alicloud_rds_clone_db_instance.example: Still creating... [24m11s elapsed]
    alicloud_rds_clone_db_instance.example: Creation complete after 24m34s [id=pgm-****]
    
    Apply complete!  Resources: 1 added, 0 changed, 0 destroyed.
  5. 結果を確認します。

    terraform showコマンドを実行します。

    次のコマンドを実行して、RDSインスタンスの復元を表示します。

    terraform show
    ...
    # alicloud_rds_clone_db_instance.example:
    resource "alicloud_rds_clone_db_instance" "example" {
        category                 = "HighAvailability"
        connection_string        = "pgm-****.pg.rds.aliyuncs.com"
        db_instance_class        = "pg.n2.2c.2m"
        db_instance_storage      = 50
        db_instance_storage_type = "cloud_essd"
        deletion_protection      = false
        engine                   = "PostgreSQL"
        engine_version           = "13.0"
        ha_mode                  = "RPO"
        id                       = "pgm-****"
        instance_network_type    = "VPC"
        maintain_time            = "18:00Z-22:00Z"
        payment_type             = "PayAsYouGo"
        port                     = "5432"
        private_ip_address       = "192.168.XX.XX"
        restore_time             = "2022-09-29T04:32:59Z"
        security_ips             = [
            "0.0.0.0/0",
        ]
        source_db_instance_id    = "pgm-****"
        sync_mode                = "Async"
        tcp_connection_type      = "LONG"
        vswitch_id               = "vsw-****"
        zone_id                  = "cn-hangzhou-j"
    }

    ApsaraDB RDSコンソールにログインする

    ApsaraDB RDSコンソールにログインし、RDSインスタンスの復元を表示します。恢复实例

バックアップファイルによるRDSインスタンスの復元

  1. main.tfファイルに、リソース "alicloud_rds_clone_db_instance" "clone_id" {} 設定項目を追加し、次のコードスニペットに基づいて設定項目を設定します。

    ...
    resource "alicloud_rds_clone_db_instance" "clone_id" {
      db_instance_description  = "terraform-test-clone-1"
      source_db_instance_id    = alicloud_db_instance.instance.id
      db_instance_storage_type = "cloud_essd"
      payment_type             = "PayAsYouGo"
      # Obtain the value of the backup_id parameter in the query result. 
      backup_id                = data.alicloud_rds_backups.example.backups.0.backup_id
      db_instance_storage      = "50"
    }         
    説明

    backup_idフィールドの値を取得するには、次の手順を実行します。

    • terraform.tfファイルで、data "alicloud_rds_backups" "querybackups" {db_instance_id = alicloud_db_instance.instance.id} の設定項目を追加してバックアップファイルを照会します。

    • terraform applyコマンドを実行します。

    • terraform showコマンドを実行してバックアップファイルに関する情報を照会し、照会結果のbackup_idパラメーターの値を取得します。

    詳細については、「Terraformを使用したApsaraDB RDS For PostgreSQLインスタンスのバックアップファイルの管理」をご参照ください。

  2. 以下のコマンドを実行します。

    terraform apply

    実行中に、プロンプトに従ってyesと入力し、enterキーを押します。 コマンドが実行されるまで待ちます。 次の情報が表示された場合、操作は成功です。

    alicloud_rds_clone_db_instance.example: Creating...
    alicloud_rds_clone_db_instance.example: Still creating... [10s elapsed]
    ...
    alicloud_rds_clone_db_instance.example: Still creating... [19m31s elapsed]
    alicloud_rds_clone_db_instance.example: Creation complete after 19m39s [id=pgm-bp1sox718o31j940]
    
    Apply complete!  Resources: 1 added, 0 changed, 0 destroyed.
  3. 結果を確認します。

    terraform showコマンドを実行します。

    次のコマンドを実行して、RDSインスタンスの復元を表示します。

    terraform show
    ...
    # alicloud_rds_clone_db_instance.example:
    resource "alicloud_rds_clone_db_instance" "example" {
        backup_id                = "1499356764"
        category                 = "HighAvailability"
        connection_string        = "pgm-****.pg.rds.aliyuncs.com"
        db_instance_class        = "pg.n2.2c.2m"
        db_instance_storage      = 50
        db_instance_storage_type = "cloud_essd"
        deletion_protection      = false
        engine                   = "PostgreSQL"
        engine_version           = "13.0"
        ha_mode                  = "RPO"
        id                       = "pgm-****"
        instance_network_type    = "VPC"
        maintain_time            = "18:00Z-22:00Z"
        payment_type             = "PayAsYouGo"
        port                     = "5432"
        private_ip_address       = "192.168.XX.XX"
        security_ips             = [
            "0.0.0.0/0",
        ]
        source_db_instance_id    = "pgm-****"
        sync_mode                = "Async"
        tcp_connection_type      = "LONG"
        vswitch_id               = "vsw-****"
        zone_id                  = "cn-hangzhou-j"
    }

    ApsaraDB RDSコンソールにログインする

    ApsaraDB RDSコンソールにログインし、RDSインスタンスの復元を表示します。按备份集恢复

リソースのクリア

Terraformを使用して作成または管理された上記のリソースが不要になった場合は、次のコマンドを実行してリソースを解放します。 terraform destroyコマンドの詳細については、「一般的なコマンド」をご参照ください。

terraform destroy

サンプルコード

説明

このトピックのサンプルコードは、数回クリックするだけで実行できます。 詳細については、「Terraform Explorer」をご参照ください。

サンプルコード

variable "region" {
  default = "cn-heyuan"
}

variable "zone_id" {
  default = "cn-heyuan-b"
}

variable "instance_type" {
  default = "pg.n2.2c.2m"
}

provider "alicloud" {
  region = var.region
}

# Create a VPC.
resource "alicloud_vpc" "main" {
  vpc_name   = "alicloud"
  cidr_block = "172.16.0.0/16"
}

# Create a vSwitch.
resource "alicloud_vswitch" "main" {
  vpc_id     = alicloud_vpc.main.id
  cidr_block = "172.16.192.0/20"
  zone_id    = var.zone_id
}

# Create an RDS instance.
resource "alicloud_db_instance" "instance" {
  engine               = "PostgreSQL"
  engine_version       = "13.0"
  instance_type        = var.instance_type
  instance_storage     = "30"
  instance_charge_type = "Postpaid"
  vswitch_id           = alicloud_vswitch.main.id
}

# Create a backup file.
resource "alicloud_rds_backup" "instance" {
  db_instance_id    = alicloud_db_instance.instance.id
  remove_from_state = true
}

# Query backup files.
data "alicloud_rds_backups" "example" {
  db_instance_id = alicloud_db_instance.instance.id
  depends_on     = [alicloud_rds_backup.instance]
}

# Restore an instance by point in time.
resource "alicloud_rds_clone_db_instance" "clone_time" {
  source_db_instance_id    = alicloud_db_instance.instance.id
  db_instance_description  = "terraform-test-clone"
  db_instance_storage_type = "cloud_essd"
  payment_type             = "PayAsYouGo"
  # Obtain the value of the backup_end_time parameter in the query result. 
  restore_time             = data.alicloud_rds_backups.example.backups.0.backup_end_time
  db_instance_storage      = "50"
}

# Restore an RDS instance by backup file.
resource "alicloud_rds_clone_db_instance" "clone_id" {
  db_instance_description  = "terraform-test-clone-1"
  source_db_instance_id    = alicloud_db_instance.instance.id
  db_instance_storage_type = "cloud_essd"
  payment_type             = "PayAsYouGo"
  # Obtain the value of the backup_id parameter in the query result. 
  backup_id                = data.alicloud_rds_backups.example.backups.0.backup_id
  db_instance_storage      = "50"
}

その他の例については、『GitHub』をご参照ください。

関連ドキュメント

  • Terraformの詳細については、Terraformとは何ですか? をご参照ください。

  • Terraformは、ROS (Resource Orchestration service) のマネージドサービスとして使用できます。 Terraformテンプレートを作成して、ApsaraDB RDSリソースを定義し、リソースパラメーターを指定し、リソースの依存関係を設定できます。 詳細については、「Terraformテンプレートの作成」をご参照ください。