Jika Anda membuat beberapa bucket di berbagai wilayah, Anda dapat menentukan nama bucket untuk dengan cepat menemukan wilayah tempat bucket tersebut berada.
Skenario
Optimalisasi akses data: Mengetahui wilayah tempat bucket Anda berada membantu menentukan jalur akses data yang optimal. Sebagai contoh, jika aplikasi Anda berada di wilayah yang sama atau terdekat, Anda dapat mengakses bucket melalui jaringan internal untuk mengurangi latensi jaringan dan biaya transfer data.
Kepatuhan dan persyaratan residensi data: Beberapa regulasi mungkin mengharuskan data disimpan di wilayah tertentu. Pastikan bahwa bucket Anda dibuat di wilayah yang memenuhi persyaratan regulasi ini.
Redundansi multi-wilayah atau pemulihan bencana: Jika bisnis Anda memerlukan ketersediaan tinggi, Anda dapat menyiapkan bucket di beberapa wilayah untuk redundansi data. Dalam hal ini, pengambilan informasi wilayah bucket sangat penting untuk sinkronisasi data dan failover.
Catatan
Untuk informasi lebih lanjut tentang wilayah yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS. Sebagai contoh, untuk wilayah China (Hangzhou), bidang Lokasi adalah oss-cn-hangzhou.
Metode
Gunakan Konsol OSS
Masuk ke Konsol OSS.
Di panel navigasi di sebelah kiri, klik Buckets, lalu klik nama bucket target.
Wilayah bucket target ditampilkan di pojok kiri atas halaman, seperti China (Hangzhou).
Gunakan alat manajemen grafis ossbrowser
Anda dapat menggunakan ossbrowser untuk melakukan operasi tingkat bucket yang sama seperti yang Anda lakukan di Konsol OSS. Ikuti petunjuk di layar di ossbrowser untuk menanyakan wilayah bucket. Untuk informasi lebih lanjut tentang cara menggunakan ossbrowser, lihat Operasi Umum.
Gunakan SDK Alibaba Cloud
Berikut ini adalah contoh kode yang menunjukkan cara mengambil wilayah bucket menggunakan SDK umum. Untuk contoh kode untuk SDK lainnya, lihat Gambaran 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 {
// Tentukan titik akhir wilayah yang didukung oleh OSS. Contoh: https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSS Client.
// Panggil metode shutdown untuk melepaskan sumber daya terkait ketika OSS Client tidak lagi digunakan.
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("Tangkap OSSException, yang berarti permintaan Anda mencapai OSS, "
+ "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Tangkap ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Kesalahan:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}const OSS = require('ali-oss')
const client = new OSS({
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
region: 'oss-cn-hangzhou',
// Gunakan algoritma tanda tangan V4.
authorizationV4: true,
// Tentukan nama bucket Anda.
bucket: 'yourBucketName',
// Tentukan titik akhir publik wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi 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;
// Tentukan titik akhir wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Atur yourBucketName ke nama bucket.
var bucketName = "yourBucketName";
// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// Dapatkan wilayah tempat bucket berada.
var result = client.GetBucketLocation(bucketName);
Console.WriteLine("Dapatkan bucket:{0} Info berhasil ", bucketName);
Console.WriteLine("lokasi bucket: {0}", result.Location);
}
catch (OssException ex)
{
Console.WriteLine("Gagal dengan kode kesalahan: {0}; Informasi kesalahan: {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)
{
/* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
/* Tentukan titik akhir wilayah yang didukung oleh OSS. Contoh: https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. */
std::string BucketName = "yourBucketName";
/* Inisialisasi sumber daya seperti sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Kueri wilayah bucket. */
GetBucketLocationRequest request(BucketName);
auto outcome = client.GetBucketLocation(request);
if (outcome.isSuccess()) {
std::cout << "getBucketLocation berhasil, lokasi: " << outcome.result().Location() << std::endl;
}
else {
/* Tangani pengecualian. */
std::cout << "getBucketLocation gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return -1;
}
/* Lepaskan sumber daya seperti sumber daya jaringan. */
ShutdownSdk();
return 0;
}#include "oss_api.h"
#include "aos_http_io.h"
/* Tentukan titik akhir wilayah yang didukung oleh OSS. Contoh: https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. */
const char *bucket_name = "yourBucket";
/* Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Gunakan string char* untuk menginisialisasi data bertipe aos_string_t. */
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
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"));
// Tentukan dua parameter tambahan.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah akan menggunakan CNAME untuk mengakses OSS. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Konfigurasikan parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Panggil metode aos_http_io_initialize di main() untuk menginisialisasi sumber daya global, seperti sumber daya jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Buat pool untuk manajemen memori. aos_pool_t setara dengan apr_pool_t. Kode yang digunakan untuk membuat pool memori termasuk dalam pustaka APR. */
aos_pool_t *pool;
/* Buat pool memori. Nilai parameter kedua adalah NULL. Nilai ini menunjukkan bahwa pool tidak mewarisi pool memori lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
oss_request_options_t *oss_client_options;
/* Alokasikan sumber daya memori di pool memori untuk opsi. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
aos_string_t bucket;
aos_string_t oss_location;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
/* Tetapkan data char* ke bucket bertipe aos_string_t. */
aos_str_set(&bucket, bucket_name);
/* Kueri wilayah bucket. */
resp_status = oss_get_bucket_location(oss_client_options, &bucket, &oss_location, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("dapatkan lokasi bucket berhasil : %s \n", oss_location.data);
} else {
printf("dapatkan lokasi bucket gagal\n");
}
/* Lepaskan pool memori. Operasi ini melepaskan sumber daya memori yang dialokasikan untuk permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang dialokasikan. */
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"
)
// Tentukan variabel global.
var (
region string // Wilayah.
bucketName string // Nama bucket.
)
// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk menanyakan wilayah bucket.
request := &oss.GetBucketLocationRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
}
// Jalankan permintaan untuk menanyakan wilayah bucket dan proses hasilnya.
result, err := client.GetBucketLocation(context.TODO(), request)
if err != nil {
log.Fatalf("gagal mendapatkan lokasi bucket %v", err)
}
// Tampilkan wilayah bucket.
log.Printf("dapatkan lokasi bucket:%#v\n", *result.LocationConstraint)
}
import argparse
import alibabacloud_oss_v2 as oss
# Buat parser argumen baris perintah. Skrip ini digunakan untuk mendapatkan informasi lokasi bucket yang ditentukan.
parser = argparse.ArgumentParser(description="Dapatkan lokasi bucket OSS yang ditentukan.")
# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini diperlukan.
parser.add_argument('--bucket', help='Nama bucket untuk mendapatkan lokasi.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.')
def main():
"""
Fungsi utama, yang digunakan untuk mengurai argumen baris perintah dan mendapatkan informasi lokasi bucket yang ditentukan.
"""
args = parser.parse_args() # Uraikan argumen baris perintah.
# Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Gunakan konfigurasi default SDK, dan atur penyedia kredensial dan informasi wilayah.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
# Jika argumen endpoint diberikan, atur endpoint dalam konfigurasi.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Buat klien OSS menggunakan informasi yang dikonfigurasi.
client = oss.Client(cfg)
# Bangun permintaan untuk mendapatkan informasi lokasi bucket yang ditentukan.
request = oss.GetBucketLocationRequest(bucket=args.bucket)
# Jalankan permintaan dan dapatkan respons.
result = client.get_bucket_location(request)
# Cetak kode status, ID permintaan, dan informasi lokasi dari respons.
print(f'kode status: {result.status_code},'
f' ID permintaan: {result.request_id},'
f' lokasi: {result.location}'
)
if __name__ == "__main__":
main() # Titik masuk skrip. Fungsi utama dipanggil ketika file dijalankan langsung.<?php
require_once __DIR__ . '/../vendor/autoload.php'; // Perkenalkan file autoload untuk memuat pustaka dependensi.
use AlibabaCloud\Oss\V2 as Oss;
// Definisikan deskripsi parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // Wilayah tempat bucket berada diperlukan. Sebagai contoh: oss-cn-hangzhou.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Titik akhir wilayah tempat bucket berada.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Nama bucket.
];
$longopts = \array_map(function ($key) {
return "$key:"; // Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
}, array_keys($optsdesc));
// Uraikan parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan dikonfigurasi.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // Tampilkan parameter yang diperlukan tetapi hilang.
exit(1);
}
}
// Dapatkan nilai parameter baris perintah.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
// Gunakan variabel lingkungan untuk memuat AccessKey ID dan AccessKey secret.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); // Muat kredensial akses dari variabel lingkungan.
// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault(); // Muat konfigurasi default SDK.
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Tentukan titik akhir jika satu disediakan.
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Buat permintaan untuk menanyakan wilayah bucket.
$request = new Oss\Models\GetBucketLocationRequest($bucket);
// Panggil metode getBucketLocation.
$result = $client->getBucketLocation($request);
// Tampilkan hasil.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP.
'ID permintaan:' . $result->requestId . PHP_EOL . // ID unik permintaan.
'lokasi bucket:' . var_export($result->location, true) // Wilayah tempat bucket berada.
);
Gunakan alat baris perintah ossutil
Anda dapat menggunakan alat baris perintah ossutil untuk mengambil informasi wilayah bucket. Untuk menginstal ossutil, lihat Instal ossutil.
Contoh berikut menunjukkan cara mengambil informasi wilayah bucket bernama examplebucket.
ossutil api get-bucket-location --bucket examplebucketUntuk informasi lebih lanjut tentang perintah ini, lihat get-bucket-location.
Operasi API terkait
Metode yang dijelaskan dalam topik ini didasarkan pada operasi API. Jika aplikasi Anda memiliki persyaratan kustomisasi tinggi, Anda dapat secara langsung membuat permintaan REST API. Untuk membuat permintaan REST API, Anda harus secara manual menulis kode untuk menghitung tanda tangan. Untuk informasi lebih lanjut, lihat GetBucketLocation.