搭配支援的 API 操作使用多區域存取點 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

搭配支援的 API 操作使用多區域存取點

Amazon S3 提供一組可管理多區域存取點的操作。Amazon S3 會同步處理其中一些操作,也會非同步處理另一些操作。當您叫用非同步操作時,Amazon S3 會先同步授權請求的操作。如果授權成功,Amazon S3 會傳回一個字符,而您可以用它來追蹤請求的操作的進度和結果。

注意

透過 Amazon S3 主控台提出的請求始終同步。主控台會等到請求完成後,才會允許您提交其他請求。

您可以使用 主控台檢視非同步操作的目前狀態和結果,也可以DescribeMultiRegionAccessPointOperation在 、 AWS CLI AWS SDKs或 REST API 中使用 。Amazon S3 會在回應非同步操作時提供追蹤字符。您可以將該追蹤字符作為 DescribeMultiRegionAccessPointOperation 的參數。當您包括追蹤字符時,Amazon S3 接著會傳回指定操作的目前狀態和結果,包括任何錯誤或相關的資源資訊。Amazon S3 會同步執行 DescribeMultiRegionAccessPointOperation 操作。

所有建立或維護多區域存取點的控制平面請求,都必須路由至 US West (Oregon) 區域。對於多區域存取點資料平面請求,不需要指定區域。對於多區域存取點容錯移轉控制平面,請求必須路由至五個受支援區域的其中一個。如需多區域存取點支援區域的詳細資訊,請參閱多區域存取點約束與限制

此外,您必須將 s3:ListAllMyBuckets許可授予提出管理多區域存取點請求的使用者、角色或其他 AWS Identity and Access Management (IAM) 實體。

下列範例示範如何在 Amazon S3 中搭配相容操作使用多區域存取點。

與 AWS 服務 和 AWS SDKs多區域存取點相容性

若要將多區域存取點與需要 Amazon S3 儲存貯體名稱的應用程式搭配使用,請在使用 AWS SDK 提出請求時使用多區域存取點的 Amazon Resource Name (ARN)。若要檢查哪些 AWS SDKs 與多區域存取點相容,請參閱與 AWS SDKs的相容性

多區域存取點與 S3 操作的相容性

您可以使用下列 Amazon S3 資料平面 API 操作,對儲存貯體中與多區域存取點相關聯的物件執行動作。下列 S3 操作可以接受多區域存取點 ARN:

注意

多區域存取點僅在使用多區域存取點 ARN 時,才支援使用多區域存取點作為目的地的複製操作。

您可以使用下列 Amazon S3 控制平面操作,來建立和管理您的多區域存取點:

檢視您的多區域存取點路由狀態

AWS CLI

下列範例命令會擷取您的多區域存取點路由組態,以便您可以查看儲存貯體目前的路由狀態。若要使用此範例命令,請以您自己的資訊取代 user input placeholders

aws s3control get-multi-region-access-point-routes --region eu-west-1 --account-id 111122223333 --mrap arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap
SDK for Java

下列適用於 Java 的 SDK 程式碼會擷取您的多區域存取點路由組態,以便您可以查看儲存貯體目前的路由狀態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

S3ControlClient s3ControlClient = S3ControlClient.builder() .region(Region.US_EAST_1) .credentialsProvider(credentialsProvider) .build(); GetMultiRegionAccessPointRoutesRequest request = GetMultiRegionAccessPointRoutesRequest.builder() .accountId("111122223333") .mrap("arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap") .build(); GetMultiRegionAccessPointRoutesResponse response = s3ControlClient.getMultiRegionAccessPointRoutes(request);
SDK for JavaScript

下列適用於 JavaScript 的 SDK 程式碼會擷取您的多區域存取點路由組態,以便您可以查看儲存貯體目前的路由狀態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

const REGION = 'us-east-1' const s3ControlClient = new S3ControlClient({ region: REGION }) export const run = async () => { try { const data = await s3ControlClient.send( new GetMultiRegionAccessPointRoutesCommand({ AccountId: '111122223333', Mrap: 'arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap', }) ) console.log('Success', data) return data } catch (err) { console.log('Error', err) } } run()
SDK for Python

下列適用於 Python 的 SDK 程式碼會擷取您的多區域存取點路由組態,以便您可以查看儲存貯體目前的路由狀態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

s3.get_multi_region_access_point_routes( AccountId=111122223333, Mrap=arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap)['Routes']

更新您的基礎 Amazon S3 儲存貯體政策

若要授予適當的存取權,您也必須更新基礎 Amazon S3 儲存貯體政策。下列範例將存取控制委派給多區域存取點政策。將存取控制委派給多區域存取點政策後,當透過多區域存取點進行請求時,系統不會再使用該儲存貯體政策來存取控制。

以下是範例儲存貯體政策,可將存取控制委派給多區域存取點政策。若要使用此範例儲存貯體政策,請以您自己的資訊取代 user input placeholders。若要透過 AWS CLI put-bucket-policy命令套用此政策,如下例所示,請將政策儲存在檔案中,例如 policy.json

JSON

下列 put-bucket-policy 範例命令會將更新的 S3 儲存貯體政策與您的 S3 儲存貯體建立關聯:

aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file:///tmp/policy.json

更新多區域存取點路由組態

下列範例命令會更新多區域存取點路由組態。可以針對下列五個區域執行多區域存取點路由命令:

  • ap-southeast-2

  • ap-northeast-1

  • us-east-1

  • us-west-2

  • eu-west-1

在多區域存取點路由組態中,您可以將儲存貯體設為主動或被動路由狀態。主動儲存貯體會接收流量,而被動儲存貯體則不會接收流量。您可以將儲存貯體的 TrafficDialPercentage 值設為 100 表示主動或 0 表示被動,來設定儲存貯體的路由狀態。

AWS CLI

下列範例命令會更新您的多區域存取點路由組態。在此範例中,amzn-s3-demo-bucket1 會設為主動狀態,而 amzn-s3-demo-bucket2 會設為被動狀態。若要使用此範例命令,請以您自己的資訊取代 user input placeholders

aws s3control submit-multi-region-access-point-routes --region ap-southeast-2 --account-id 111122223333 --mrap arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap --route-updates Bucket=amzn-s3-demo-bucket1,TrafficDialPercentage=100 Bucket=amzn-s3-demo-bucket2,TrafficDialPercentage=0
SDK for Java

下列適用於 Java 的 SDK 程式碼會更新您的多區域存取點路由組態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

S3ControlClient s3ControlClient = S3ControlClient.builder() .region(Region.ap-southeast-2) .credentialsProvider(credentialsProvider) .build(); SubmitMultiRegionAccessPointRoutesRequest request = SubmitMultiRegionAccessPointRoutesRequest.builder() .accountId("111122223333") .mrap("arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap") .routeUpdates( MultiRegionAccessPointRoute.builder() .region("eu-west-1") .trafficDialPercentage(100) .build(), MultiRegionAccessPointRoute.builder() .region("ca-central-1") .bucket("111122223333") .trafficDialPercentage(0) .build() ) .build(); SubmitMultiRegionAccessPointRoutesResponse response = s3ControlClient.submitMultiRegionAccessPointRoutes(request);
SDK for JavaScript

下列適用於 JavaScript 的 SDK 程式碼會更新您的多區域存取點路由組態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

const REGION = 'ap-southeast-2' const s3ControlClient = new S3ControlClient({ region: REGION }) export const run = async () => { try { const data = await s3ControlClient.send( new SubmitMultiRegionAccessPointRoutesCommand({ AccountId: '111122223333', Mrap: 'arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap', RouteUpdates: [ { Region: 'eu-west-1', TrafficDialPercentage: 100, }, { Region: 'ca-central-1', Bucket: 'amzn-s3-demo-bucket1', TrafficDialPercentage: 0, }, ], }) ) console.log('Success', data) return data } catch (err) { console.log('Error', err) } } run()
SDK for Python

下列適用於 Python 的 SDK 程式碼會更新您的多區域存取點路由組態。若要使用此範例語法,請以您自己的資訊取代 user input placeholders

s3.submit_multi_region_access_point_routes( AccountId=111122223333, Mrap=arn:aws:s3::111122223333:accesspoint/abcdef0123456.mrap, RouteUpdates= [{ 'Bucket': amzn-s3-demo-bucket, 'Region': ap-southeast-2, 'TrafficDialPercentage': 10 }])

在您的多區域存取點中將物件新增至儲存貯體

若要將與多區域存取點相關聯的物件新增至儲存貯體,您可以使用 PutObject 操作。若要將多區域存取點中的所有儲存貯體保持同步,請啟用跨區域複寫

注意

若要使用這項操作,您必須具有多區域存取點的 s3:PutObject 許可。如需多區域存取點許可需求的詳細資訊,請參閱 許可

AWS CLI

下列範例資料平面請求會將 example.txt 上傳至指定的多區域存取點。若要使用此範例,請以您自己的資訊取代 user input placeholders

aws s3api put-object --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap --key example.txt --body example.txt
SDK for Java
S3Client s3Client = S3Client.builder() .build(); PutObjectRequest objectRequest = PutObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example.txt") .build(); s3Client.putObject(objectRequest, RequestBody.fromString("Hello S3!"));
SDK for JavaScript
const client = new S3Client({}); async function putObjectExample() { const command = new PutObjectCommand({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", Key: "example.txt", Body: "Hello S3!", }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.put_object( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap', Key='example.txt', Body='Hello S3!' )

從您的多區域存取點中擷取物件

若要從多區域存取點中擷取物件,您可以使用 GetObject 操作。

注意

若要使用這項 API 操作,您必須具有多區域存取點的 s3:GetObject 許可。如需多區域存取點許可需求的詳細資訊,請參閱 許可

AWS CLI

下列範例資料平面請求會從指定的多區域存取點中擷取 example.txt,並將其下載為 downloaded_example.txt。若要使用此範例,請以您自己的資訊取代 user input placeholders

aws s3api get-object --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap --key example.txt downloaded_example.txt
SDK for Java
S3Client s3 = S3Client .builder() .build(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example.txt") .build(); s3Client.getObject(getObjectRequest);
SDK for JavaScript
const client = new S3Client({}) async function getObjectExample() { const command = new GetObjectCommand({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", Key: "example.txt" }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.get_object( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap', Key='example.txt' )

列出存放在以多區域存取點為基礎之儲存貯體的物件

若要傳回存放在以多區域存取點為基礎之儲存貯體的物件清單,請使用 ListObjectsV2 操作。在下列範例命令中,使用多區域存取點的 ARN,列出指定多區域存取點的所有物件。在此情況下,多區域存取點 ARN 為:

arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap

注意

若要使用這項 API 操作,您必須具有多區域存取點的 s3:ListBucket 許可和基礎儲存貯體。如需多區域存取點許可需求的詳細資訊,請參閱 許可

AWS CLI

下列範例資料平面請求會列出以 ARN 所指定多區域存取點為基礎之儲存貯體中的物件。若要使用此範例,請以您自己的資訊取代 user input placeholders

aws s3api list-objects-v2 --bucket arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap
SDK for Java
S3Client s3Client = S3Client.builder() .build(); String bucketName = "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap"; ListObjectsV2Request listObjectsRequest = ListObjectsV2Request .builder() .bucket(bucketName) .build(); s3Client.listObjectsV2(listObjectsRequest);
SDK for JavaScript
const client = new S3Client({}); async function listObjectsExample() { const command = new ListObjectsV2Command({ Bucket: "arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap", }); try { const response = await client.send(command); console.log(response); } catch (err) { console.error(err); } }
SDK for Python
import boto3 client = boto3.client('s3') client.list_objects_v2( Bucket='arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap' )

搭配多區域存取點使用預先簽章的 URL

您可以使用預先簽章的 URL 來產生一個 URL,允許其他人透過 Amazon S3 多區域存取點存取 Amazon S3 儲存貯體。當建立預先簽章的 URL 時,您會將其與 S3 上傳 (PutObject) 或 S3 下載 (GetObject) 等特定物件動作建立關聯。您可以共用預先簽章的 URL,且擁有存取權的任何人都可以執行內嵌在 URL 中的動作,如同原始簽章使用者一樣。

預先簽章的 URL 具有到期日。過了到期時間,URL 將不再運作起作用。

在您搭配預先簽章的 URL 使用 S3 多區域存取點之前,請先檢查 AWS SDK 與 SigV4a 演算法的相容性。驗證您的 SDK 版本是否支援 SigV4a 作為簽署實作,用來簽署全域 AWS 區域 請求。如需搭配 Amazon S3 使用預先簽章 URL 的詳細資訊,請參閱使用預先簽章的 URL 共用物件

下列範例示範如何搭配預先簽章的 URL 使用多區域存取點。若要使用這些範例,請以您自己的資訊取代 user input placeholders

AWS CLI
aws s3 presign arn:aws:s3::123456789012:accesspoint/MultiRegionAccessPoint_alias/example-file.txt
SDK for Python
import logging import boto3 from botocore.exceptions import ClientError s3_client = boto3.client('s3',aws_access_key_id='xxx',aws_secret_access_key='xxx') s3_client.generate_presigned_url(HttpMethod='PUT',ClientMethod="put_object", Params={'Bucket':'arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap','Key':'example-file'})
SDK for Java
S3Presigner s3Presigner = S3Presigner.builder() .credentialsProvider(StsAssumeRoleCredentialsProvider.builder() .refreshRequest(assumeRole) .stsClient(stsClient) .build()) .build(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("arn:aws:s3::123456789012:accesspoint/abcdef0123456.mrap") .key("example-file") .build(); GetObjectPresignRequest preSignedReq = GetObjectPresignRequest.builder() .getObjectRequest(getObjectRequest) .signatureDuration(Duration.ofMinutes(10)) .build(); PresignedGetObjectRequest presignedGetObjectRequest = s3Presigner.presignGetObject(preSignedReq);
注意

若要搭配臨時安全登入資料使用 SigV4A,例如使用 IAM 角色時,請務必從 AWS Security Token Service (AWS STS) 中的區域端點請求臨時登入資料,而非全域端點。如果您使用全域端點 for AWS STS (sts.amazonaws.com), AWS STS 會從全域端點產生臨時登入資料,Sig4A 不支援。因此,您會收到錯誤。若要解決此問題,請使用任何列出的區域端點 AWS STS

使用以多區域存取點設定為請求者付款的儲存貯體

若與多區域存取點相關聯的 S3 儲存貯體設定為使用請求者付款,請求者將支付儲存貯體請求、下載和任何多區域存取點的相關費用。如需詳細資訊,請參閱 Simple Storage Service (Amazon S3) 定價

以下範例是多區域存取點的資料平面請求,該多區域存取點連接至請求者付款儲存貯體。

AWS CLI

若要從連接至請求者付款儲存貯體的多區域存取點下載物件,您必須將 --request-payer requester 指定為 get-object 請求的一部分。您也必須指定儲存貯體中檔案的名稱,以及應存放下載檔案的位置。

aws s3api get-object --bucket MultiRegionAccessPoint_ARN --request-payer requester --key example-file-in-bucket.txt example-location-of-downloaded-file.txt
SDK for Java

若要從連接至請求者付款儲存貯體的多區域存取點下載物件,您必須將 RequestPayer.REQUESTER 指定為 GetObject 請求的一部分。您也必須指定儲存貯體中檔案的名稱,以及儲存檔案的位置。

GetObjectResponse getObjectResponse = s3Client.getObject(GetObjectRequest.builder() .key("example-file.txt") .bucket("arn:aws:s3:: 123456789012:accesspoint/abcdef0123456.mrap") .requestPayer(RequestPayer.REQUESTER) .build() ).response();