Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan Titik Akses Multi-Wilayah Amazon S3 dengan menggunakan SDK untuk Kotlin
Titik Akses Multi-Wilayah Amazon S3 menyediakan titik akhir global yang dapat digunakan aplikasi untuk memenuhi permintaan dari bucket Amazon S3 yang terletak di beberapa tempat. Wilayah AWS Anda dapat menggunakan Titik Akses Multi-Wilayah untuk membangun aplikasi Multi-wilayah dengan arsitektur yang sama yang digunakan di satu Wilayah, dan kemudian menjalankan aplikasi tersebut di mana saja di dunia.
Panduan Pengguna Amazon S3 berisi informasi latar belakang selengkapnya tentang Titik Akses Multi-Wilayah.
Bekerja dengan Titik Akses Multi-Wilayah
Untuk membuat Titik Akses Multi-Wilayah, mulailah dengan menentukan satu bucket di setiap AWS Wilayah yang ingin Anda layani permintaan. Cuplikan berikut membuat dua ember.
Fungsi berikut membuat dua bucket untuk bekerja dengan Multi-Region Access Point. Satu ember ada di Wilayah us-east-1
dan yang lainnya di Wilayahus-west-1
.
Pembuatan klien S3 yang diteruskan sebagai argumen pertama ditampilkan pada contoh pertama di bawahBekerja dengan objek dan Titik Akses Multi-Wilayah.
suspend fun setUpTwoBuckets( s3: S3Client, bucketName1: String, bucketName2: String, ) { println("Create two buckets in different regions.") // The shared aws config file configures the default Region to be us-east-1. s3.createBucket( CreateBucketRequest { bucket = bucketName1 }, ) s3.waitUntilBucketExists { bucket = bucketName1 } println(" Bucket [$bucketName1] created.") // Override the S3Client to work with us-west-1 for the second bucket. s3.withConfig { region = "us-west-1" }.use { s3West -> s3West.createBucket( CreateBucketRequest { bucket = bucketName2 createBucketConfiguration = CreateBucketConfiguration { locationConstraint = BucketLocationConstraint.UsWest1 } }, ) s3West.waitUntilBucketExists { bucket = bucketName2 } println(" Bucket [$bucketName2] created.") } }
Anda menggunakan klien kontrol S3
Tambahkan ketergantungan pada artefak kontrol S3 seperti yang ditunjukkan pada cuplikan berikut. (Anda dapat menavigasi ke X.Y.Z
tautan untuk melihat versi terbaru yang tersedia.)
... implementation(platform("aws.sdk.kotlin:bom:
X.Y.Z
")) implementation("aws.sdk.kotlin:s3control") ...
Konfigurasikan klien kontrol S3 untuk bekerja dengan Wilayah AWS us-west-2
seperti yang ditunjukkan pada kode berikut. Semua operasi klien kontrol S3 harus menargetkan us-west-2
wilayah tersebut.
suspend fun createS3ControlClient(): S3ControlClient { // Configure your S3ControlClient to send requests to US West (Oregon). val s3Control = S3ControlClient.fromEnvironment { region = "us-west-2" } return s3Control }
Gunakan klien kontrol S3 untuk membuat Titik Akses Multi-Wilayah dengan menentukan nama bucket (dibuat sebelumnya) seperti yang ditunjukkan pada kode berikut.
suspend fun createMrap( s3Control: S3ControlClient, accountIdParam: String, bucketName1: String, bucketName2: String, mrapName: String, ): String { println("Creating MRAP ...") val createMrapResponse: CreateMultiRegionAccessPointResponse = s3Control.createMultiRegionAccessPoint { accountId = accountIdParam clientToken = UUID.randomUUID().toString() details { name = mrapName regions = listOf( Region { bucket = bucketName1 }, Region { bucket = bucketName2 }, ) } } val requestToken: String? = createMrapResponse.requestTokenArn // Use the request token to check for the status of the CreateMultiRegionAccessPoint operation. if (requestToken != null) { waitForSucceededStatus(s3Control, requestToken, accountIdParam) println("MRAP created") } val getMrapResponse = s3Control.getMultiRegionAccessPoint( input = GetMultiRegionAccessPointRequest { accountId = accountIdParam name = mrapName }, ) val mrapAlias = getMrapResponse.accessPoint?.alias return "arn:aws:s3::$accountIdParam:accesspoint/$mrapAlias" }
Karena pembuatan Titik Akses Multi-Wilayah adalah operasi asinkron, Anda menggunakan token yang Anda terima dari respons langsung untuk memeriksa status proses pembuatan. Setelah pemeriksaan status mengembalikan pesan sukses, Anda dapat menggunakan GetMultiRegionAccessPoint
operasi untuk mendapatkan alias Titik Akses Multi-Wilayah. Alias adalah komponen terakhir dari ARN, yang Anda butuhkan untuk operasi tingkat objek.
Gunakan DescribeMultiRegionAccessPointOperation
untuk memeriksa status operasi terakhir. Setelah requestStatus
nilai menjadi “BERHASIL”, Anda dapat bekerja dengan Titik Akses Multi-Wilayah.
suspend fun waitForSucceededStatus( s3Control: S3ControlClient, requestToken: String, accountIdParam: String, timeBetweenChecks: Duration = 1.minutes, ) { var describeResponse: DescribeMultiRegionAccessPointOperationResponse describeResponse = s3Control.describeMultiRegionAccessPointOperation( input = DescribeMultiRegionAccessPointOperationRequest { accountId = accountIdParam requestTokenArn = requestToken }, ) var status: String? = describeResponse.asyncOperation?.requestStatus while (status != "SUCCEEDED") { delay(timeBetweenChecks) describeResponse = s3Control.describeMultiRegionAccessPointOperation( input = DescribeMultiRegionAccessPointOperationRequest { accountId = accountIdParam requestTokenArn = requestToken }, ) status = describeResponse.asyncOperation?.requestStatus println(status) } }
Bekerja dengan objek dan Titik Akses Multi-Wilayah
Anda menggunakan klien S3
Operasi dengan Titik Akses Multi-Wilayah ditandatangani dengan algoritma penandatanganan Asymmetric SigV4 (SigV4a). Untuk mengonfigurasi Sigv4a, pertama-tama tambahkan dependensi berikut ke proyek Anda. (Anda dapat menavigasi ke X.Y.Z
tautan untuk melihat versi terbaru yang tersedia.)
... implementation(platform("aws.sdk.kotlin:bom:
X.Y.Z
")) implementation(platform("aws.smithy.kotlin:bom:X.Y.Z
")) implementation("aws.smithy.kotlin:aws-signing-default") implementation("aws.smithy.kotlin:http-auth-aws") implementation("aws.sdk.kotlin:s3") ...
Setelah Anda menambahkan dependensi, konfigurasikan klien S3 untuk menggunakan algoritma penandatanganan Sigv4a seperti yang ditunjukkan pada kode berikut.
suspend fun createS3Client(): S3Client { // Configure your S3Client to use the Asymmetric SigV4 (SigV4a) signing algorithm. val sigV4aScheme = SigV4AsymmetricAuthScheme(DefaultAwsSigner) val s3 = S3Client.fromEnvironment { authSchemes = listOf(sigV4aScheme) } return s3 }
Setelah Anda mengonfigurasi klien S3, operasi yang didukung S3 untuk Titik Akses Multi-Wilayah bekerja sama. Satu-satunya perbedaan adalah bahwa parameter bucket harus ARN dari Multi-Region Access Point. Anda bisa mendapatkan ARN dari konsol Amazon S3 atau secara terprogram seperti yang ditunjukkan sebelumnya dalam createMrap
fungsi yang mengembalikan ARN.
Contoh kode berikut menunjukkan ARN yang digunakan dalam operasi. GetObject
suspend fun getObjectFromMrap( s3: S3Client, mrapArn: String, keyName: String, ): String? { val request = GetObjectRequest { bucket = mrapArn // Use the ARN instead of the bucket name for object operations. key = keyName } var stringObj: String? = null s3.getObject(request) { resp -> stringObj = resp.body?.decodeToString() if (stringObj != null) { println("Successfully read $keyName from $mrapArn") } } return stringObj }