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

CloudOps Orchestration Service:Tair (Redis OSS-compatible)インスタンスのデータをOSSバケットに定期的にバックアップする

最終更新日:Jan 17, 2025

このトピックでは、CloudOps Orchestration Service (OOS) を使用して、Tair (Redis OSS-compatible)インスタンスのデータをObject Storage Service (OSS) バケットに定期的にバックアップする方法について説明します。 この方法は、データセキュリティの確保、O&Mの簡素化、コスト削減などの問題を解決するのに役立ちます。

前提条件

Function Computeが有効化されています。 詳細については、「関数の迅速な作成」をご参照ください。

背景情報

Tair (Redis OSS-compatible)は、成長するビジネスデータのストレージに関する要件を満たす高性能メモリデータストレージソリューションを提供します。 データのスケジュールされたバックアップは、データセキュリティにとって重要です。 Tair (Redis OSS-compatible)のスケジュールバックアップ機能は、データベース管理の重要な部分です。 この機能は、ディザスタリカバリ、履歴データクエリ、環境クローンなどのシナリオで使用できます。 バックアップサイクルを指定して、ビジネス要件に基づいてTair (Redis OSS-compatible)インスタンスのデータを自動的にバックアップできます。 詳細については、「自動または手動バックアップ」をご参照ください。 ただし、このバックアップ方法には次の欠点があります。

  1. データセキュリティリスク: インスタンスが削除された後、バックアップデータは完全に保存できず、失われる可能性があります。

  2. 複雑なO&M操作: データのダウンロードとアップロードを含むバックアップ操作は、手動で実行する必要があります。 これは時間がかかり、エラーを起こしやすい。

  3. O&Mコストの増加: バックアッププロセスを手動で実行する必要があるため、O&Mコストが増加します。 これは、より多くの時間とリソースを消費し、エラーを起こしやすい。

  4. 低効率: バックアッププランを使用して、一度に複数のインスタンスをバックアップしたり、リージョン間のインスタンスを一元的にバックアップしたりすることはできません。 これは非効率的であり、管理は複雑である。

  5. 不十分な監視とアラート機能: 効率的な監視とアラートのメカニズムがないため、バックアップタスクのステータスを制御できません。 エラーまたは失敗は、最も早い機会に対処することはできません。

これらの欠点に対処するために、Alibaba Cloudは、Tair (Redis OSS-compatible)インスタンスのデータを効率的かつ安全にOSSにバックアップできるOOSベースのバックアップソリューションを提供しています。 このソリューションには次の利点があります。

  1. データセキュリティの向上: バックアップファイルはOSSに自動的にアップロードされます。 OSSの冗長ストレージメカニズムは、ハードウェア障害時のデータの耐久性と可用性を保証します。 さらに、バックアップしたTair (Redis OSS-compatible)インスタンスが削除された場合でも、バックアップファイルを永続的に保存できます。

  2. 完全に自動化されたO&M: 設定が完了すると、手動操作を必要とせずに、指定されたバックアップサイクルに基づいてバックアップファイルがOSSに自動的にアップロードされます。 これにより、O&Mワークロードと操作エラーが大幅に削減されます。

  3. リージョン間の複数のインスタンスの集中管理: スケジュールされたバックアップタスクに、一度に複数のTair (Redis OSS-compatible)インスタンスを指定できます。 さらに、OOSを使用すると、複数のリージョンでバックアップファイルをOSSに保存できます。 異なるリージョンにあるTair (Redis OSS-compatible)インスタンスのデータを同じOSSバケットにバックアップできます。

  4. 柔軟で費用効果の高いバックアップポリシー: ビジネス要件に基づいてバックアップ頻度を指定し、OSSのライフサイクルポリシーを使用して期限切れのバックアップファイルを自動的にクリアできます。 これにより、より効率的な方法でコストを管理できます。

  5. モニタリングとアラート: OSSとCloudMonitorを使用して、バックアップステータスをリアルタイムでモニタリングできます。 バックアップタスクが失敗したり、その他の問題が発生した場合は、アラート通知をタイムリーに受信して、データのセキュリティを確保できます。

手順

重要

データバックアップ中に課金される場合があります。 詳細については、「自動または手動バックアップ」および「課金の概要」をご参照ください。

  1. OOS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、[自動タスク] > [スケジュールされたO&M] を選択します。[スケジュールされたO&M] ページで、[作成] をクリックします。

  3. [スケジュールタスクの設定] セクションで、[スケジュールタスクの種類] パラメーターを設定します。

    有効な値: 今すぐ実行、指定された時刻に1回実行、および定期的に実行。 [今すぐ実行] を選択した場合、スケジュールされたO&Mタスクは作成後すぐに実行されます。 [指定時刻に1回実行] を選択した場合、スケジュールされたO&Mタスクは指定時刻に1回だけ実行されます。 [定期的に実行] を選択した場合、スケジュールされたO&Mタスクはスケジュールされた時間に基づいて定期的に実行されます。 たとえば、スケジュールされたO&Mタスクを1時間ごとに実行するように指定できます。

    image.png

    この例では、[Periodically実行] が選択されています。 [選択] をクリックするか、CRON式を使用して実行頻度を指定できます。 [選択] をクリックします。 [実行頻度の選択] ダイアログボックスで、[時間] タブをクリックし、[時間] を選択し、[OK] をクリックします。

  4. [テンプレートの選択] セクションで、ACS-Redis-BulkyCreateBackupAndUploadToOSSテンプレートを検索して選択します。

    image.png

  5. [テンプレートパラメーターの設定] セクションで、バックアップするTair (Redis OSS-compatible)インスタンスが存在するリージョンを [RegionId] ドロップダウンリストから選択します。 [インスタンスの選択] をクリックします。 [インスタンスの選択] ダイアログボックスで、バックアップするインスタンスを選択します。 次に、[OK] をクリックします。

    image.png

    image.png

  6. OSSRegionIdおよびOSSBucketNameパラメーターを設定します。

    image.png

  7. O&Mタスクの実行に必要なRAM (Resource Access Management) ロールを設定します。

    image.png

    OOSのRAMロールを作成します。 詳細については、「OOS への権限を RAM を使用して付与する」をご参照ください。 次のポリシーをRAMロールにアタッチします。

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "kvstore:CreateBackup",
                    "kvstore:DescribeBackupTasks",
                    "kvstore:DescribeBackups",
                    "kvstore:DescribeInstances"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "ros:CreateStack",
                    "ros:DeleteStack",
                    "ros:GetStack"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": "oos:StartExecution",
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "fc:CreateFunction",
                    "fc:CreateService",
                    "fc:DeleteFunction",
                    "fc:DeleteService",
                    "fc:GetFunction",
                    "fc:GetService",
                    "fc:InvokeFunction"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Condition": {
                    "StringEquals": {
                        "acs:Service": "fc.aliyuncs.com"
                    }
                },
                "Action": "ram:PassRole",
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }

    Function Computeがバックアップファイルをダウンロードするために引き受けるAliyunFCDefaultRole RAMロールを作成します。 [ロールの作成] をクリックすると、Function Computeに必要なRAMロールをすばやく作成できます。image

  8. [作成] をクリックします。 [パラメーターの確認] メッセージで、[OK] をクリックします。 O&Mタスクが作成されました。

    image.png

  1. タスクの実行結果を表示します。

    a. 指定した時間にO&Mタスクがトリガーされるまで待機し、結果を表示できます。

    b. O&Mタスクの詳細ページに移動し、右上隅の [トリガー] をクリックして結果を表示することもできます。

    image.png

    タスクがトリガーされた後、実行ログを表示してタスクの進行状況を確認できます。image.png

  1. OSSに保存されているバックアップファイルを表示します。

    実行が終了状態になるまで待ちます。 次に、実行IDをクリックします。

    image.png

    [実行手順と結果] セクションで、[子実行] タブをクリックします。 表示する子実行を見つけて、子実行IDをクリックします。

    image.png

    [出力] タブの [値] 列に表示されるURLをコピーします。

    image.png

    コピーしたURLを使用してOSSコンソールにログインし、保存されているバックアップファイルを表示します。

    バックアップファイルの形式は次のとおりです。

    Backup_[Instance ID]/[Date in the YYYY-MM-DD format]/[OOS backup task ID]/[Backup file name].rdb
    • バックアップしたTair (Redis OSS-compatible)インスタンスがクラスターアーキテクチャを使用していない場合、バックアップごとに1つのRDBファイルが生成されます。

    • バックアップするTair (Redis OSS-compatible)インスタンスがクラスターアーキテクチャを使用している場合、バックアップごとに生成されるRDBファイルの数はシャードの数と同じです。 たとえば、8つのシャードを持つクラスターインスタンスに対して8つのRDBファイルが生成されます。

    • バックアップファイルは自動的に削除されません。 ビジネス要件に基づいてバックアップファイルを保持または削除できます。

      image.png

付録

実行フローチャート

実行プロセス全体を次の図に示します。

image.png

次の図は、Tair (Redis OSS-compatible)インスタンスのバックアップファイルを作成し、バックアップファイルをOSSにアップロードするプロセスを示しています。image.png

テンプレート

次のサンプルコードは、この例で使用されているACS-Redis-BulkyCreateBackupAndUploadToOSSテンプレートの内容を示しています。

FormatVersion: OOS-2019-06-01
Description:
  en: Create Redis backups in batches and upload them to OSS. Backing up redis and using fc to upload the backup to OSS may incur charges. For billing details, please refer to <a href='https://www.alibabacloud.com/help/en/redis/user-guide/automatic-or-manual-backup'>Redis Backup Fee Instructions</a> and <a href='https://www.alibabacloud.com/help/en/functioncompute/fc-2-0/product-overview/billing-overview'>Function calculation billing instructions</a>
    
  name-en: ACS-Redis-BulkyCreateBackupAndUploadToOSS
   
Parameters:
  regionId:
    Label:
      en: RegionId
       
    Type: String
    AssociationProperty: RegionId
    Default: '{{ACS::RegionId}}'
  targets:
    Type: Json
    Label:
      en: TargetInstance
       
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: ALIYUN::Redis::Instance
      RegionId: regionId
  OSSRegionId:
    Label:
      en: OSSRegionId
       
    Type: String
    AssociationProperty: RegionId
  OSSBucketName:
    Label:
      en: OSSBucketName
       
    Type: String
    AssociationProperty: ALIYUN::OSS::Bucket::BucketName
    AssociationPropertyMetadata:
      RegionId: ${OSSRegionId}
  rateControl:
    Label:
      en: RateControl
       
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 10
  OOSAssumeRole:
    Label:
      en: OOSAssumeRole
       
    Type: String
    Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: GetInstance
    Description:
      en: Get the redis instances
       
    Action: ACS::SelectTargets
    Properties:
      ResourceType: ALIYUN::Redis::Instance
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ targets }}'
    Outputs:
      InstanceIds:
        Type: List
        ValueSelector: Instances.Instance[].InstanceId
  - Name: CreateBackupAndUploadToOSS
    Action: ACS::Redis::CreateBackupAndUploadToOSS
    Description:
      en: Create backup and upload to OSS
       
    Properties:
      regionId: '{{ regionId }}'
      instanceId: '{{ ACS::TaskLoopItem }}'
      OSSRegionId: '{{ OSSRegionId }}'
      OSSBucketName: '{{ OSSBucketName }}'
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ GetInstance.InstanceIds }}'
      Outputs:
        OSSObjectURLs:
          AggregateType: Fn::ListJoin
          AggregateField: OSSObjectURL
    Outputs:
      OSSObjectURL:
        Type: String
        ValueSelector: .OSSObjectURL + "{{ACS::ExecutionId}}/"  | split(".t0") | .[0]
Outputs:
  OSSObjectURLs:
    Type: List
    Value: '{{ CreateBackupAndUploadToOSS.OSSObjectURLs }}'

次のサンプルコードは、Action: ACS::Redis::CreateBackupAndUploadToOSSの内容を示しています。

FormatVersion: OOS-2019-06-01
Description:
  en: Create redis backup and upload to OSS
   
  name-en: ACS::Redis::CreateBackupAndUploadToOSS
   
Parameters:
  regionId:
    Label:
      en: RegionId
       
    Type: String
    AssociationProperty: RegionId
  instanceId:
    Label:
      en: InstanceId
       
    Type: String
    AssociationProperty: ALIYUN::Redis::Instance::InstanceId
    AssociationPropertyMetadata:
      RegionId: ${regionId}
  OSSRegionId:
    Label:
      en: OSSRegionId
       
    Type: String
    AssociationProperty: RegionId
  OSSBucketName:
    Label:
      en: OSSBucketName
       
    Type: String
    AssociationProperty: ALIYUN::OSS::Bucket::BucketName
    AssociationPropertyMetadata:
      RegionId: ${OSSRegionId}
    Default: ''
Tasks:
  - Name: CreateBackup
    Action: ACS::ExecuteApi
    Description:
      en: Create backup
       
    Properties:
      Service: r-kvstore
      API: CreateBackup
      Parameters:
        RegionId: '{{ regionId }}'
        InstanceId: '{{ instanceId }}'
    Outputs:
      BackupJobID:
        Type: String
        ValueSelector: .BackupJobID
  - Name: WaitForBackupCreated
    Action: ACS::WaitFor
    Description:
      en: Wait for backup created
       
    Retries: 30
    DelayType: Exponential
    Delay: 2
    BackOff: 2
    Properties:
      Service: r-kvstore
      API: DescribeBackupTasks
      Parameters:
        RegionId: '{{ regionId }}'
        InstanceId: '{{ instanceId }}'
        BackupJobId: '{{ CreateBackup.BackupJobID }}'
      DesiredValues:
        - Finished
      NotDesiredValues: []
      StopRetryValues: []
      PropertySelector: .BackupJobs[].BackupProgressStatus
  - Name: GetBackupDownloadUrl
    Action: ACS::ExecuteApi
    Description:
      en: Get backup download url
       
    Properties:
      Service: r-kvstore
      API: DescribeBackups
      Parameters:
        RegionId: '{{ regionId }}'
        InstanceId: '{{ instanceId }}'
        BackupJobId: '{{ CreateBackup.BackupJobID }}'
        StartTime:
          Fn::FormatUTCTime:
            - Fn::AddHour:
                - '{{ ACS::CurrentUTCTime }}'
                - -1
            - '%Y-%m-%dT%H:%MZ'
        EndTime:
          Fn::FormatUTCTime:
            - '{{ ACS::CurrentUTCTime }}'
            - '%Y-%m-%dT%H:%MZ'
    Outputs:
      BackupDownloadURL:
        Type: List
        ValueSelector: .Backups.Backup[].BackupDownloadURL
  - Name: UploadBackupToOSS
    Action: ACS::FC::ExecuteScript
    Description:
      en: Upload backup to OSS
       
    Properties:
      runtime: python3.10
      handler: index.handler
      role: acs:ram::{{ACS::AccountId}}:role/AliyunFcDefaultRole
      script: |-
        import oss2
        import requests

        def handler(event, context):
          auth = oss2.StsAuth(context.credentials.access_key_id, context.credentials.access_key_secret, context.credentials.security_token)
          endpoint = 'https://oss-{{OSSRegionId}}.aliyuncs.com'
          bucket = oss2.Bucket(auth, endpoint, '{{OSSBucketName}}')
          unique_identifier = '{{ACS::TaskLoopItem}}'.split('?')[0].split('/')[-1]
          execution_id = '{{ACS::ExecutionId}}'.split('.')[0]
          input = requests.get('{{ACS::TaskLoopItem}}')
          bucket.put_object(f'Backup_{{InstanceId}}/{{ACS::CurrentDate}}/{execution_id}/{unique_identifier}', input)
    Loop:
      Items: '{{ GetBackupDownloadUrl.BackupDownloadURL }}'
      RateControl:
        Mode: Concurrency
        MaxErrors: 0
        Concurrency: 20
Outputs:
  OSSObjectURL:
    Type: String
    Value: https://oss.console.aliyun.com/bucket/oss-{{OSSRegionId}}/{{OSSBucketName}}/object?path=Backup_{{InstanceId}}/{{ACS::CurrentDate}}/