使用 Amazon S3 雙堆疊端點 - Amazon Simple Storage Service

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

使用 Amazon S3 雙堆疊端點

Amazon S3 雙堆疊端點支援透過 IPv6 與 IPv4 的 S3 儲存貯體要求。本節說明如何使用雙堆疊端點。

Amazon S3 雙堆疊端點

當您請求雙堆疊端點時,儲存貯體 URL 會解析為 IPv6 或 IPv4 地址。如需如何存取 IPv6 儲存貯體的詳細資訊,請參閱 透過 IPv6 向 Amazon S3 提出請求

使用 REST API 等同於使用端點名稱 (URI) 直接存取 Amazon S3 端點。您可以使用虛擬代管型或路徑型的端點名稱,透過雙堆疊端點存取 S3 儲存貯體。Amazon S3 僅支援區域雙堆疊端點名稱,亦即,指定的名稱必須包含區域。

請使用下列命名慣例,為雙堆疊虛擬代管型及路徑型的端點名稱命名:

  • 虛擬代管型雙堆疊端點:

    bucketname.s3.dualstack.aws-region.amazonaws.com

     

  • 路徑型雙堆疊端點:

    s3.dualstack.aws-region.amazonaws.com/bucketname

如需端點名稱樣式的詳細資訊,請參閱存取及列出 Amazon S3 儲存貯體。如需 Amazon S3 端點的清單,請參閱《AWS 一般參考》中的區域與端點

重要

您可以搭配使用 Transfer Acceleration 與雙堆疊端點。如需詳細資訊,請參閱 Amazon S3 Transfer Acceleration 入門

注意

用於存取 Amazon S3 (介面 VPC 端點閘道 VPC 端點) 的兩種 VPC 端點類型不支援雙堆疊。如需 Amazon S3 的 VPC 端點的詳細資訊,請參閱 AWS PrivateLink 對於 Amazon S3

使用 AWS Command Line Interface (AWS CLI) 與 AWS 開發套件時,您可使用參數或標記以變更為雙堆疊端點。您也可以直接指定雙堆疊端點來覆寫設定檔中的 Amazon S3 端點。下列各節說明如何從 AWS CLI 和 AWS 開發套件使用雙堆疊端點。

從 AWS CLI 使用雙堆疊端點

本節提供可用於要求雙堆疊端點的 AWS CLI 命令範例。如需設定 AWS CLI 的說明,請參閱使用 AWS CLI 來透過 Amazon S3 進行開發

您在 AWS Config 檔案中,將設定檔內的組態值 use_dualstack_endpoint 設為 true,將 s3s3api AWS CLI 命令的所有 Amazon S3 請求導向至指定區域的雙堆疊端點。您可以在設定檔或命令中使用 --region 選項指定區域。

在 AWS CLI 中使用雙堆疊端點時,可以使用 pathvirtual 定址樣式。設定檔中設定的定址樣式控制儲存貯體名稱應包含主機名稱中,或是包含在 URL 中。根據預設,CLI 會盡可能地嘗試使用虛擬樣式,但會在必要時切換回路徑樣式。如需詳細資訊,請參閱 AWS CLI Amazon S3 組態

您也可以使用命令變更組態,將預設設定檔中的 use_dualstack_endpoint 設為 true,以及將 addressing_style 設為 virtual,如下所示。

$ aws configure set default.s3.use_dualstack_endpoint true $ aws configure set default.s3.addressing_style virtual

若只要在指定的 AWS CLI 命令 (而不是所有的命令) 中使用雙堆疊端點,可以使用下列兩種方法之一:

  • 您可以將任何 --endpoint-urlhttps://s3.dualstack.aws-region.amazonaws.com 命令的 http://s3.dualstack.aws-region.amazonaws.com 參數設成 s3s3api,以在個別的命令中使用雙堆疊端點。

    $ aws s3api list-objects --bucket bucketname --endpoint-url https://s3.dualstack.aws-region.amazonaws.com
  • 您可以在 AWS Config 檔案中設定不同的設定檔。例如,您可以建立一個設定檔,將 use_dualstack_endpoint 設為 true,再建立另一個設定檔不設定 use_dualstack_endpoint。當您執行命令時,必須依據是否要使用雙堆疊端點來指定所要使用的設定檔。

注意

當您使用 AWS CLI 時,目前無法搭配使用使用 Transfer Acceleration 與雙堆疊端點。不過,我們即將推出 AWS CLI 支援。如需詳細資訊,請參閱「使用 AWS CLI」。

從 AWS 開發套件使用雙堆疊端點

本節提供如何使用 AWS 開發套件存取雙堆疊端點的範例。

AWS SDK for Java 雙堆疊端點範例

下列範例示範如何在使用 AWS SDK for Java 建立的 Amazon S3 用戶端狀態下,啟用雙堆疊端點。

如需建立及測試可行 Java 範例的說明,請參閱測試 Amazon S3 Java 程式碼範例

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; public class DualStackEndpoints { public static void main(String[] args) { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { // Create an Amazon S3 client with dual-stack endpoints enabled. AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .withDualstackEnabled(true) .build(); s3Client.listObjects(bucketName); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }

若要在 Windows 上使用 AWS SDK for Java,必須設定下列 Java 虛擬機器 (JVM) 屬性:

java.net.preferIPv6Addresses=true

AWS .NET 開發套件的雙堆疊端點範例

使用適用於 .NET 的 AWS 開發套件等同於使用 AmazonS3Config 類別啟用雙堆疊端點,如下列範例所示。

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class DualStackEndpointTest { private const string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { var config = new AmazonS3Config { UseDualstackEndpoint = true, RegionEndpoint = bucketRegion }; client = new AmazonS3Client(config); Console.WriteLine("Listing objects stored in a bucket"); ListingObjectsAsync().Wait(); } private static async Task ListingObjectsAsync() { try { var request = new ListObjectsV2Request { BucketName = bucketName, MaxKeys = 10 }; ListObjectsV2Response response; do { response = await client.ListObjectsV2Async(request); // Process the response. foreach (S3Object entry in response.S3Objects) { Console.WriteLine("key = {0} size = {1}", entry.Key, entry.Size); } Console.WriteLine("Next Continuation Token: {0}", response.NextContinuationToken); request.ContinuationToken = response.NextContinuationToken; } while (response.IsTruncated == true); } catch (AmazonS3Exception amazonS3Exception) { Console.WriteLine("An AmazonS3Exception was thrown. Exception: " + amazonS3Exception.ToString()); } catch (Exception e) { Console.WriteLine("Exception: " + e.ToString()); } } } }

如需列出物件的完整 .NET 範例,請參閱「以程式設計方式列出物件索引鍵」。

如需如何建立及測試所使用之 .NET 範例的資訊,請參閱「執行 Amazon S3 .NET 程式碼範例」。

從 REST API 使用雙堆疊端點

如需如何使用 REST API 要雙堆疊端點的資訊,請參閱「使用 REST API 提出雙重堆疊端點要求」。