データのレプリケーションは、オブジェクトとオブジェクト操作 (作成、上書き、削除など) をソースバケットからターゲットバケットに自動的にレプリケートします。Object Storage Service (OSS) は、クロスリージョンレプリケーション (CRR) と同一リージョンレプリケーション (SRR) をサポートしています。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを例として使用しています。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。デフォルトでは、Alibaba Cloud アカウントにはデータレプリケーションに必要な権限があります。RAM ユーザーとして、またはセキュリティトークンサービス (STS) によって提供される一時的なアクセス資格情報を使用してデータをレプリケーションする場合は、必要な権限が必要です。
データレプリケーションを有効にするには、
oss:PutBucketReplication権限が必要です。レプリケーション時間制御 (RTC) 機能を有効または無効にするには、
oss:PutBucketRtc権限が必要です。データレプリケーションルールを表示するには、
oss:GetBucketReplication権限が必要です。レプリケーションのターゲットリージョンを表示するには、
oss:GetBucketReplicationLocation権限が必要です。データレプリケーションの進行状況を表示するには、
oss:GetBucketReplicationProgress権限が必要です。データレプリケーションを無効にするには、
oss:DeleteBucketReplication権限が必要です。
サンプルコード
データレプリケーションの有効化
データレプリケーションを有効にする前に、ソースバケットとターゲットバケットの両方がバージョン管理なしまたはバージョン管理有効の状態であることを確認してください。
次のサンプルコードは、データレプリケーションを有効にし、同じリージョンまたは異なるリージョンのソースバケットからターゲットバケットにデータをレプリケートするデータレプリケーショントピックを作成します。
<?php
// SDK とその他の依存関係を読み込むために、オートロードファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
// Alibaba Cloud OSS V2 名前空間を使用します。
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータ、説明、およびパラメータが必要かどうかを定義します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前', 'required' => True],
"target-bucket" => ['help' => 'ターゲットバケットの名前', 'required' => True],
"target-location" => ['help' => 'ターゲットバケットの場所', 'required' => True],
];
// getopt に必要な長いオプションの配列を作成します。例: ["region:", "endpoint:", ...]
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// 渡されたコマンドライン引数を取得します。
$options = getopt("", $longopts);
// 必要なすべてのパラメータが提供されているかどうかを確認します。不足しているものがある場合は、エラーメッセージが表示され、プログラムは終了します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // エラー:次の引数は必須です:-- $key、$help
exit(1);
}
}
// コマンドライン引数を抽出します。
$region = $options["region"];
$bucket = $options["bucket"];
$targetBucket = $options["target-bucket"];
$targetLocation = $options["target-location"];
// 環境変数に格納されているアクセス認証情報を使用します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// デフォルト設定を読み込みます。
$cfg = Oss\Config::loadDefault();
// 認証情報プロバイダー、リージョン、およびオプションのエンドポイントを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// 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' // レプリケーション時間制御 (RTC) を有効にします。
)
)
)
)
);
// リクエストを実行し、結果を取得します。
$result = $client->putBucketReplication($request);
// 状態コード、リクエスト ID、およびレプリケーションルール ID を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId . PHP_EOL . // リクエスト ID:
'replication rule id:' . $result->replicationRuleId // レプリケーションルール ID:
);データレプリケーションルールのクエリ
次のコードは、バケットのデータレプリケーションルールを照会します。
<?php
// SDK とその他の依存関係を読み込むために、オートロードファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
// Alibaba Cloud OSS V2 名前空間を使用し、Oss として省略します。
use AlibabaCloud\Oss\V2 as Oss;
// コマンドライン引数を定義および記述します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前', 'required' => True],
];
// getopt に必要な長いオプションの配列を構築します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインから渡された長いオプションを取得します。
$options = getopt("", $longopts);
// すべてのパラメータ定義をトラバースし、必要なすべてのパラメータが提供されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
// 必要なパラメータが不足している場合は、エラーメッセージを表示してプログラムを終了します。
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // エラー:次の引数は必須です:-- $key、$help
exit(1);
}
}
// コマンドライン引数からリージョンとバケット名を抽出します。
$region = $options["region"];
$bucket = $options["bucket"];
// 環境変数からアクセス認証情報を読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を読み込みます。
$cfg = Oss\Config::loadDefault();
// 認証情報プロバイダー、リージョン、およびオプションのエンドポイントを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// GetBucketReplicationRequest オブジェクトを構築します。
$request = new Oss\Models\GetBucketReplicationRequest(bucket: $bucket);
// リクエストを送信し、結果を取得します。
$result = $client->getBucketReplication($request);
// 状態コード、リクエスト ID、およびレプリケーションルールを表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId . PHP_EOL . // リクエスト ID:
'replication config:' . var_export($result->replicationConfiguration, true) // レプリケーション設定:
);RTC 機能の有効化または無効化
次のサンプルコードは、CRR ルールの RTC 機能を有効または無効にします。
<?php
// SDK と依存関係を読み込むために、オートロードファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
// Alibaba Cloud OSS V2 名前空間を使用し、Oss として省略します。
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータ、説明、およびパラメータが必要かどうかを定義します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前', 'required' => True],
"rule-id" => ['help' => 'バケットのレプリケーションルール ID', 'required' => True],
];
// getopt に必要な長いオプションの配列を構築します。末尾にコロンが付いているキーは値を期待します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインから渡された長いオプションを取得します。
$options = getopt("", $longopts);
// 必要なすべてのパラメータが提供されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // エラー:次の引数は必須です:-- $key、$help
exit(1);
}
}
// リージョン、バケット、およびレプリケーションルール ID を抽出します。
$region = $options["region"];
$bucket = $options["bucket"];
$ruleId = $options["rule-id"];
// 環境変数からアクセス認証情報を読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を読み込みます。
$cfg = Oss\Config::loadDefault();
// 認証情報プロバイダー、リージョン、およびオプションのエンドポイントを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// PutBucketRtcRequest オブジェクトを構築します。
$request = new Oss\Models\PutBucketRtcRequest(
bucket: $bucket,
rtcConfiguration: new Oss\Models\RtcConfiguration(
rtc: new Oss\Models\ReplicationTimeControl(
status: 'disabled' // RTC を無効にします。
),
id: $ruleId // 変更するレプリケーションルールの ID。
)
);
$result = $client->putBucketRtc($request);
// 状態コードとリクエスト ID を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId // リクエスト ID:
);データをレプリケートできるリージョンのクエリ
次のサンプルコードは、指定されたソースバケットからデータをレプリケートできるリージョンを照会します。
<?php
// SDK とその他の依存関係を読み込むために、オートロードファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
// Alibaba Cloud OSS V2 名前空間を使用し、Oss として省略します。
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータ、説明、およびパラメータが必要かどうかを定義します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前', 'required' => True],
];
// getopt に必要な長いオプションの配列を構築します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインから渡された長いオプションを取得します。
$options = getopt("", $longopts);
// パラメータ定義をトラバースし、必要なすべてのパラメータが提供されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // エラー:次の引数は必須です:-- $key、$help
exit(1);
}
}
// コマンドライン引数からリージョンとバケット名を抽出します。
$region = $options["region"];
$bucket = $options["bucket"];
// 環境変数からアクセス認証情報を読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を読み込みます。
$cfg = Oss\Config::loadDefault();
// 認証情報プロバイダー、リージョン、およびオプションのエンドポイントを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// データをレプリケートできるリージョンを照会するために GetBucketReplicationLocationRequest オブジェクトを作成します。
$request = new Oss\Models\GetBucketReplicationLocationRequest(bucket: $bucket);
// リクエストを送信し、結果を取得します。
$result = $client->getBucketReplicationLocation($request);
// 状態コード、リクエスト ID、および使用可能なターゲットリージョンを表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId . PHP_EOL . // リクエスト ID:
'replication location:' . var_export($result->replicationLocation, true) // レプリケーション場所:
);データレプリケーショントピックの進捗状況のクエリ
既存データレプリケーションと増分データレプリケーションの進捗状況を照会できます。
既存データレプリケーショントピックの進捗状況はパーセンテージで表されます。既存データレプリケーションが有効になっているバケットについてのみ、既存データレプリケーショントピックの進捗状況を照会できます。
増分データレプリケーショントピックの進捗状況は、特定の時点として表されます。その時点より前にソースバケットに格納されたデータはレプリケートされています。
次のサンプルコードは、バケットの特定のレプリケーションルールに関連付けられたデータレプリケーションの進捗状況を照会します。
<?php
// SDK と依存関係を読み込むために、オートロードファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
// Alibaba Cloud OSS V2 名前空間を使用し、Oss として省略します。
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータ、説明、およびパラメータが必要かどうかを定義します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前', 'required' => True],
"rule-id" => ['help' => 'バケットのレプリケーションルール ID', 'required' => True],
];
// getopt に必要な長いオプションの配列を構築します。末尾にコロンが付いているキーは値を期待します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインから渡された長いオプションを取得します。
$options = getopt("", $longopts);
// パラメータ定義をトラバースし、必要なすべてのパラメータが提供されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // エラー:次の引数は必須です:-- $key、$help
exit(1);
}
}
// リージョン、バケット、およびレプリケーションルール ID を抽出します。
$region = $options["region"];
$bucket = $options["bucket"];
$ruleId = $options["rule-id"];
// 環境変数からアクセス認証情報を読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を読み込みます。
$cfg = Oss\Config::loadDefault();
// 認証情報プロバイダー、リージョン、およびオプションのエンドポイントを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// 特定のレプリケーションルールのレプリケーションの進捗状況を照会するために GetBucketReplicationProgressRequest オブジェクトを構築します。
$request = new Oss\Models\GetBucketReplicationProgressRequest(bucket: $bucket, ruleId: $ruleId);
// リクエストを送信し、結果を取得します。
$result = $client->getBucketReplicationProgress($request);
// 状態コード、リクエスト ID、およびレプリケーションの進捗状況の詳細を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId . PHP_EOL . // リクエスト ID:
'replication progress:' . var_export($result->replicationProgress, true) // レプリケーションの進捗状況:
);データレプリケーションの無効化
ソースバケットに設定されているレプリケーションルールを削除して、バケットのデータレプリケーションを無効にすることができます。
次のサンプルコードは、指定されたバケットから指定されたレプリケーションルールを削除します。
<?php
// SDK とその他の依存関係を読み込むために、オートロードファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
// Alibaba Cloud OSS V2 名前空間を使用し、Oss として省略します。
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータ、説明、およびパラメータが必要かどうかを定義します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前', 'required' => True],
"rule-id" => ['help' => 'バケットのレプリケーションルール ID', 'required' => True],
];
// getopt に必要な長いオプションの配列を構築します。末尾にコロンが付いているキーは値を期待します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインから渡された長いオプションを取得します。
$options = getopt("", $longopts);
// パラメータ定義をトラバースし、必要なすべてのパラメータが提供されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // エラー:次の引数は必須です:-- $key、$help
exit(1);
}
}
// リージョン、バケット、およびレプリケーションルール ID を抽出します。
$region = $options["region"];
$bucket = $options["bucket"];
$ruleId = $options["rule-id"];
// 環境変数からアクセス認証情報を読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を読み込みます。
$cfg = Oss\Config::loadDefault();
// 認証情報プロバイダー、リージョン、およびオプションのエンドポイントを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// レプリケーションルールを削除するために DeleteBucketReplicationRequest オブジェクトを構築します。
$request = new Oss\Models\DeleteBucketReplicationRequest(
bucket: $bucket,
replicationRules: new Oss\Models\ReplicationRules(
ids: [$ruleId] // 削除するレプリケーションルール ID のリスト。
)
);
// 指定されたレプリケーションルールを削除するリクエストを送信します。
$result = $client->deleteBucketReplication($request);
// 状態コードとリクエスト ID を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId // リクエスト ID:
);