複数のリージョンにまたがって多数のバケットを作成する場合、バケット名を指定して、バケットが配置されているリージョンをすばやく見つけることができます。
シナリオ
データアクセスの最適化: バケットが配置されているリージョンを把握することで、最適なデータアクセスパスを決定できます。たとえば、アプリケーションが同じリージョンまたは近くのリージョンにデプロイされている場合、内部ネットワーク経由でバケットにアクセスして、ネットワーク遅延とデータ転送コストを削減できます。
コンプライアンスとデータ所在地の要件: 規制によっては、特定のリージョンにデータを保存する必要がある場合があります。バケットがこれらの規制要件を満たすリージョンに作成されていることを確認する必要があります。
複数リージョンでの冗長性またはディザスタリカバリ: ビジネスで高可用性が必要な場合は、データ冗長性のために複数のリージョンにバケットをセットアップすることがあります。この場合、データ同期とフェールオーバーのためには、バケットのリージョン情報を取得することが重要です。
注意
OSS がサポートするリージョンの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。たとえば、中国 (杭州) リージョンの場合、Location フィールドは oss-cn-hangzhou です。
方法
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで バケット をクリックし、ターゲットバケットの名前をクリックします。
ターゲットバケットのリージョンが、ページの左上隅に表示されます (例: 中国 (杭州))。
グラフィカル管理ツール ossbrowser の使用
ossbrowser を使用して、OSS コンソールと同じバケットレベルの操作を実行できます。ossbrowser の画面の指示に従って、バケットのリージョンを照会できます。ossbrowser の使用方法の詳細については、「一般的な操作」をご参照ください。
Alibaba Cloud SDK の使用
次のコードは、一般的な SDK を使用してバケットのリージョンを取得する方法の例を示しています。他の SDK のコード例については、「SDK の概要」をご参照ください。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
public class Demo {
public static void main(String[] args) throws Exception {
// OSS でサポートされているリージョンのエンドポイントを指定します。例: https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSS Client インスタンスを作成します。
// OSS Client が不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
String location = ossClient.getBucketLocation(bucketName);
System.out.println(location);
} 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_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
region: 'oss-cn-hangzhou',
// V4 署名アルゴリズムを使用します。
authorizationV4: true,
// バケット名を指定します。
bucket: 'yourBucketName',
// バケットが配置されているリージョンのパブリックエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
});
async function getLocation() {
try {
const result = await client.getBucketInfo();
console.log(result.bucket.Location);
} catch (e) {
console.log(e);
}
}
getLocation();using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// yourBucketName をバケット名に設定します。
var bucketName = "yourBucketName";
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// バケットが配置されているリージョンを取得します。
var result = client.GetBucketLocation(bucketName);
Console.WriteLine("Get bucket:{0} Info succeeded ", bucketName);
Console.WriteLine("bucket Location: {0}", result.Location);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS へのアクセスに使用されるアカウントに関する情報を初期化します。*/
/* OSS でサポートされているリージョンのエンドポイントを指定します。例: https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* バケット名を指定します。*/
std::string BucketName = "yourBucketName";
/* ネットワークリソースなどのリソースを初期化します。*/
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);
/* バケットのリージョンを照会します。*/
GetBucketLocationRequest request(BucketName);
auto outcome = client.GetBucketLocation(request);
if (outcome.isSuccess()) {
std::cout << "getBucketLocation success, location: " << outcome.result().Location() << std::endl;
}
else {
/* 例外を処理します。*/
std::cout << "getBucketLocation fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return -1;
}
/* ネットワークリソースなどのリソースを解放します。*/
ShutdownSdk();
return 0;
}#include "oss_api.h"
#include "aos_http_io.h"
/* OSS でサポートされているリージョンのエンドポイントを指定します。例: https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";
/* バケット名を指定します。*/
const char *bucket_name = "yourBucket";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
// char* 文字列を使用して aos_string_t 型のデータを初期化します。
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
// 2 つの追加パラメーターを指定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用して OSS にアクセスするかどうかを指定します。値 0 は CNAME が使用されないことを示します。*/
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメーターを設定します。*/
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリリソースなどのグローバルリソースを初期化します。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリ管理用のプールを作成します。aos_pool_t は apr_pool_t と同等です。メモリプールを作成するために使用されるコードは、APR ライブラリに含まれています。*/
aos_pool_t *pool;
/* メモリプールを作成します。2 番目のパラメーターの値は NULL です。この値は、プールが他のメモリプールを継承しないことを示します。*/
aos_pool_create(&pool, NULL);
/* オプションを作成して初期化します。このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル設定情報が含まれます。*/
oss_request_options_t *oss_client_options;
/* メモリプール内のメモリリソースをオプションに割り当てます。*/
oss_client_options = oss_request_options_create(pool);
/* oss_client_options を初期化します。*/
init_options(oss_client_options);
/* パラメーターを初期化します。*/
aos_string_t bucket;
aos_string_t oss_location;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
/* char* データを aos_string_t 型のバケットに割り当てます。*/
aos_str_set(&bucket, bucket_name);
/* バケットのリージョンを照会します。*/
resp_status = oss_get_bucket_location(oss_client_options, &bucket, &oss_location, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("get bucket location succeeded : %s \n", oss_location.data);
} else {
printf("get bucket location failed\n");
}
/* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
aos_pool_destroy(pool);
/* 割り当てられたグローバルリソースを解放します。*/
aos_http_io_deinitialize();
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 // バケットの名前。
)
// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
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")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットのリージョンを照会するリクエストを作成します。
request := &oss.GetBucketLocationRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
}
// バケットのリージョンを照会するリクエストを実行し、結果を処理します。
result, err := client.GetBucketLocation(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get bucket location %v", err)
}
// バケットのリージョンを表示します。
log.Printf("get bucket location:%#v\n", *result.LocationConstraint)
}
import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数パーサーを作成します。このスクリプトは、指定されたバケットのロケーション情報を取得するために使用されます。
parser = argparse.ArgumentParser(description="Get the location of a specified OSS bucket.")
# バケットが配置されているリージョンを指定する --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 to get the location for.', required=True)
# 他のサービスが OSS へのアクセスに使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数はオプションです。
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)
# 指定されたバケットのロケーション情報を取得するリクエストを構築します。
request = oss.GetBucketLocationRequest(bucket=args.bucket)
# リクエストを実行し、応答を取得します。
result = client.get_bucket_location(request)
# 応答のステータスコード、リクエスト ID、およびロケーション情報を出力します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' location: {result.location}'
)
if __name__ == "__main__":
main() # スクリプトのエントリポイント。ファイルが直接実行されると、main 関数が呼び出されます。<?php
require_once __DIR__ . '/../vendor/autoload.php'; // 依存ライブラリをロードするために autoload ファイルを導入します。
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメーターの説明を定義します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // バケットが配置されているリージョンは必須です。例: oss-cn-hangzhou。
"endpoint" => ['help' => '他のサービスが OSS へのアクセスに使用できるドメイン名。', 'required' => False], // (オプション) バケットが配置されているリージョンのエンドポイント。
"bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) バケットの名前。
];
$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"; // 必須だが欠落しているパラメーターを表示します。
exit(1);
}
}
// コマンドラインパラメーターの値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
// 環境変数を使用して AccessKey ID と AccessKey Secret をロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); // 環境変数からアクセス資格情報をロードします。
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault(); // SDK のデフォルト設定をロードします。
$cfg->setCredentialsProvider($credentialsProvider); // 資格情報プロバイダーを指定します。
$cfg->setRegion($region); // リージョンを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、エンドポイントを指定します。
}
// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);
// バケットのリージョンを照会するリクエストを作成します。
$request = new Oss\Models\GetBucketLocationRequest($bucket);
// getBucketLocation メソッドを呼び出します。
$result = $client->getBucketLocation($request);
// 結果を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
'request id:' . $result->requestId . PHP_EOL . // リクエストの一意の ID。
'bucket location:' . var_export($result->location, true) // バケットが配置されているリージョン。
);
コマンドラインツール ossutil の使用
コマンドラインツール ossutil を使用して、バケットのリージョン情報を取得できます。ossutil をインストールするには、「ossutil のインストール」をご参照ください。
次の例は、examplebucket という名前のバケットのリージョン情報を取得する方法を示しています。
ossutil api get-bucket-location --bucket examplebucketこのコマンドの詳細については、「get-bucket-location」をご参照ください。
関連する API 操作
このトピックで説明する方法は、API 操作に基づいています。アプリケーションに高度なカスタマイズ要件がある場合は、直接 REST API リクエストを行うことができます。REST API リクエストを行うには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「GetBucketLocation」をご参照ください。