Amazon API Gateway 常見問答集
一般
問:什麼是 Amazon API Gateway?
Amazon API Gateway 是一種全受管的服務,可讓開發人員輕鬆發佈、維護、監控和保護任何規模的 API。只要按幾下 AWS 管理主控台,您就能建立 API 做為應用程式從後端服務 (例如,在 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Service (Amazon ECS) 或 AWS Elastic Beanstalk 上執行的應用程式、在 AWS Lambda 上執行的程式碼,或任何 Web 應用程式) 存取資料、商業邏輯或功能的「門戶」。Amazon API Gateway 負責處理有關接受和處理多達數十萬個並行 API 呼叫的所有工作,包括流量管理、授權和存取控制、監控和 API 版本管理。Amazon API Gateway 沒有最低費用或啟動成本。對於 HTTP API 和 REST API,您只需為接收的 API 呼叫以及傳出的資料量付費。對於 WebSocket API,您只需為傳送和接收的訊息以及使用者/裝置連接到 WebSocket API 的時間付費。
問:為什麼要使用 Amazon API Gateway?
Amazon API Gateway 為開發人員提供一個簡單、靈活、全受管、按用量付費的服務,可以處理針對應用程式後端而建立和操作穩固 API 的所有層面。透過 API Gateway,您可以用較少的投資更快速啟動新服務,以便將重點放在建置核心商業服務上。API Gateway 的建置是為了協助您建立和管理 API 的幾個層面:
1) 計量。API Gateway 可協助定義計量和限制第三方開發人員對您 API 存取的計劃。您可以依個別 API 金鑰定義一組計劃、設定調節和配額限制。API Gateway 會自動測量到 API 的流量,並讓您擷取每個 API 金鑰的使用率資料。
2) 安全性。API Gateway 提供的多個工具可讓您授權 API 存取和控制服務操作存取。API Gateway 可讓您利用 AWS 管理和安全工具 (例如,AWS Identity and Access Management (IAM) 和 Amazon Cognito) 授權 API 存取。API Gateway 可使用 AWS 驗證本身 API 的相同方法,代替您驗證已簽署的 API 呼叫。使用編寫為 AWS Lambda 函數的自訂授權方,API Gateway 也可以協助您驗證傳入的 bearer 字符,這樣就能解決後端程式碼的授權問題。
3) 彈性。API Gateway 協助您利用調節管理流量,以便讓後端操作能應付流量峰值。API Gateway 也可以快取 API 呼叫的輸出,以避免不必要地呼叫後端系統,藉此協助您提升 API 的效能及改善最終使用者經驗的延遲情況。
4) 運作監控。發佈 API 並開始使用後,API Gateway 會提供您一個指標儀表板,讓您監控服務呼叫。API Gateway 儀表板透過與 Amazon CloudWatch 的整合,為您提供後端效能指標,涵蓋 API 呼叫、延遲資料以及錯誤率。您可以為 API 內的每個方法啟用詳細的指標,同時接收錯誤、存取或偵錯 CloudWatch Logs 中的記錄。
5) 生命週期管理。在 API 發佈之後,通常您需要建置並測試增強功能或新增功能的新版本。API Gateway 可讓您同時測試多個 API 版本和每個版本的多個階段,這樣即使新的 API 版本發佈之後,現有的應用程式仍然可以繼續呼叫之前的版本。
6) 專為開發人員而設計。API Gateway 可讓您快速建立 API,為它們的回應指派靜態內容,以降低跨團隊開發投入,縮短應用程式的上市時間。倚賴 API 的團隊可以在您建置後端程序時開始開發。
7) 即時雙向通訊。 建立即時的雙向通訊應用程式,例如聊天應用程式、串流儀表板、通知,不必執行或管理任何伺服器。API Gateway 在連接的使用者之間維護持久性連線,使它們之間能夠傳輸訊息。
問:Amazon API Gateway 支援哪些 API 類型?
Amazon API Gateway 提供了兩個選項來建立 RESTful API、HTTP API 和 REST API,也提供了一個選項來建立 WebSocket API。
HTTP API:HTTP API 已經過最佳化,適合用來建立各種 API 以當作 AWS Lambda 函數或 HTTP 後端的代理,是無伺服器工作負載的首選。它們目前不提供 API 管理功能。
REST API:REST API 在單一解決方案中提供 API 代理功能和 API 管理功能。 REST API 提供 API 管理功能,例如使用計劃、API 金鑰、發佈和營利 API。
WebSocket API:WebSocket API 可確保連接用戶端之間的持續連線,以便進行即時訊息通訊。搭配 API Gateway 中的 WebSocket API,您可以使用 AWS Lambda 函數、Amazon Kinesis 或任何在從連接用戶端接收訊息時要呼叫的 HTTP 端點,來定義後端整合。
問: 建立 RESTful API 時,何時應使用 HTTP API,何時又應使用 REST API?
您可以在 Amazon API Gateway 中同時使用 HTTP API 和 REST API 來建立 RESTful API。
HTTP API 已經過優化,適合用來建立各種 API 以當作 AWS Lambda 函數或 HTTP 後端的代理,是無伺服器工作負載的首選。HTTP API 是比 REST API 更便宜也更快速的替代方法,但是它們目前不支援 API 管理功能。REST API 適用於在單一解決方案中,需要 API 代理功能和 API 管理功能的 API。
HTTP API 適用於:
- 為 AWS Lambda 或任何 HTTP 端點建立代理 API
- 建立具備 OIDC 和 OAuth 2 授權的現代 API
- 工作負載可能會變得非常大
- 適用於延遲敏感型工作負載的 API
- 希望為建立、管理和發佈其 API 時所需的全部功能,支付單一價格點的客戶。
問: API Gateway 的 HTTP API 提供哪些標準功能?
HTTP API 提供了標準的 CORS 支援、用於身份驗證和授權的 OIDC 和 OAuth2 支援,以及分階段的自動部署。
問: 如何從目前的 REST API 移轉至 HTTP API?
要將目前的 REST API 移轉至 Amazon API Gateway 中的 HTTP API,請執行以下操作:
- 檢查 HTTP 中是否提供了所有需要的功能。要查看完整的功能清單,請瀏覽我們的文件。
- 移至您的 REST API,再從 REST API 匯出 OpenAPI 定義
- 移至您的 HTTP API,再匯入來自上一步的 OpenAPI 定義
- 按預期測試 API 函數
- 使用新的 URL 更新您的用戶端
雖然您的 API 可能運作,但也許會發現還缺某些功能。要找出任何缺少的功能,請查看 Import 操作中的 Info、Warning 和 Error 欄位。如需將 REST API 移轉至 HTTP API 的詳細資訊,請參閱我們的文件。
問:我可以建立 HTTPS 端點嗎?
可以,使用 Amazon API Gateway 建立的所有 API 只會公開 HTTPS 端點。Amazon API Gateway 不支援未加密的 (HTTP) 端點。預設情況下,Amazon API Gateway 會指派內部網域給自動使用 Amazon API Gateway 憑證的 API。設定 API 在自訂網域名稱下執行時,您可以為網域提供自己的憑證。
問:Amazon API Gateway 可以與哪些資料類型搭配使用?
在 Amazon API Gateway 上建立的 API,可以接受 HTTP API、REST API 和 WebSocket API 透過 HTTPS 傳送的任何承載。一般資料格式包括 JSON、XML、查詢字串參數以及請求標頭。您可以為 API 回應宣告任何內容類型,然後使用轉換範本,將後端回應變更為想要的格式。
問:Amazon API Gateway 可以與哪些後端通訊?
Amazon API Gateway 可在您的帳戶中執行 AWS Lambda 函數、啟動 AWS Step Functions 狀態機器、或者呼叫託管於 AWS Elastic Beanstalk、Amazon EC2 的 HTTP 端點、以及非 AWS 託管的 HTTP 操作,皆可經由公有網際網路取得。API Gateway 也可讓您指定映射範本,以產生可傳回的靜態內容,協助您在後端就緒前模擬 API。您也可以將 API Gateway 與其他 AWS 服務直接整合;例如,您可以在 API Gateway 中公開 API 方法,將資料直接傳送到 Amazon Kinesis。
問:Amazon API Gateway 可以在哪些用戶端平台上產生 SDK?
API Gateway 可以為使用 Android 與 iOS (Swift 和 Objective-C) 的行動應用程式開發、以及使用 JavaScript 的 Web 應用程式開發產生自訂 SDK。API Gateway 還支援產生適用於 Ruby 和 Java 的 SDK。一旦在 API Gateway 中定義 API 及其模型之後,您就可以使用 AWS 主控台或 API Gateway API 來產生及下載用戶端 SDK。在 Amazon API Gateway 中會為 REST API 產生用戶端 SDK。
問:我可以透過 Amazon API Gateway 主控台管理什麼?
您可以透過 Amazon API Gateway 主控台定義 REST API 及其關聯的資源和方法、管理 API 生命週期、產生用戶端 SDK 和檢視 API 指標。您也可以使用 API Gateway 主控台定義 API 的用量計劃、管理開發人員的 API 金鑰,以及設定調節和配額限制。透過 API Gateway API 可以使用所有相同的動作。
問:什麼是資源?
資源是屬於 API 網域一部分的型別物件。每個資源可能有關聯的資料模型、與其他資源的關係,以及可回應不同的方法。您也可以將資源定義為變數,以攔截對多個子資源的請求。
問:什麼是方法?
REST API 內的每個資源都可以支援一或多個標準 HTTP 方法。您可以定義每個資源支援哪些動詞 (GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS) 以及它們的實作。例如,對 cars 資源使用 GET 時,應該要傳回汽車清單。為了將資源內的所有方法連接到單一後端端點,API Gateway 也支援特殊的 "ANY" 方法。
問:什麼是用量計劃?
用量計劃可協助您宣告針對第三方開發人員的計劃,這些計劃會限制他們只能存取特定 API、定義調節和請求配額限制,以及將他們與 API 金鑰建立關聯。您也可以擷取個別 API 金鑰的使用率資料,以分析 API 用量並產生帳單文件。例如,您可以建立基本、專業和企業計劃;設定基本用量計劃為每一天只允許 1,000 個請求,且每秒最多 5 個請求 (RPS)。
問:什麼是 Amazon API Gateway API 生命週期?
在 Amazon API Gateway 中,每個 REST API 都可以有多個階段。階段的用意是為協助 API 的開發生命週期,例如,在您建置 API 之後,將它們部署到開發階段,或是當您準備好進入生產時,可以將它們部署到生產階段。
問:什麼是階段?
在 Amazon API Gateway 中,階段類似於標籤。階段可定義部署存取路徑。例如,您可以定義開發階段,將 cars API 部署到其中。此資源可從 https://www.myapi.com/dev/cars 存取。您也可以設定自訂網域名稱直接指向階段,這樣就不必另外使用路徑參數。例如,如果您將 myapi.com 直接指向開發階段,即可在 https://www.myapi.com/cars 存取 cars 資源。可使用能夠從 API 組態或映射範本存取的變數來設定階段。
問:什麼是階段變數?
階段變數讓您定義與階段關聯之組態值的鍵值/值組。這些值與環境變數類似,可在 API 組態中使用。例如,您可以定義方法整合的 HTTP 端點作為階段變數,並在 API 組態使用變數而非以硬編碼方式編寫端點 – 這可讓您在使用相同 API 組態的每個階段 (例如,dev、beta、prod) 使用不同的端點。階段變數也可以在映射範本中存取,並用於將設定參數傳遞到 Lambda 或 HTTP 後端。
問:什麼是資源政策?
資源政策是您連接到 API 的 JSON 政策文件,以控制指定的原則 (通常是 IAM 使用者或角色) 是否可叫用 API。您可以使用資源政策讓不同 AWS 帳戶的使用者安全地存取您的 API,或僅允許從指定的來源 IP 地址範圍或 CIDR 區塊叫用 API。Amazon API Gateway 中的 REST API 可搭配使用資源政策。
問:萬一我錯誤地部署到階段了呢?
Amazon API Gateway 會儲存部署的歷史記錄。您可以隨時使用 Amazon API Gateway API 或主控台,將階段復原到之前的部署。
問:我是否能使用自己的 Swagger API 定義?
是。您可以使用我們的開放原始碼 Swagger 匯入程式工具將自己的 Swagger API 定義匯入 Amazon API Gateway 中。利用 Swagger 匯入程式工具,您可以建立和部署新的 API,並能更新現有 API。
問:如何避免我的 API 中經常出現的錯誤訊息和其他文件的冗餘副本?
除了提供標準的遵守 API 文件支援,API Gateway 還支援文件繼承,您只要定義文件字串一次,就能在多個地方使用。繼承簡化了定義 API 文件的處理程序,而且當 API 匯出成 Swagger 檔案時,還能轉換成標準表示法。
問:是否可將私有 API 的存取權限制在特定 Amazon VPC 或 VPC 端點?
是,您可以在 API 套用資源政策,將存取權限制在特定 Amazon VPC 或 VPC 端點。您也可以使用資源政策,讓來自不同帳戶的 Amazon VPC 或 VPC 端點可以存取私有 API。
安全性和授權
問:如何授權對我的 API 的存取?
您可以使用 Amazon API Gateway 選擇性地設定 API 方法來要求授權。當您設定方法要求授權時,可以利用 AWS 簽章版本 4 或 Lambda 授權方支援自己的 bearer 字符授權策略。
問:AWS 簽章版本 4 如何運作?
您可以使用 AWS 登入資料 (存取金鑰和私密金鑰) 簽署對您服務的請求,並如同其他 AWS 服務般授權存取。Amazon API Gateway API 請求的簽章是由為您的服務產生的自訂 API Gateway SDK 所管理。您可以使用 Amazon Cognito 擷取與您的 AWS 帳戶角色關聯的臨時登入資料。
問:什麼是 Lambda 授權方?
Lambda 授權方是 AWS Lambda 函數。使用自訂請求授權程式,您將能夠使用 bearer 字符授權策略 (如 OAuth) 來授權 API 存取。當呼叫 API 的時候,API Gateway 會檢查是否已設定 Lambda 授權方,然後 API Gateway 會使用傳入的授權字符呼叫 Lambda 函數。您可以使用 Lambda 實作各種授權策略 (例如,JWT 驗證、OAuth 提供者呼叫),它們會傳回用來授權請求的 IAM 政策。如果授權程式傳回的政策是有效的,API Gateway 會快取與傳入字符關聯的政策,時間最長可達 1 小時。
問:Amazon API Gateway 是否可產生分發給第三方開發人員的 API 金鑰?
是。API Gateway 可產生 API 金鑰,並將它們與用量計劃建立關聯。從每個 API 金鑰接收的呼叫會加入 Amazon CloudWatch Logs 並加以監控,您可以為每個階段啟用此功能。不過,不建議您將 API 金鑰用於授權。您應該使用 API 金鑰來監控第三方開發人員的使用情況,並使用更強固的機制 (如已簽章的 API 呼叫或 OAuth) 來進行授權。
問:如何解決或防止 API 威脅或濫用?
API Gateway 支援針對 API 中的每個方法或路由制定調節設定。您可以為 REST API 中每個方法和 WebSocket API 中每個路由設定每秒的標準速率限制和高載速率限制。不僅如此,API Gateway 還可以自動保護您的後端系統,免受分散式拒絕服務 (DDoS) 的攻擊,無論是使用盜版要求 (Layer 7) 或 SYN 泛洪 (Layer 3) 的攻擊。
問:是否能確認是 API Gateway 呼叫我的後端?
是。Amazon API Gateway 可以產生用戶端 SSL 憑證,並提供該憑證的公開金鑰給您。產生的憑證可用於呼叫後端,而您可以使用憑證的公開金鑰確認呼叫來自 Amazon API Gateway。
問:AWS CloudTrail 是否可與 Amazon API Gateway 搭配使用?
是。Amazon API Gateway 已與 AWS CloudTrail 整合,為您提供對 REST API 所做變更的完整可稽核歷史記錄。對 Amazon API Gateway API 進行的建立、修改、刪除或部署 REST API 的所有 API 呼叫,都會記錄到 AWS 帳戶的 CloudTrail 中。
問:Amazon API Gateway 如何與 Amazon Virtual Private Cloud (Amazon VPC) 搭配使用?
在 Amazon API Gateway,您可以使用 VPC 連結設定私有整合,將請求傳送到在 Amazon VPC 執行的後端 HTTP/HTTPS 資源。Amazon API Gateway 中的用戶端 SSL 憑證可用於驗證,確認 API Gateway 使用憑證公開金鑰將請求傳送到後端系統。您也可以在 Amazon API Gateway 建立私有 API,只能由 Amazon VPC 內的資源透過 Amazon VPC 端點進行存取。
問:是否可將私有 API 的存取權限制在特定 Amazon VPC 或 VPC 端點?
是,您可以在 API 套用資源政策,將存取權限制在特定 Amazon VPC 或 VPC 端點。您也可以使用資源政策,讓來自不同帳戶的 Amazon VPC 或 VPC 端點可以存取私有 API。
管理、指標和記錄
問:如何監控我的 Amazon API Gateway API?
Amazon API Gateway 會將 API 呼叫、延遲和錯誤率記錄到您 AWS 帳戶的 Amazon CloudWatch 中。透過 REST API 儀表板中的 Amazon API Gateway 主控台也可以使用這些指標。API Gateway 也會測量第三方開發人員的使用率,在 API Gateway 主控台及透過 API 可使用此資料。
問:可以在 Amazon API Gateway 指標上設定警示嗎?
可以,Amazon API Gateway 會將記錄資訊和指標傳送到 Amazon CloudWatch。您可以使用 Amazon CloudWatch 主控台設定自訂警示。
問:如何設定 Amazon API Gateway 的指標?
預設情況下,Amazon API Gateway 會監控 REST API 層級的流量。您可以從部署設定 API 或主控台畫面,選擇性地為 REST API 中的每個方法啟用詳細的指標。詳細指標也會記錄到 Amazon CloudWatch,而且以 CloudWatch 費率收費。
問:是否可判斷客戶使用的 API 版本?
是。指標詳細資訊是由 REST API 和階段指定。此外,您也可以為 REST API 內的每個方法啟用指標。
問:Amazon API Gateway 是否提供記錄支援?
是。Amazon API Gateway 已與 Amazon CloudWatch Logs 整合。您可以選擇性為 API 中的每個階段啟用記錄。對於 REST API 中的每個方法,您可以設定記錄的詳細資訊,如果是完整要求和回應資料,必須記錄。
問:日誌多快可以提供使用?
日誌、警示、錯誤率及其他指標儲存在 Amazon CloudWatch 中,幾乎可以立即使用。
調節和快取
問:如何保護後端系統與應用程式的流量高峰需求?
Amazon API Gateway 在多個層級 (包括全域) 且依照服務呼叫提供調節。調節限制可以設定標準速率和高載速率。例如,API 擁有者可以為 REST API 中的特定方法設定每秒 1,000 個請求的速率限制,也可以設定 Amazon API Gateway 只處理幾秒鐘的每秒 2,000 個請求的高載速率。Amazon API Gateway 會追蹤每秒的請求數量。超過限制的任何請求會收到一個 429 HTTP 回應。 Amazon API Gateway 產生的用戶端 SDK (Javascript 除外) 收到這個回應時,會自動重試呼叫。
問:是否可以調節個別開發人員呼叫我的 API?
是。有了用量計劃,您可為個別 API 金鑰設定調節限制。
問:調節對我有何幫助?
調節可確保 API 流量受到控制,讓後端服務可以保持效能及可用性。
問:Amazon API Gateway 可以在哪些層級針對傳入 API 流量實施調節?
調節速率限制可在方法層級設定。您可以透過 Amazon API Gateway API 或在 Amazon API Gateway 主控台中,編輯方法設定中的調節限制。
問:如何套用調節規則?
會按以下順序套用 API 閘道調節相關設定:1) 您在使用計劃中針對 API 設定的依用戶端依方法調節限制,2) 您在使用計劃中設定的依用戶端調節限制 3) 您在 API 階段設定中設定的預設依方法限制和個別依方法限制 4) 依區域的帳戶層級調節。
問:Amazon API Gateway 是否提供 API 結果快取?
是。佈建 API Gateway 快取並指定其大小 (以 GB 為單位),即可將快取新增到 API 呼叫。快取是針對 API 的特定階段進行佈建。這可提高效能,並降低傳送到後端的流量。快取設定可讓您控制快取索引鍵的建置方法,以及每個方法所儲存資料的存活期 (TTL)。API Gateway 也會公開管理 API,協助您讓每個階段的快取失效。API Gateway 中的 REST API 可使用快取。
問:如果大量最終使用者同時嘗試叫用我的 API,會發生什麼狀況?
如果沒有啟用快取且沒有套用調節限制,則在達到帳戶層級調節限制之前,所有請求都會傳送到後端服務。如果已設定調節限制,那麼 Amazon API Gateway 會削減必要的請求數量,只傳送定義的限制數量到後端服務。如果已設定快取,那麼 Amazon API Gateway 會在可自訂的時間內為重複要求傳回已快取的回應,但是只在低於設定的調節限制時。後端與用戶端之間的這種平衡,可確保 API 為所支援的應用程式提供最佳效能。Amazon API Gateway 產生的用戶端 SDK 會自動重試受到調節的請求。預設情況下,Amazon API Gateway 並不會在您的 API 方法上設定任何快取。
問:API 如何擴展?
Amazon API Gateway 的用途是做為已設定之後端操作的 Proxy。Amazon API Gateway 會自動擴展以處理 API 收到的流量。Amazon API Gateway 不會任意限制或調節對後端操作的叫用,而且未被 Amazon API Gateway 主控台中調節和快取設定攔截的所有請求,都會傳送到後端操作。
計費
問:第三方開發人員產生的 Amazon API Gateway API 呼叫費用由誰支付?
API 擁有者需支付在 API Gateway 上呼叫他們 API 的費用。
問:如果 API 回應是由已快取的資料提供服務,仍然需要支付 API 呼叫的費用嗎?
是。為了公平計費,無論回應是由後端操作處理或由 Amazon API Gateway 快取操作處理,都計入 Amazon API 呼叫。
WebSocket API
問:如何從後端服務傳送訊息到連接的用戶端?
當新用戶端連接到 WebSocket API 時,會為該用戶端建立一個唯一 URL,稱為「回呼 URL」。您可以使用此回呼 URL 從後端服務傳送訊息到連接的用戶端。
問:如何授權對 Amazon API Gateway 中 WebSocket API 的存取?
使用 Amazon API Gateway,您可以使用 IAM 角色和政策或 AWS Lambda 授權方,來授權對您的 WebSocket API 的存取。
問:當用戶端與 Amazon API Gateway 中的 WebSocket 連線或中斷連線時,我的後端服務如何知道?
當用戶端連線或斷線時,系統會使用 $connect 和 $disconnect 路由,從 Amazon API Gateway 服務傳送一個訊息到您的後端 AWS Lambda 功能或您的 HTTP 端點。您可以採取適當的動作,例如在已連接使用者清單中新增或移除用戶端。
問:我的後端服務如何識別用戶端與 WebSocket 仍在連線中?
您可以對連線使用回呼 URL GET 方法,找出用戶端是否與 WebSocket 連線。有關回呼 URL,請參閱文件。
問:我可以從我的後端服務中斷與用戶端的連線嗎?
是,您可以使用回呼 URL 從您的後端服務中斷已連接的用戶端。
問:如果 WebSocket 連線的訊息身份驗證或授權失敗,還會算入我的 API 用量帳單中嗎?
不,如果 WebSocket 連線的訊息身份驗證或授權失敗,不會算入您的 API 用量帳單。