Object Storage Service (OSS) のゾーン冗長ストレージは、99.9999999999% (9が12個) のデータ耐久性を提供します。マルチゾーンをサポートするリージョンでは、OSS は同一リージョン内の異なるゾーンにデータの冗長コピーを保存します。このクロスゾーンでのデータ分散により、あるゾーンで障害が発生した場合でもデータアクセスが保証され、データセンターレベルのディザスタリカバリが実現します。
注意事項
操作手順
OSS コンソールの利用
Alibaba Cloud SDK の利用
次のコードは、一般的な SDK を使用してゾーン冗長ストレージバケットを作成する方法の例です。他の SDK のコード例については、SDK をご参照ください。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws Exception {
// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
String endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。
String bucketName = "examplebucket";
// リソースグループ ID を指定します。リソースグループ ID を指定しない場合、バケットはデフォルトのリソースグループに追加されます。
//String rsId = "rg-aek27tc****";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// バケットを作成し、階層型名前空間機能を有効にします。
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName).withHnsStatus(HnsStatus.Enabled);
// バケット作成時にストレージクラス、ACL、データ冗長化タイプを指定する場合は、次のコードをご参照ください。
// 次のコードは、ストレージクラスを標準に設定する例です。
createBucketRequest.setStorageClass(StorageClass.Standard);
// デフォルトのデータ冗長化タイプは LRS で、DataRedundancyType.LRS として指定されます。データ冗長化タイプを ZRS に設定する場合は、値を DataRedundancyType.ZRS に設定します。
createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS);
// バケットの ACL を公開読み取りに設定します。デフォルトの ACL は非公開です。
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
// リソースグループをサポートするリージョンでバケットを作成する場合、バケットをリソースグループに割り当てることができます。
//createBucketRequest.setResourceGroupId(rsId);
// バケットを作成します。
ossClient.createBucket(createBucketRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}const OSS = require('ali-oss');
const client = new OSS({
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: 'yourregion',
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケットの名前を指定します。
bucket: 'yourBucketName',
});
// バケットを作成します。
async function putBucket() {
try {
const options = {
storageClass: 'Standard', // デフォルトでは、バケットのストレージクラスは標準です。バケットのストレージクラスをアーカイブに設定するには、storageClass を Archive に設定します。
acl: 'private', // デフォルトでは、バケットのアクセス制御リスト (ACL) は非公開です。バケットの ACL を公開読み取りに設定するには、acl を public-read に設定します。
dataRedundancyType: 'LRS' // デフォルトでは、バケットの冗長化タイプはローカル冗長ストレージ (LRS) です。バケットの冗長化タイプをゾーン冗長ストレージ (ZRS) に設定するには、dataRedundancyType を ZRS に設定します。
}
// バケットの名前を指定します。
const result = await client.putBucket('examplebucket', options);
console.log(result);
} catch (err) {
console.log(err);
}
}
putBucket(); import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数パーサを作成します。
parser = argparse.ArgumentParser(description="put bucket sample")
# --region コマンドライン引数を追加します。これはバケットが配置されているリージョンを指定します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# --bucket コマンドライン引数を追加します。これはバケットの名前を指定します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# --endpoint コマンドライン引数を追加します。これは他のサービスが OSS にアクセスするために使用できるドメイン名を指定します。この引数はオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
args = parser.parse_args() # コマンドライン引数を解析します。
# ID 検証のために環境変数から認証情報を読み込みます。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定を読み込み、認証情報プロバイダーを設定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# 設定にリージョンを設定します。
cfg.region = args.region
# endpoint 引数が指定されている場合は、設定にエンドポイントを設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 設定された情報を使用して OSS クライアントを作成します。
client = oss.Client(cfg)
# バケットを作成するリクエストを送信します。ストレージクラスは標準です。
result = client.put_bucket(oss.PutBucketRequest(
bucket=args.bucket,
create_bucket_configuration=oss.CreateBucketConfiguration(
storage_class='Standard',
data_redundancy_type='ZRS'
)
))
# リクエストが成功したかどうかを確認するために、リクエストのステータスコードとリクエスト ID を出力します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id}'
)
if __name__ == "__main__":
main() # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケット名を指定します。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// 署名バージョン V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
// バケットを作成します。
try
{
var request = new CreateBucketRequest(bucketName);
// アクセス制御リスト (ACL) を公開読み取りに設定します。デフォルトの ACL は非公開です。
request.ACL = CannedAccessControlList.PublicRead;
// データディザスタリカバリタイプをゾーン冗長ストレージに設定します。
request.DataRedundancyType = DataRedundancyType.ZRS;
client.CreateBucket(request);
Console.WriteLine("Create bucket succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Create bucket failed. {0}", ex.Message);
}#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンに yourRegion を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* バケット名を指定します (例: examplebucket)。*/
std::string BucketName = "examplebucket";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* 新しいバケットの名前、ストレージクラス、および ACL を指定します。*/
CreateBucketRequest request(BucketName, StorageClass::IA, CannedAccessControlList::PublicReadWrite);
/* データ冗長化タイプをゾーン冗長ストレージに設定します。*/
request.setDataRedundancyType(DataRedundancyType::ZRS);
/* バケットを作成します。*/
auto outcome = client.CreateBucket(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。*/
std::cout << "CreateBucket fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// コマンドライン引数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドライン引数の解析を初期化します。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドライン引数を解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// OSS クライアントを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). // 環境変数を使用してアクセス認証情報を提供します。
WithRegion(region) // リージョンを設定します。
// OSS クライアントインスタンスを作成します。
client := oss.NewClient(cfg)
// バケットを作成するリクエストを構築します。
request := &oss.PutBucketRequest{
Bucket: oss.Ptr(bucketName), // バケット名を設定します。
CreateBucketConfiguration: &oss.CreateBucketConfiguration{
DataRedundancyType: oss.DataRedundancyZRS, // データ冗長化タイプを ZRS (ゾーン冗長ストレージ) に設定します。
},
}
// バケットを作成するリクエストを送信します。
result, err := client.PutBucket(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket: %v", err) // エラーを処理し、プログラムを停止します。
}
// バケット作成の結果を出力します。
log.Printf("put bucket result: %#v\n", result)
}
ossutil の利用
ossutil を使用してゾーン冗長ストレージバケットを作成する方法の詳細については、put-bucket をご参照ください。
REST API の利用
プログラムに高度にカスタマイズされた要件がある場合は、REST API リクエストを直接送信できます。REST API リクエストを送信するには、手動でコードを記述して署名を計算する必要があります。詳細については、PutBucket をご参照ください。