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

ApsaraDB RDS:Terraformを使用したバックアップファイルの管理

最終更新日:Jan 24, 2025

このトピックでは、Terraformを使用して、ApsaraDB RDS for PostgreSQLインスタンスのバックアップファイルの作成、バックアップファイルの表示、およびバックアップファイルの削除方法について説明します。 このトピックでは、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環境を準備します。 Terraformを使用するには、次のいずれかの方法を使用できます。

    • Terraform ExplorerでTerraformを使用する: Alibaba Cloudは、Terraformのオンラインランタイム環境であるTerraform Explorerを提供します。 Terraform Explorerにログインした後、Terraformをインストールする必要なくTerraformを使用できます。 詳細については、「Terraform ExplorerでのTerraformの使用」をご参照ください。 この方法は、Terraformを高速かつ便利な方法で追加費用なしで使用およびデバッグするシナリオに適しています。

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

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

Resources

説明

特定のリソースに対して課金されます。 リソースが不要になった場合は、できるだけ早い機会にリソースを解放または購読解除する必要があります。

バックアップファイルの作成

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

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

      variable "region" {
        default = "cn-shenzhen"
      }
      
      variable "zone_id" {
        default = "cn-shenzhen-c"
      }
      
      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
      }
    • main.tfファイルで、リソース "alicloud_rds_backup" "instance" {} 設定項目を追加し、次のコードスニペットに基づいて設定項目を設定します。

      ...
      resource "alicloud_rds_backup" "instance" {
        db_instance_id = alicloud_db_instance.instance.id
        remove_from_state = true
      } 
  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_backup.instance: Creating...
    alicloud_rds_backup.instance: Still creating... [10s elapsed]
    alicloud_rds_backup.instance: Still creating... [20s elapsed]
    ...
    alicloud_rds_backup.instance: Still creating... [4m30s elapsed]
    alicloud_rds_backup.instance: Creation complete after 4m33s [id=pgm-****]
    
    Apply complete!  Resources: 1 added, 0 changed, 0 destroyed.
  5. 結果を確認します。

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

    次のコマンドを実行して、作成されたバックアップファイルを表示します。

    terraform show
    ...
    # alicloud_rds_backup.instance:
    resource "alicloud_rds_backup" "instance" {
        backup_id         = "149xxxxxx"
        backup_method     = "Snapshot"
        backup_type       = "FullBackup"
        db_instance_id    = "pgm-****"
        id                = "pgm-****:****"
        remove_from_state = true
        store_status      = "Enabled"
    }

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

    ApsaraDB RDSコンソールにログインし、作成したバックアップファイルを表示します。备份

バックアップファイルの表示

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

    ...
    data "alicloud_rds_backups" "querybackups" {
      db_instance_id = alicloud_db_instance.instance.id
    }  
  2. 以下のコマンドを実行します。

    terraform apply

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

    alicloud_db_instance.instance: Refreshing state... [id=pgm-****]
    alicloud_rds_backup.instance: Refreshing state... [id=pgm-****:14985****]
    data.alicloud_rds_backups.querybackups: Reading...
    data.alicloud_rds_backups.querybackups: Read complete after 0s [id=52064****]
    
    No changes. Your infrastructure matches the configuration.
    
    Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are
    needed.
    
    Apply complete!  Resources: 0 added, 0 changed, 0 destroyed.
  3. 結果を確認します。

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

    次のコマンドを実行して、バックアップファイルを表示します。

    terraform show
    # data.alicloud_rds_backups.querybackups:
    data "alicloud_rds_backups" "querybackups" {
        backups        = [
            {
                backup_download_url          = ""
                backup_end_time              = "2022-09-29T04:10:15Z"
                backup_id                    = "1498535549"
                backup_initiator             = "User"
                backup_intranet_download_url = ""
                backup_method                = "Snapshot"
                backup_mode                  = "Manual"
                backup_size                  = "53687091200"
                backup_start_time            = "2022-09-29T04:08:34Z"
                backup_status                = "Success"
                backup_type                  = "FullBackup"
                consistent_time              = "1664424514"
                copy_only_backup             = ""
                db_instance_id               = "pgm-****"
                encryption                   = jsonencode({})
                host_instance_id             = "22839235"
                id                           = "pgm-****:1498535549"
                is_avail                     = 1
                meta_status                  = ""
                storage_class                = "0"
                store_status                 = "Enabled"
            },
            {
                backup_download_url          = ""
                backup_end_time              = "2022-09-29T02:55:24Z"
                backup_id                    = "1498486764"
                backup_initiator             = "User"
                backup_intranet_download_url = ""
                backup_method                = "Snapshot"
                backup_mode                  = "Manual"
                backup_size                  = "53687091200"
                backup_start_time            = "2022-09-29T02:50:24Z"
                backup_status                = "Success"
                backup_type                  = "FullBackup"
                consistent_time              = "0"
                copy_only_backup             = ""
                db_instance_id               = "pgm-****"
                encryption                   = jsonencode({})
                host_instance_id             = "22839234"
                id                           = "pgm-****:1498486764"
                is_avail                     = 1
                meta_status                  = ""
                storage_class                = "0"
                store_status                 = "Enabled"
            },
        ]
        db_instance_id = "pgm-****"
        id             = "520646901"
        ids            = [
            "pgm-****:1498535549",
            "pgm-****:1498486764",
        ]
    }

バックアップ設定の変更

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

    ...
    resource "alicloud_db_backup_policy" "instance" {
      instance_id = alicloud_db_instance.instance.id
      preferred_backup_time = "00:00Z-01:00Z"
    }        
  2. 以下のコマンドを実行します。

    terraform apply

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

    alicloud_db_backup_policy.instance: Creating...
    alicloud_db_backup_policy.instance: Creation complete after 2s [id=pgm-****]
    
    Apply complete!  Resources: 1 added, 0 changed, 0 destroyed.
  3. 結果を確認します。

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

    次のコマンドを実行して、バックアップ設定を表示します。

    terraform show
    # alicloud_db_backup_policy.instance:
    resource "alicloud_db_backup_policy" "instance" {
        archive_backup_keep_count       = 1
        archive_backup_keep_policy      = "ByMonth"
        archive_backup_retention_period = 0
        backup_period                   = [
            "Friday",
            "Monday",
            "Saturday",
            "Sunday",
            "Thursday",
            "Tuesday",
            "Wednesday",
        ]
        backup_retention_period         = 7
        backup_time                     = "00:00Z-01:00Z"
        compress_type                   = "1"
        enable_backup_log               = true
        high_space_usage_protection     = "Enable"
        id                              = "pgm-****"
        instance_id                     = "pgm-****"
        local_log_retention_hours       = 0
        local_log_retention_space       = 30
        log_backup                      = true
        log_backup_retention_period     = 7
        log_retention_period            = 7
        preferred_backup_period         = [
            "Friday",
            "Monday",
            "Saturday",
            "Sunday",
            "Thursday",
            "Tuesday",
            "Wednesday",
        ]
        preferred_backup_time           = "00:00Z-01:00Z"
        released_keep_policy            = "None"
        retention_period                = 7
    }
    ...

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

    ApsaraDB RDSコンソールにログインし、バックアップ設定を表示します。备份设置

バックアップファイルの削除

  1. main.tfファイルで、リソース "alicloud_rds_backup" "instance" {} の設定項目を削除します。 この例では、次の情報が削除されます。

    ...
    resource "alicloud_rds_backup" "instance" {
      db_instance_id = alicloud_db_instance.instance.id
      remove_from_state = true
    } 
  2. 以下のコマンドを実行します。

    terraform apply

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

    alicloud_rds_backup.instance: Destroying... [id=pgm-****:1498535549]
    alicloud_rds_backup.instance: Destruction complete after 0s
    
    Apply complete!  Resources: 0 added, 0 changed, 1 destroyed.
  3. 結果を確認します。

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

    次のコマンドを実行して、バックアップファイルが削除されているかどうかを確認します。

    terraform show
    ...
    # data.alicloud_rds_backups.querybackups:
    data "alicloud_rds_backups" "querybackups" {
        backups        = []
        db_instance_id = "pgm-****"
        id             = "0"
        ids            = []
    }

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

    RDSコンソールにログインします。删除备份

リソースのクリア

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

terraform destroy

完全なサンプルコード

説明

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

サンプルコード

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

variable "zone_id" {
  default = "cn-shenzhen-c"
}

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

variable "target_minor_version" {
  default = "rds_postgres_1300_20240830"
}

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
}

resource "alicloud_security_group" "example" {
  name   = "terraform-example"
  vpc_id = alicloud_vpc.main.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
}

# Modify backup settings.
#resource "alicloud_db_backup_policy" "instance" {
#  instance_id           = alicloud_db_instance.instance.id
#  preferred_backup_time = "00:00Z-01:00Z"
#}

# View the backup file.
#data "alicloud_rds_backups" "example" {
#  db_instance_id    = alicloud_db_instance.instance.id
#}

さらに多くの例を体験したい場合は、[クイックスタート] ページに移動し、対応するサービスのフォルダーにある例を表示します。

関連ドキュメント

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

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