

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

# Amazon EC2 的查詢請求
<a name="Query-Requests"></a>

查詢請求是使用 HTTP 動詞 GET 或 POST 的 HTTP 或 HTTPS 請求，以及名為 的查詢參數`Action`。對於每個 Amazon EC2 API 動作，您可以選擇使用 GET 或 POST。無論您選擇哪個動詞，都會傳送和接收相同的資料。如需 Amazon EC2 API 動作的清單，請參閱[動作](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-apis.html)。

**Topics**
+ [GET 請求的結構](#structure-of-a-get-request)
+ [查詢參數](#query-parameters)
+ [查詢 API 身分驗證](#query-authentication)
+ [查詢回應結構](#api-responses)
+ [分頁](#api-pagination)
+ [防止透過 HTTP 提出請求](#prevent-http-requests)

## GET 請求的結構
<a name="structure-of-a-get-request"></a>

Amazon EC2 文件會將 GET 請求顯示為 URLs，可直接在瀏覽器中使用。

**注意**  
由於 GET 請求是 URLs，您必須對參數值進行 URL 編碼。在 Amazon EC2 文件中，我們會將範例 GET 請求保留為未編碼，以便於閱讀。

請求包含下列項目：
+ **端點**：做為 Web 服務進入點的 URL。如需詳細資訊，請參閱 [Amazon EC2 服務端點](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-endpoints.html)。
+ **動作**：您要執行的動作；例如，使用 `RunInstances`啟動執行個體。
+ **參數**：動作的任何參數；每個參數都以 ampersand (&) 分隔。
+ **版本**：要使用的 API 版本。對於 Amazon EC2 API，版本為 2016-11-15。
+ **授權參數**： AWS 用來確保請求有效性和真實性的授權參數。Amazon EC2 支援 Signature 第 2 版和 Signature 第 4 版。我們建議您使用 Signature 第 4 版。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[簽署 AWS API 請求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)。

下列選用參數可以包含在請求中：
+ **DryRun**：檢查您是否具有動作所需的許可，而無需實際提出請求。如果您有必要的許可，請求會傳回 `DryRunOperation`，否則會傳回 `UnauthorizedOperation`。
+ **SecurityToken**：透過呼叫 取得的臨時安全字符 AWS Security Token Service。

如需 API 請求常見參數的詳細資訊，請參閱[常見查詢參數](https://docs.aws.amazon.com//AWSEC2/latest/APIReference/CommonParameters.html)。

以下是啟動執行個體的範例請求：

```
https://ec2.amazonaws.com/?Action=RunInstances&ImageId=ami-2bb65342&MaxCount=3&MinCount=1&Placement.AvailabilityZone=us-east-1a&Monitoring.Enabled=true&Version=2016-11-15&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20130813%2Fus-east-1%2Fec2%2Faws4_request&X-Amz-Date=20130813T150206Z&X-Amz-SignedHeaders=content-type%3Bhost%3Bx-amz-date&X-Amz-Signature=525d1a96c69b5549dd78dbbec8efe264102288b83ba87b7d58d4b76b71f59fd2
Content-type: application/json
host:ec2.amazonaws.com
```

為了讓這些範例請求更易於讀取， AWS 文件可能會以下列格式呈現：

```
https://ec2.amazonaws.com/?Action=RunInstances
&ImageId=ami-2bb65342
&MaxCount=3
&MinCount=1
&Placement.AvailabilityZone=us-east-1a
&Monitoring.Enabled=true
&Version=2016-11-15
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIAIOSFODNN7EXAMPLEus-east-1%2Fec2%2Faws4_request
&X-Amz-Date=20130813T150206Z
&X-Amz-SignedHeaders=content-type%3Bhost%3Bx-amz-date
&X-Amz-Signature=ced6826de92d2bdeed8f846f0bf508e8559e98e4b0194b84example54174deb456c
Content-type: application/json
host:ec2.amazonaws.com
```

第一行指定請求的端點。端點後方為問號 (?)，將端點與參數區分開來。如需 Amazon EC2 端點的詳細資訊，請參閱 [Amazon EC2 服務端點](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-endpoints.html)。

此 `Action` 參數指出要執行的動作。如需動作的完整清單，請參閱[動作](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-apis.html)。剩餘行會指定請求的其他參數。

在 Amazon EC2 API 文件中呈現的查詢請求範例中，我們省略標頭、[常見必要參數](https://docs.aws.amazon.com//AWSEC2/latest/APIReference/CommonParameters.html)和身分驗證參數，讓您更輕鬆地專注於 動作的參數。我們將它們取代為`&AUTHPARAMS`常值字串，以提醒您必須在請求中包含這些參數；例如：

```
https://ec2.amazonaws.com/?Action=RunInstances
&ImageId=ami-2bb65342
&MaxCount=3
&MinCount=1
&Placement.AvailabilityZone=us-east-1a
&Monitoring.Enabled=true
&AUTHPARAMS
```

**重要**  
在您為 `AWSAccessKeyId`或 `Credential` 參數指定存取金鑰 ID 之前，請檢閱並遵循[AWS 安全登入](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html)資料中的指引。

## 查詢參數
<a name="query-parameters"></a>

每個查詢請求都必須包含必要的常見參數，才能處理 動作的身分驗證和選取。查詢參數區分大小寫。

部分操作有數個參數清單。這些清單使用 *param.n* 表示法指定，其中 *n* 是從 1 開始的整數。

下列範例會使用`BlockDeviceMapping`參數清單，將多個裝置新增至區塊型設備映射。

```
http://ec2.amazonaws.com/?Action=RunInstances
&ImageId.1=ami-72aa081b
...
&BlockDeviceMapping.1.DeviceName=/dev/sdj
&BlockDeviceMapping.1.Ebs.NoDevice=true
&BlockDeviceMapping.2.DeviceName=/dev/sdh
&BlockDeviceMapping.2.Ebs.VolumeSize=300
&BlockDeviceMapping.3.DeviceName=/dev/sdc
&BlockDeviceMapping.3.VirtualName=ephemeral1
&AUTHPARAMS
```

## 查詢 API 身分驗證
<a name="query-authentication"></a>

您可以透過 HTTP 或 HTTPS 通訊協定傳送查詢請求。

無論您使用哪種通訊協定，都必須在每個查詢請求中包含簽章。Amazon EC2 支援 Signature 第 2 版和 Signature 第 4 版。我們建議您使用 Signature 第 4 版。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[簽署 AWS API 請求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)。

Signature 第 4 版請求可讓您在單一標頭中指定所有授權參數，例如：

```
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Amz-Date: 20130813T150211Z
Host: ec2.amazonaws.com
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/202230813/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=ced6826de92d2bdeed8f846f0bf508e8559e98e4b0194b84example54174deb456c

http://ec2.amazonaws.com/?Action=RunInstances
ImageId=ami-2bb65342
&MaxCount=3
&MinCount=1
&Monitoring.Enabled=true
&Placement.AvailabilityZone=us-east-1a
&Version=2016-11-15
```

## 查詢回應結構
<a name="api-responses"></a>

為了回應查詢請求，服務會傳回 XML 資料結構，以符合為 Amazon EC2 定義的 XML 結構描述。XML 回應的結構專屬於相關聯的請求。一般而言，回應資料類型是根據執行的操作，以及資料類型是否為容器 （可以有子系） 來命名。容器的範例包括`groupSet`用於安全群組的 和`keySet`用於金鑰對的 （請參閱以下範例）。項目元素是容器的子項，其內容會根據容器的角色而有所不同。

每個成功的回應都會在 `requestId` 元素中包含請求 ID，而每個失敗的回應都會在 `RequestID`元素中包含請求 ID。此值是 AWS 指派的唯一字串。如果您遇到特定請求的問題， AWS 會要求請求 ID，以協助對問題進行故障診斷。以下顯示範例回應。

```
<DescribeKeyPairsResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
  <requestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</requestId>
  <keySet>
    <item>
      <keyName>gsg-keypair</keyName>
      <keyFingerprint>
         00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
      </keyFingerprint>
    </item>
  </keySet>
</DescribeKeyPairsResponse>
```

**考量事項**
+ 自 2024 年 7 月 31 日起，對於任何新的 Amazon EC2 API 動作或新支援的 AWS 區域，回應中的 XML 資料結構將不會包含新的行和縮排。如果您使用自訂用戶端，請確保它不依賴回應，包括新行和縮排。
+ 自 2025 年 7 月 31 日起，回應中的 XML 資料結構將不再包含新的行和縮排。此變更將減少回應的大小。如果您使用自訂用戶端，請確保它不依賴回應，包括新行和縮排。
+ 回應中的元素順序可能會有所不同，包括巢狀結構中的元素。應用程式不應假設元素以特定順序顯示。

## 分頁
<a name="api-pagination"></a>

對於可以傳回長項目清單的動作，Amazon EC2 API 包含支援分頁的參數：`MaxResults`、 `NextToken`（輸入） 和 `nextToken`（輸出）。使用分頁時，您可以指定 的大小，`MaxResults`然後每個呼叫都會傳回 0 到`MaxResults`項目並設定 `nextToken`。如果還有其他項目需要反覆運算，`nextToken`則 為非空值，您可以在後續呼叫的 `NextToken` 參數中指定其值，以取得下一組項目。透過分頁，您可以繼續呼叫 動作，直到 `nextToken` 為 null，即使您接收的項目少於 `MaxResults` 個項目，包括零個項目。

如果您使用 IDs 和 的清單呼叫描述 API 動作`MaxResults`，請求會失敗並顯示錯誤 `InvalidParameterCombination`。

我們建議您在使用描述可能傳回大量結果的動作時使用分頁，例如 `DescribeInstances`。使用分頁會限制傳回的項目數量，以及這些呼叫傳回所需的時間。

如需詳細資訊，請參閱《*Amazon EC2 開發人員指南*》中的[分頁](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-pagination.html)。

## 防止透過 HTTP 提出請求
<a name="prevent-http-requests"></a>

如果您的工作負載不需要您使用 HTTP，建議您避免使用它來防止傳輸和接收未加密的資料，並改用 HTTPS。您可以在 IAM 政策中使用[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport)全域 IAM 條件金鑰，以防止使用者透過 HTTP 傳送請求。

下列範例政策可防止使用者透過 HTTP 傳送請求。

```
{
    "Statement": [
        {
            "Sid": "AllowAllEC2HttpsRequests",
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "aws:SecureTransport": "true"
                }
            }
        }
    ]
}
```