

**本文档仅适用于 AWS CLI 版本 1。**

我们已宣布即将终止对 AWS CLI 版本 1 的支持。建议您迁移到 AWS CLI 版本 2。有关日期、其它详细信息以及如何迁移的信息，请参阅[公告](https://aws.amazon.com/blogs/developer/cli-v1-maintenance-mode-announcement/)。有关 AWS CLI 版本 2 的相关文档，请参阅[版本 2 用户指南](https://docs.aws.amazon.com/cli/latest/userguide/)。

# 在 AWS CLI 中使用端点
<a name="cli-configure-endpoints"></a>

要通过编程方式连接到某个 AWS 服务，您需要使用端点。*端点*是作为 AWS Web 服务的入口点的 URL。AWS Command Line Interface (AWS CLI) 会自动为 AWS 区域中的每项服务使用默认端点，但您可以应 API 请求指定备用端点。

**Contents**
+ [为单个命令设置端点](#endpoints-command)
+ [为所有 AWS 服务设置全局端点](#endpoints-global)
+ [设置成为所有 AWS 服务使用 FIPS 端点](#endpoints-fips)
+ [设置成为所有 AWS 服务使用双堆栈端点](#endpoints-dual-stack)
+ [设置特定于服务的端点](#endpoints-service-specific)
  + [环境变量](#endpoints-service-specific-envvars)
  + [共享 `config` 文件](#endpoints-service-specific-config)
  + [特定于服务的标识符列表](#endpoints-service-specific-table)
+ [基于账户的端点](#endpoints-accountid)
+ [端点配置和设置优先级](#endpoints-precedence)

## 为单个命令设置端点
<a name="endpoints-command"></a>

要覆盖单个命令的任何端点设置或环境变量，请使用 `--endpoint-url` 命令行选项。以下命令示例使用自定义 Amazon S3 端点 URL。

```
$ aws s3 ls --endpoint-url http://localhost:4567
```

## 为所有 AWS 服务设置全局端点
<a name="endpoints-global"></a>

要将所有服务的请求路由到自定义端点 URL，请使用以下设置之一：
+ 环境变量：
  + `AWS\$1IGNORE\$1CONFIGURED\$1ENDPOINT\$1URLS` – 忽略已配置的端点 URL。

------
#### [ Linux or macOS ]

    ```
    $ export AWS_IGNORE_CONFIGURED_ENDPOINT_URLS=true
    ```

------
#### [ Windows Command Prompt ]

    **为所有会话设置**

    ```
    C:\> setx AWS_IGNORE_CONFIGURED_ENDPOINT_URLS true
    ```

    **仅为当前会话设置**

    ```
    C:\> set AWS_IGNORE_CONFIGURED_ENDPOINT_URLS=true
    ```

------
#### [ PowerShell ]

    ```
    PS C:\> $Env:AWS_IGNORE_CONFIGURED_ENDPOINT_URLS="true"
    ```

------
  + `AWS\$1ENDPOINT\$1URL` – 设置全局端点 URL。

------
#### [ Linux or macOS ]

    ```
    $ export AWS_ENDPOINT_URL=http://localhost:4567
    ```

------
#### [ Windows Command Prompt ]

    **为所有会话设置**

    ```
    C:\> setx AWS_ENDPOINT_URL http://localhost:4567
    ```

    **仅为当前会话设置**

    ```
    C:\> set AWS_ENDPOINT_URL=http://localhost:4567
    ```

------
#### [ PowerShell ]

    ```
    PS C:\> $Env:AWS_ENDPOINT_URL="http://localhost:4567"
    ```

------
+ `config` 文件：
  + `ignore\$1configure\$1endpoint\$1urls` – 忽略已配置的端点 URL。

    ```
    ignore_configure_endpoint_urls = true
    ```
  + `endpoint\$1url` – 设置全局端点 URL。

    ```
    endpoint_url = http://localhost:4567
    ```

特定于服务的端点和 `--endpoint-url` 命令行选项会覆盖所有全局端点。

## 设置成为所有 AWS 服务使用 FIPS 端点
<a name="endpoints-fips"></a>

要路由所有服务的请求以使用 FIPS 端点，请使用以下设置之一：
+ `AWS\$1USE\$1FIPS\$1ENDPOINT` 环境变量。

------
#### [ Linux or macOS ]

  ```
  $ export AWS_USE_FIPS_ENDPOINT=true
  ```

------
#### [ Windows Command Prompt ]

  **为所有会话设置**

  ```
  C:\> setx AWS_USE_FIPS_ENDPOINT true
  ```

  **仅为当前会话设置**

  ```
  C:\> set AWS_USE_FIPS_ENDPOINT=true
  ```

------
#### [ PowerShell ]

  ```
  PS C:\> $Env:AWS_USE_FIPS_ENDPOINT="true"
  ```

------
+ `use\$1fips\$1endpoint` 文件设置。

  ```
  use_fips_endpoint = true
  ```

在某些 AWS 区域，部分 AWS 服务提供支持[美国联邦信息处理标准 (FIPS) 140-2](https://aws.amazon.com/compliance/fips/) 的端点。当 AWS 服务支持 FIPS 时，此设置指定 AWS CLI 应使用哪个 FIPS 端点。与标准 AWS 端点不同，FIPS 端点使用符合 FIPS 140-2 的 TLS 软件库。与美国政府有业务来往的企业可能需要使用这些端点。

如果启用此设置，但不存在适用于您所在 AWS 区域中的服务的 FIPS 端点，则 AWS 命令可能会失败。在这种情况下，请使用 `--endpoint-url` 选项手动指定要在命令中使用的端点，或者使用[特定于服务的端点](#endpoints-service-specific)。

有关按 AWS 区域指定 FIPS 端点的更多信息，请参阅[按服务列出的 FIPS 端点](https://aws.amazon.com/compliance/fips/)。

## 设置成为所有 AWS 服务使用双堆栈端点
<a name="endpoints-dual-stack"></a>

要路由所有服务的请求以在可用时使用双堆栈端点，请使用以下设置之一：
+ `AWS\$1USE\$1DUALSTACK\$1ENDPOINT` 环境变量。

------
#### [ Linux or macOS ]

  ```
  $ export AWS_USE_DUALSTACK_ENDPOINT=true
  ```

------
#### [ Windows Command Prompt ]

  **为所有会话设置**

  ```
  C:\> setx AWS_USE_DUALSTACK_ENDPOINT true
  ```

  **仅为当前会话设置**

  ```
  C:\> set AWS_USE_DUALSTACK_ENDPOINT=true
  ```

------
#### [ PowerShell ]

  ```
  PS C:\> $Env:AWS_USE_DUALSTACK_ENDPOINT="true"
  ```

------
+ `use\$1dualstack\$1endpoint` 文件设置。

  ```
  use_dualstack_endpoint = true
  ```

允许使用双堆栈端点发送 AWS 请求。要详细了解支持 IPv4 和 IPv6 流量的双堆栈端点，请参阅 *Amazon Simple Storage Service 用户指南*中的[使用 Amazon S3 双堆栈端点](https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html)。双堆栈端点适用于某些区域。如果不存在适用于服务和/或 AWS 区域的双堆栈端点，则请求将失败。默认情况下，将禁用该功能。

## 设置特定于服务的端点
<a name="endpoints-service-specific"></a>

特定于服务的端点配置提供了一个选项，可使用您应 AWS CLI 请求选择的永久端点。这些设置可以灵活地支持本地端点、VPC 端点和第三方本地 AWS 开发环境。不同的端点可分别用于测试环境和生产环境。您可以为个别 AWS 服务指定端点 URL。

可通过以下方式指定特定于服务的端点：
+ 单个命令的命令行选项 `--endpoint-url`。
+ 环境变量：
  + `AWS\$1IGNORE\$1CONFIGURED\$1ENDPOINT\$1URLS` – 忽略所有已配置的端点 URL，除非在命令行中指定。
  + `AWS\$1ENDPOINT\$1URL\$1<SERVICE>` – 指定用于特定服务的自定义端点，在该服务中 `<SERVICE>` 替换为 AWS 服务标识符。有关所有特定于服务的变量，请参阅[特定于服务的端点：特定于服务的标识符列表](#endpoints-service-specific-table)。
+ `config` 文件：
  + `ignore\$1configure\$1endpoint\$1urls` – 忽略所有已配置的端点 URL，除非使用环境变量或在命令行中指定。
  + `config` 文件的 [`services`](cli-configure-files.md#cli-configure-files-format-services) 节与 `endpoint\$1url` 文件设置相结合。

**Topics**
+ [环境变量](#endpoints-service-specific-envvars)
+ [共享 `config` 文件](#endpoints-service-specific-config)
+ [特定于服务的标识符列表](#endpoints-service-specific-table)

### 特定于服务的端点：环境变量
<a name="endpoints-service-specific-envvars"></a>

环境变量会覆盖配置文件中的设置，但不会覆盖命令行上指定的选项。如果您希望所有配置文件在设备上使用相同的端点，请使用环境变量。

以下是特定于服务的环境变量：
+ `AWS\$1IGNORE\$1CONFIGURED\$1ENDPOINT\$1URLS` – 忽略所有已配置的端点 URL，除非在命令行中指定。

------
#### [ Linux or macOS ]

  ```
  $ export AWS_IGNORE_CONFIGURED_ENDPOINT_URLS=true
  ```

------
#### [ Windows Command Prompt ]

  **为所有会话设置**

  ```
  C:\> setx AWS_IGNORE_CONFIGURED_ENDPOINT_URLS true
  ```

  **仅为当前会话设置**

  ```
  C:\> set AWS_IGNORE_CONFIGURED_ENDPOINT_URLS=true
  ```

------
#### [ PowerShell ]

  ```
  PS C:\> $Env:AWS_IGNORE_CONFIGURED_ENDPOINT_URLS="true"
  ```

------
+ `AWS\$1ENDPOINT\$1URL\$1<SERVICE>` – 指定用于特定服务的自定义端点，在该服务中 `<SERVICE>` 替换为 AWS 服务标识符。有关所有特定于服务的变量，请参阅[特定于服务的端点：特定于服务的标识符列表](#endpoints-service-specific-table)。

  以下环境变量示例设置 AWS Elastic Beanstalk 的端点。

------
#### [ Linux or macOS ]

  ```
  $ export AWS_ENDPOINT_URL_ELASTIC_BEANSTALK=http://localhost:4567
  ```

------
#### [ Windows Command Prompt ]

  **为所有会话设置**

  ```
  C:\> setx AWS_ENDPOINT_URL_ELASTIC_BEANSTALK http://localhost:4567
  ```

  **仅为当前会话设置**

  ```
  C:\> set AWS_ENDPOINT_URL_ELASTIC_BEANSTALK=http://localhost:4567
  ```

------
#### [ PowerShell ]

  ```
  PS C:\> $Env:AWS_ENDPOINT_URL_ELASTIC_BEANSTALK="http://localhost:4567"
  ```

------

有关设置环境变量的更多信息，请参阅[为 AWS CLI 配置环境变量](cli-configure-envvars.md)。

### 特定于服务的端点：共享 `config` 文件
<a name="endpoints-service-specific-config"></a>

在共享 `config` 文件中，`endpoint_url` 用在多个节中。要设置特定于服务的端点，请使用嵌套在 `services` 节内服务标识符密钥下的 `endpoint_url` 设置。有关在共享 `config` 文件中定义 `services` 节的详细信息，请参阅 [节类型：`services`](cli-configure-files.md#cli-configure-files-format-services)。

以下示例使用 `services` 节为 Amazon S3 配置服务特定的端点 URL 和用于其他所有服务的自定义全局端点：

```
[profile dev1]
endpoint_url = http://localhost:1234
services = s3-specific

[services testing-s3]
s3 = 
  endpoint_url = http://localhost:4567
```

单个配置文件可以为多个服务配置端点。以下示例在同一配置文件中为 Amazon S3 和 AWS Elastic Beanstalk 设置服务特定的端点 URL。

有关 `services` 节中要使用的所有服务标识符密钥的列表，请参阅[特定于服务的标识符列表](#endpoints-service-specific-table)。

```
[profile dev1]
services = testing-s3-and-eb

[services testing-s3-and-eb]
s3 = 
  endpoint_url = http://localhost:4567
elastic_beanstalk = 
  endpoint_url = http://localhost:8000
```

“服务配置”节可以在多个配置文件中使用。以下示例有两个配置文件使用相同的 `services` 定义：

```
[profile dev1]
output = json
services = testing-s3

[profile dev2]
output = text
services = testing-s3

[services testing-s3]
s3 = 
  endpoint_url = https://localhost:4567
```

### 特定于服务的端点：特定于服务的标识符列表
<a name="endpoints-service-specific-table"></a>

AWS 服务标识符基于 API 模型的 `serviceId`，不过需要将所有空格替换为下划线，并将所有字母小写。

下表列出了所有特定于服务的标识符、`config` 文件密钥和环境变量。

## 基于账户的端点
<a name="endpoints-accountid"></a>

可以通过以下方式指定基于账户的端点：
+ 环境变量
  + `AWS\$1ACCOUNT\$1ID`：指定要用于调用受支持的 AWS 服务的基于 AWS 账户的端点 ID。

------
#### [ Linux or macOS ]

    ```
    $ export AWS_ACCOUNT_ID=<account-id>
    ```

------
#### [ Windows Command Prompt ]

    **为所有会话设置**

    ```
    C:\> setx AWS_ACCOUNT_ID <account-id>
    ```

    **仅为当前会话设置**

    ```
    C:\> set AWS_ACCOUNT_ID=<account-id>
    ```

------
#### [ PowerShell ]

    ```
    PS C:\> $Env:AWS_ACCOUNT_ID="<account-id>"
    ```

------
  + `AWS\$1ACCOUNT\$1ID\$1ENDPOINT\$1MODE`：指定是否使用基于 AWS 账户的端点 ID 来调用受支持的 AWS 服务。可以设置为 `preferred`、`disabled` 或 `required`。默认值为 `preferred`。

------
#### [ Linux or macOS ]

    ```
    $ export AWS_ACCOUNT_ID_ENDPOINT_MODE=preferred
    ```

------
#### [ Windows Command Prompt ]

    **为所有会话设置**

    ```
    C:\> setx AWS_ACCOUNT_ID_ENDPOINT_MODE preferred
    ```

    **仅为当前会话设置**

    ```
    C:\> set AWS_ACCOUNT_ID_ENDPOINT_MODE=preferred
    ```

------
#### [ PowerShell ]

    ```
    PS C:\> $Env:AWS_ACCOUNT_ID_ENDPOINT_MODE="preferred"
    ```

------
+ `config` 文件：
  + `aws\$1account\$1id`：指定要用于调用受支持的 AWS 服务的基于 AWS 账户的端点 ID。

    ```
    aws_account_id = <account-id>
    ```
  + `account\$1id\$1endpoint\$1mode`：指定是否使用基于 AWS 账户的端点 ID 来调用受支持的 AWS 服务。可以设置为 `preferred`、`disabled` 或 `required`。首选默认值。

    ```
    account_id_endpoint_mode = preferred
    ```

基于账户的端点通过使用 AWS 账户 ID 来简化对支持此功能的服务发出的 AWS 服务请求的路由，有助于确保高性能和可扩展性。当您使用凭证提供商和支持基于账户的端点的服务时，AWS CLI 会自动构造和使用基于账户的端点，而不是区域端点。

基于账户的端点使用以下格式，其中 `<account-id>` 替换为您的 AWS 账户 ID，而 `<region>` 替换为您的 AWS 区域：

```
https://<account-id>.myservice.<region>.amazonaws.com
```

默认情况下，在 AWS CLI 中，基于账户的端点模式设置为 `preferred`。

## 端点配置和设置优先级
<a name="endpoints-precedence"></a>

端点配置设置位于多个位置（例如，系统变量或用户环境变量、本地 AWS 配置文件），或者在命令行上显式声明为参数。AWS CLI 端点配置设置的优先顺序如下：

1. `--endpoint-url` 命令行选项。

1. 如果启用，则 `AWS\$1IGNORE\$1CONFIGURED\$1ENDPOINT\$1URLS` 全局端点环境变量或配置文件设置 `ignore\$1configure\$1endpoint\$1urls` 将忽略自定义端点。

1. 由特定于服务的环境变量 `AWS\$1ENDPOINT\$1URL\$1<SERVICE>` 提供的值，例如 `AWS_ENDPOINT_URL_DYNAMODB`。

1. `AWS\$1USE\$1DUALSTACK\$1ENDPOINT`、`AWS\$1USE\$1FIPS\$1ENDPOINT` 和 `AWS\$1ENDPOINT\$1URL` 环境变量提供的值。

1. `AWS\$1ACCOUNT\$1ID\$1ENDPOINT\$1MODE` 环境变量使用 `AWS\$1ACCOUNT\$1ID` 环境变量或 `aws\$1account\$1id` 设置中的账户 ID 设置为 `preferred` 或 `required`。

1. 共享 `config` 文件 `services` 节中的 `endpoint\$1url` 设置提供的特定于服务的端点值。

1. 共享 `config` 文件的 `profile` 中的 `endpoint\$1url` 设置提供的值。

1. `use\$1dualstack\$1endpoint`、`use\$1fips\$1endpoint` 和 `endpoint\$1url` 设置。

1. `account\$1id\$1endpoint\$1mode` 设置使用 `AWS\$1ACCOUNT\$1ID` 环境变量或 `aws\$1account\$1id` 设置中的账户 ID 设置为 `preferred` 或 `required`。

1. 最后使用相应的 AWS 服务 的任何默认端点 URL。有关每个区域可用的标准服务端点的列表，请参阅《Amazon Web Services 一般参考》**中的 [AWS 区域和端点](https://docs.aws.amazon.com/general/latest/gr/rande.html)。