

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

# 使用 Amazon S3 雙堆疊端點
<a name="dual-stack-endpoints"></a>

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

**Topics**
+ [Amazon S3 雙堆疊端點](#dual-stack-endpoints-description)
+ [從 使用雙堆疊端點 AWS CLI](#dual-stack-endpoints-cli)
+ [從 AWS SDKs 使用雙堆疊端點](#dual-stack-endpoints-sdks)
+ [從 REST API 使用雙堆疊端點](#dual-stack-endpoints-examples-rest-api)

## Amazon S3 雙堆疊端點
<a name="dual-stack-endpoints-description"></a>

當您請求雙堆疊端點時，儲存貯體 URL 會解析為 IPv6 或 IPv4 地址。如需如何存取 IPv6 儲存貯體的詳細資訊，請參閱 [透過 IPv6 向 Amazon S3 提出請求](ipv6-access.md)。

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

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

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

   
+ 路徑型雙堆疊端點：

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

如需端點名稱樣式的詳細資訊，請參閱[存取和列出 Amazon S3 儲存貯體。 ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)如需 Amazon S3 端點的清單，請參閱《AWS 一般參考》**中的[區域與端點](https://docs.aws.amazon.com/general/latest/gr/s3.html)。

**重要**  
您可以搭配使用 Transfer Acceleration 與雙堆疊端點。如需詳細資訊，請參閱[開始使用 Amazon S3 Transfer Acceleration。 ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration-getting-started.html)

**注意**  
存取 Amazon S3 的兩種虛擬私有雲端 (VPC) 端點類型 (*介面 VPC 端點*和*閘道 VPC 端點*) 現在具有雙堆疊支援。如需 Amazon S3 VPC 端點的詳細資訊，請參閱適用於 [AWS Amazon S3 的 PrivateLink](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)。

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

## 從 使用雙堆疊端點 AWS CLI
<a name="dual-stack-endpoints-cli"></a>

本節提供用於向雙堆疊端點提出請求的 AWS CLI 命令範例。如需設定 的指示 AWS CLI，請參閱 [使用 使用 Amazon S3 進行開發 AWS CLI](setup-aws-cli.md)。

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

搭配 使用雙堆疊端點時 AWS CLI，同時支援 `path`和 `virtual`定址樣式。設定檔中設定的定址樣式控制儲存貯體名稱應包含主機名稱中，或是包含在 URL 中。根據預設，CLI 會盡可能地嘗試使用虛擬樣式，但會在必要時切換回路徑樣式。如需詳細資訊，請參閱 [AWS CLI Amazon S3 組態](https://docs.aws.amazon.com/cli/latest/topic/s3-config.html)。

您也可以使用命令變更組態，將預設設定檔中的 `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-url` 或 `https://s3.dualstack.{{aws-region}}.amazonaws.com` 命令的 `http://s3.dualstack.{{aws-region}}.amazonaws.com` 參數設成 `s3` 或 `s3api`，以在個別的命令中使用雙堆疊端點。

  ```
  $ 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 ，您目前無法搭配雙堆疊端點使用傳輸加速。不過， 的支援 AWS CLI 即將推出。如需詳細資訊，請參閱[啟用和使用 S3 Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html#transfer-acceleration-requirements)。

## 從 AWS SDKs 使用雙堆疊端點
<a name="dual-stack-endpoints-sdks"></a>

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

### 適用於 Java 的 AWS SDK 雙堆疊端點範例
<a name="dual-stack-endpoints-examples-java"></a>

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

如需建立和測試工作 Java 範例的說明，請參閱《 適用於 Java 的 AWS SDK 開發人員指南》中的[入門](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html)。

```
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 適用於 Java 的 AWS SDK 上使用 ，您可能需要設定下列 Java 虛擬機器 (JVM) 屬性：

```
java.net.preferIPv6Addresses=true
```

### AWS .NET SDK 雙堆疊端點範例
<a name="dual-stack-endpoints-examples-dotnet"></a>

使用適用於 .NET 的 AWS SDK 時，您可以使用 `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 的 AWS SDK 開發人員指南》中的適用於 .NET 的 SDK 入門](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)。 *AWS *

## 從 REST API 使用雙堆疊端點
<a name="dual-stack-endpoints-examples-rest-api"></a>

如需如何使用 REST API 要雙堆疊端點的資訊，請參閱「[使用 REST API 提出雙重堆疊端點要求](RESTAPI.md#rest-api-dual-stack)」。