本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配支援的 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();