Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Trabaje con los puntos de acceso multirregionales de Amazon S3 mediante el SDK para Kotlin
Los puntos de acceso multirregión de Amazon S3 proporcionan un punto de conexión global que las aplicaciones pueden utilizar para satisfacer las solicitudes de los buckets de S3 ubicados en varias Regiones de AWS. Puede utilizar puntos de acceso multirregión para crear aplicaciones de multirregiones con la misma arquitectura utilizada en una sola región y, a continuación, ejecutar esas aplicaciones en cualquier parte del mundo.
La guía del usuario de Amazon S3 contiene más información básica sobre los puntos de acceso multirregionales.
Trabaje con puntos de acceso multirregionales
Para crear un punto de acceso multirregional, comience por especificar un segmento en cada AWS región en el que desee atender las solicitudes. El siguiente fragmento crea dos depósitos.
La siguiente función crea dos depósitos para que funcionen con el punto de acceso multirregional. Un depósito está en la región us-east-1
y el otro en la región. us-west-1
La creación del cliente S3 que pasó como primer argumento se muestra en el primer ejemplo de abajoTrabaje con objetos y puntos de acceso multirregionales.
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.") } }
Utiliza el cliente de control S3
Agrega una dependencia al artefacto de control de S3, tal y como se muestra en el siguiente fragmento. (Puede navegar hasta el X.Y.Z
enlace para ver la última versión disponible).
... implementation(platform("aws.sdk.kotlin:bom:
X.Y.Z
")) implementation("aws.sdk.kotlin:s3control") ...
Configure el cliente de control S3 para que funcione Región de AWS us-west-2
como se muestra en el siguiente código. Todas las operaciones del cliente de control de S3 deben dirigirse a la us-west-2
región.
suspend fun createS3ControlClient(): S3ControlClient { // Configure your S3ControlClient to send requests to US West (Oregon). val s3Control = S3ControlClient.fromEnvironment { region = "us-west-2" } return s3Control }
Utilice el cliente de control S3 para crear un punto de acceso multirregional especificando los nombres de los buckets (creados anteriormente), tal y como se muestra en el código siguiente.
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" }
Como la creación de un punto de acceso multirregional es una operación asíncrona, se utiliza el token que se recibe de la respuesta inmediata para comprobar el estado del proceso de creación. Una vez que la comprobación de estado muestre un mensaje de éxito, puede utilizar la GetMultiRegionAccessPoint
operación para obtener el alias del punto de acceso multirregional. El alias es el último componente del ARN, que se necesita para las operaciones a nivel de objeto.
Utilice el DescribeMultiRegionAccessPointOperation
para comprobar el estado de la última operación. Cuando el requestStatus
valor pase a ser «CORRECTO», podrá trabajar con el punto de acceso multirregional.
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) } }
Trabaje con objetos y puntos de acceso multirregionales
El cliente S3
Las operaciones con puntos de acceso multirregionales se firman con el algoritmo de firma asimétrico SiGv4 (SiGV4a). Para configurar SigV4a, primero añada las siguientes dependencias a su proyecto. (Puedes navegar hasta el X.Y.Z
enlace para ver la última versión disponible).
... 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") ...
Tras añadir las dependencias, configure el cliente S3 para que utilice el algoritmo de firma SigV4a, tal como se muestra en el código siguiente.
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 }
Después de configurar el cliente S3, las operaciones que S3 admite para los puntos de acceso multirregionales funcionan de la misma manera. La única diferencia es que el parámetro del bucket debe ser el ARN del punto de acceso multirregional. Puede obtener el ARN desde la consola de Amazon S3 o mediante programación, tal y como se muestra anteriormente en la createMrap
función que devuelve un ARN.
El siguiente ejemplo de código muestra el ARN utilizado en una GetObject
operación.
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 }