全部产品
Search
文档中心

Object Storage Service:Replikasi data (PHP SDK V2)

更新时间:Nov 09, 2025

Replikasi data secara otomatis mereplikasi objek dan operasi terkait, seperti pembuatan, penimpaan, dan penghapusan, dari bucket sumber ke bucket tujuan. Object Storage Service (OSS) mendukung replikasi lintas wilayah (CRR) dan replikasi dalam wilayah yang sama (SRR).

Catatan

  • Kode contoh dalam topik ini menggunakan ID wilayah cn-hangzhou dari wilayah China (Hangzhou) sebagai contoh. Secara default, titik akhir publik digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Secara default, Akun Alibaba Cloud memiliki izin yang diperlukan untuk replikasi data. Jika Anda ingin mereplikasi data sebagai Pengguna RAM atau menggunakan kredensial akses sementara yang disediakan oleh Security Token Service (STS), Anda harus memiliki izin yang sesuai.

    • Untuk mengaktifkan replikasi data, Anda memerlukan izin oss:PutBucketReplication.

    • Untuk mengaktifkan atau menonaktifkan fitur Kontrol Waktu Replikasi (RTC), Anda memerlukan izin oss:PutBucketRtc.

    • Untuk melihat aturan replikasi data, Anda memerlukan izin oss:GetBucketReplication.

    • Untuk melihat wilayah tujuan untuk replikasi, Anda memerlukan izin oss:GetBucketReplicationLocation.

    • Untuk melihat kemajuan replikasi data, Anda memerlukan izin oss:GetBucketReplicationProgress.

    • Untuk menonaktifkan replikasi data, Anda memerlukan izin oss:DeleteBucketReplication.

Kode Contoh

Aktifkan Replikasi Data

Penting

Sebelum mengaktifkan replikasi data, pastikan bahwa baik bucket sumber maupun bucket tujuan berada dalam keadaan tanpa versi atau dengan versi diaktifkan.

Berikut adalah kode contoh yang mengaktifkan replikasi data dan membuat tugas replikasi data yang mereplikasi data dari bucket sumber ke bucket tujuan di wilayah yang sama atau berbeda:

<?php

// Sertakan file autoload untuk memuat SDK dan dependensi lainnya.
require_once __DIR__ . '/../vendor/autoload.php';

// Gunakan namespace Alibaba Cloud OSS V2.
use AlibabaCloud\Oss\V2 as Oss;

// Definisikan parameter baris perintah, deskripsi, dan apakah parameter tersebut wajib.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True],
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False],
    "bucket" => ['help' => 'Nama bucket', 'required' => True],
    "target-bucket" => ['help' => 'Nama bucket target', 'required' => True],
    "target-location" => ['help' => 'Lokasi bucket target', 'required' => True],
];

// Buat array opsi panjang yang diperlukan oleh getopt. Contoh: ["region:", "endpoint:", ...]
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Ambil argumen baris perintah yang diteruskan.
$options = getopt("", $longopts);

// Periksa apakah semua parameter yang diperlukan telah diberikan. Jika salah satu tidak ada, pesan kesalahan akan ditampilkan dan program keluar.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help";
        exit(1);
    }
}

// Ekstrak argumen baris perintah.
$region = $options["region"];
$bucket = $options["bucket"];
$targetBucket = $options["target-bucket"];
$targetLocation = $options["target-location"];

// Gunakan kredensial akses yang disimpan dalam variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Muat konfigurasi default.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial, wilayah, dan titik akhir opsional.
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Konstruksi objek PutBucketReplicationRequest.
$request = new Oss\Models\PutBucketReplicationRequest(
    bucket: $bucket,
    replicationConfiguration: new Oss\Models\ReplicationConfiguration(
        rules: array(
            new Oss\Models\ReplicationRule(
                destination: new Oss\Models\ReplicationDestination(
                    bucket: $targetBucket,
                    location: $targetLocation,
                ),
                rtc: new Oss\Models\ReplicationTimeControl(
                    status: 'enabled' // Aktifkan kontrol waktu replikasi (RTC).
                )
            )
        )
    )
);

// Jalankan permintaan dan dapatkan hasilnya.
$result = $client->putBucketReplication($request);

// Tampilkan kode status, ID permintaan, dan ID aturan replikasi.
printf(
    'kode status:' . $result->statusCode . PHP_EOL .
    'ID permintaan:' . $result->requestId . PHP_EOL .
    'ID aturan replikasi:' . $result->replicationRuleId
);

Kueri aturan replikasi data

Berikut adalah kode yang menanyakan aturan replikasi data untuk bucket:

<?php

// Sertakan file autoload untuk memuat SDK dan dependensi lainnya.
require_once __DIR__ . '/../vendor/autoload.php';

// Gunakan namespace Alibaba Cloud OSS V2 dan singkatkan sebagai Oss.
use AlibabaCloud\Oss\V2 as Oss;

// Definisikan dan jelaskan argumen baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True],
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False],
    "bucket" => ['help' => 'Nama bucket', 'required' => True],
];

// Konstruksi array opsi panjang yang diperlukan oleh getopt.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Ambil opsi panjang yang diteruskan dari baris perintah.
$options = getopt("", $longopts);

// Lintasi semua definisi parameter dan periksa apakah semua yang diperlukan telah diberikan.
foreach ($optsdesc as $key => $value) {
    // Jika parameter yang diperlukan hilang, tampilkan pesan kesalahan dan keluar dari program.
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help";
        exit(1);
    }
}

// Ekstrak wilayah dan nama bucket dari argumen baris perintah.
$region = $options["region"];
$bucket = $options["bucket"];

// Muat kredensial akses dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Muat konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial, wilayah, dan titik akhir opsional.
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Konstruksi objek GetBucketReplicationRequest.
$request = new Oss\Models\GetBucketReplicationRequest(bucket: $bucket);

// Kirim permintaan dan dapatkan hasilnya.
$result = $client->getBucketReplication($request);

// Tampilkan kode status, ID permintaan, dan aturan replikasi.
printf(
    'kode status:' . $result->statusCode . PHP_EOL .
    'ID permintaan:' . $result->requestId . PHP_EOL .
    'konfigurasi replikasi:' . var_export($result->replicationConfiguration, true)
);

Aktifkan atau Nonaktifkan Fitur RTC

Berikut adalah kode contoh yang mengaktifkan atau menonaktifkan fitur RTC untuk aturan CRR:

<?php

// Sertakan file autoload untuk memuat SDK dan dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

// Gunakan namespace Alibaba Cloud OSS V2 dan singkatkan sebagai Oss.
use AlibabaCloud\Oss\V2 as Oss;

// Definisikan parameter baris perintah, deskripsi, dan apakah parameter tersebut wajib.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True],
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False],
    "bucket" => ['help' => 'Nama bucket', 'required' => True],
    "rule-id" => ['help' => 'ID aturan replikasi bucket', 'required' => True],
];

// Konstruksi array opsi panjang yang diperlukan oleh getopt. Kunci dengan titik dua di akhir mengharapkan nilai.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Ambil opsi panjang yang diteruskan dari baris perintah.
$options = getopt("", $longopts);

// Periksa apakah semua parameter yang diperlukan telah diberikan.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help";
        exit(1);
    }
}

// Ekstrak wilayah, bucket, dan ID aturan replikasi.
$region = $options["region"];
$bucket = $options["bucket"];
$ruleId = $options["rule-id"];

// Muat kredensial akses dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Muat konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial, wilayah, dan titik akhir opsional.
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Konstruksi objek PutBucketRtcRequest.
$request = new Oss\Models\PutBucketRtcRequest(
    bucket: $bucket,
    rtcConfiguration: new Oss\Models\RtcConfiguration(
        rtc: new Oss\Models\ReplicationTimeControl(
            status: 'disabled' // Nonaktifkan RTC.
        ),
        id: $ruleId // ID aturan replikasi yang akan dimodifikasi.
    )
);

$result = $client->putBucketRtc($request);

// Tampilkan kode status dan ID permintaan.
printf(
    'kode status:' . $result->statusCode . PHP_EOL .
    'ID permintaan:' . $result->requestId
);

Tanyakan Wilayah Tempat Data Dapat Direplikasi

Berikut adalah kode contoh yang menanyakan wilayah tempat data dapat direplikasi dari bucket sumber tertentu:

<?php

// Sertakan file autoload untuk memuat SDK dan dependensi lainnya.
require_once __DIR__ . '/../vendor/autoload.php';

// Gunakan namespace Alibaba Cloud OSS V2 dan singkatkan sebagai Oss.
use AlibabaCloud\Oss\V2 as Oss;

// Definisikan parameter baris perintah, deskripsi, dan apakah parameter tersebut wajib.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True],
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False],
    "bucket" => ['help' => 'Nama bucket', 'required' => True],
];

// Konstruksi array opsi panjang yang diperlukan oleh getopt.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Ambil opsi panjang yang diteruskan dari baris perintah.
$options = getopt("", $longopts);

// Lintasi definisi parameter dan periksa apakah semua yang diperlukan telah diberikan.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help";
        exit(1);
    }
}

// Ekstrak wilayah dan nama bucket dari argumen baris perintah.
$region = $options["region"];
$bucket = $options["bucket"];

// Muat kredensial akses dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Muat konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial, wilayah, dan titik akhir opsional.
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Buat objek GetBucketReplicationLocationRequest untuk menanyakan wilayah tempat data dapat direplikasi.
$request = new Oss\Models\GetBucketReplicationLocationRequest(bucket: $bucket);

// Kirim permintaan dan dapatkan hasilnya.
$result = $client->getBucketReplicationLocation($request);

// Tampilkan kode status, ID permintaan, dan wilayah tujuan yang tersedia.
printf(
    'kode status:' . $result->statusCode . PHP_EOL .
    'ID permintaan:' . $result->requestId . PHP_EOL .
    'lokasi replikasi:' . var_export($result->replicationLocation, true)
);

Tanyakan Kemajuan Tugas Replikasi Data

Catatan

Anda dapat menanyakan kemajuan replikasi data historis dan replikasi data tambahan.

  • Kemajuan tugas replikasi data historis dinyatakan sebagai persentase. Anda hanya dapat menanyakan kemajuan tugas replikasi data historis untuk bucket yang memiliki replikasi data historis diaktifkan.

  • Kemajuan tugas replikasi data tambahan dinyatakan sebagai titik waktu. Data yang disimpan di bucket sumber sebelum titik waktu tersebut telah direplikasi.

Berikut adalah kode contoh yang menanyakan kemajuan replikasi data yang terkait dengan aturan replikasi tertentu untuk bucket:

<?php

// Sertakan file autoload untuk memuat SDK dan dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

// Gunakan namespace Alibaba Cloud OSS V2 dan singkatkan sebagai Oss.
use AlibabaCloud\Oss\V2 as Oss;

// Definisikan parameter baris perintah, deskripsi, dan apakah parameter tersebut wajib.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True],
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False],
    "bucket" => ['help' => 'Nama bucket', 'required' => True],
    "rule-id" => ['help' => 'ID aturan replikasi bucket', 'required' => True],
];

// Konstruksi array opsi panjang yang diperlukan oleh getopt. Kunci dengan titik dua di akhir mengharapkan nilai.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Ambil opsi panjang yang diteruskan dari baris perintah.
$options = getopt("", $longopts);

// Lintasi definisi parameter dan periksa apakah semua yang diperlukan telah diberikan.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help";
        exit(1);
    }
}

// Ekstrak wilayah, bucket, dan ID aturan replikasi.
$region = $options["region"];
$bucket = $options["bucket"];
$ruleId = $options["rule-id"];

// Muat kredensial akses dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Muat konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial, wilayah, dan titik akhir opsional.
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Konstruksi objek GetBucketReplicationProgressRequest untuk menanyakan kemajuan replikasi untuk aturan replikasi tertentu.
$request = new Oss\Models\GetBucketReplicationProgressRequest(bucket: $bucket, ruleId: $ruleId);

// Kirim permintaan dan dapatkan hasilnya.
$result = $client->getBucketReplicationProgress($request);

// Tampilkan kode status, ID permintaan, dan detail kemajuan replikasi.
printf(
    'kode status:' . $result->statusCode . PHP_EOL .
    'ID permintaan:' . $result->requestId . PHP_EOL .
    'kemajuan replikasi:' . var_export($result->replicationProgress, true)
);

Nonaktifkan Replikasi Data

Anda dapat menghapus aturan replikasi yang dikonfigurasikan untuk bucket sumber untuk menonaktifkan replikasi data untuk bucket tersebut.

Berikut adalah kode contoh yang menghapus aturan replikasi tertentu dari bucket tertentu:

<?php

// Sertakan file autoload untuk memuat SDK dan dependensi lainnya.
require_once __DIR__ . '/../vendor/autoload.php';

// Gunakan namespace Alibaba Cloud OSS V2 dan singkatkan sebagai Oss.
use AlibabaCloud\Oss\V2 as Oss;

// Definisikan parameter baris perintah, deskripsi, dan apakah parameter tersebut wajib.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True],
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False],
    "bucket" => ['help' => 'Nama bucket', 'required' => True],
    "rule-id" => ['help' => 'ID aturan replikasi bucket', 'required' => True],
];

// Konstruksi array opsi panjang yang diperlukan oleh getopt. Kunci dengan titik dua di akhir mengharapkan nilai.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Ambil opsi panjang yang diteruskan dari baris perintah.
$options = getopt("", $longopts);

// Lintasi definisi parameter dan periksa apakah semua yang diperlukan telah diberikan.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help";
        exit(1);
    }
}

// Ekstrak wilayah, bucket, dan ID aturan replikasi.
$region = $options["region"];
$bucket = $options["bucket"];
$ruleId = $options["rule-id"];

// Muat kredensial akses dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Muat konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial, wilayah, dan titik akhir opsional.
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Konstruksi objek DeleteBucketReplicationRequest untuk menghapus aturan replikasi.
$request = new Oss\Models\DeleteBucketReplicationRequest(
    bucket: $bucket,
    replicationRules: new Oss\Models\ReplicationRules(
        ids: [$ruleId] // Daftar ID aturan replikasi yang akan dihapus.
    )
);

// Kirim permintaan untuk menghapus aturan replikasi yang ditentukan.
$result = $client->deleteBucketReplication($request);

// Tampilkan kode status dan ID permintaan.
printf(
    'kode status:' . $result->statusCode . PHP_EOL .
    'ID permintaan:' . $result->requestId
);