本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:搭配使用 Lambda 與 API Gateway
在此教學課程中,您將建立 REST API,並透過此 API 調用 Lambda 函數。Lambda 函數會對 DynamoDB 資料表執行建立、讀取、更新及刪除 (CRUD) 操作。這裡提供的函數僅供示範,您將學習如何設定可調用任何 Lambda 函數的 API Gateway REST API。
![本教學課程中使用的服務和資源](images/APIG_tut_resources.png)
使用 API Gateway 為使用者提供安全的 HTTP 端點以調用 Lambda 函數,並透過流量限流以及自動驗證和授權 API 呼叫,協助管理函數的大量呼叫。API Gateway 也提供使用 AWS Identity and Access Management (IAM) 和 Amazon Cognito 的彈性安全控制。對於需要預先授權才能呼叫應用程式的使用案例,這非常有用。
提示
Lambda 提供兩種透過 HTTP 端點叫用函數的方式:API Gateway 和 Lambda URLs。如果您不確定哪種是最適合使用案例的方法,請參閱 選取一種使用 HTTP 請求調用 Lambda 函數的方法。
完成本教學課程需逐一進行以下階段:
-
以 Python 或 Node.js 建立並設定 Lambda 函數,用於對 DynamoDB 資料表執行操作。
-
在 API Gateway 中建立 REST API 以連接 Lambda 函數。
-
建立 DynamoDB 資料表,然後在主控台中使用您的 Lambda 函數進行測試。
-
在終端內使用 curl 部署 API 並測試完整設定。
完成這些階段後,您將了解如何使用 API Gateway 建立 HTTP 端點,以安全地調用任何規模的 Lambda 函數。您也會學習如何部署 API,以及如何在控制台中以及使用終端傳送 HTTP 請求來進行測試。
章節
必要條件
如果您沒有 AWS 帳戶,請完成下列步驟來建立一個 。
註冊 AWS 帳戶
開啟 https://portal.aws.amazon.com/billing/signup
。 請遵循線上指示進行。
部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。
當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 https://aws.amazon.com/
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者,以免將根使用者用於日常任務。
保護您的 AWS 帳戶根使用者
-
選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console
身分登入 。在下一頁中,輸入您的密碼。 如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入。
-
若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。
如需說明,請參閱《IAM 使用者指南》中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬 MFA 裝置。
建立具有管理存取權的使用者
-
啟用 IAM Identity Center。
如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的啟用 AWS IAM Identity Center。
-
在 IAM Identity Center 中,將管理存取權授予使用者。
如需使用 IAM Identity Center 目錄 做為身分來源的教學課程,請參閱AWS IAM Identity Center 《 使用者指南》中的使用預設值設定使用者存取權 IAM Identity Center 目錄。
以具有管理存取權的使用者身分登入
-
若要使用您的 IAM Identity Center 使用者簽署,請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。
如需使用 IAM Identity Center 使用者登入的說明,請參閱AWS 登入 《 使用者指南》中的登入 AWS 存取入口網站。
如果您尚未安裝 AWS Command Line Interface,請依照安裝或更新最新版本 AWS CLI中的步驟進行安裝。
本教學課程需使用命令列終端機或 Shell 來執行命令。在 Linux 和 macOS 中,使用您偏好的 Shell 和套件管理工具。
注意
在 Windows 中,作業系統的內建終端不支援您常與 Lambda 搭配使用的某些 Bash CLI 命令 (例如 zip
)。若要取得 Ubuntu 和 Bash 的 Windows 整合版本,請安裝適用於 Linux 的 Windows 子系統
建立許可政策
![步驟 1:建立許可政策](images/APIG_tut_steps_1.png)
在您可以為 Lambda 函數建立執行角色之前,您必須先建立許可政策,以授予函數存取所需 AWS 資源的許可。在本教學課程中,政策允許 Lambda 對 DynamoDB 資料表執行 CRUD 操作,以及寫入 Amazon CloudWatch Logs。
建立政策
-
開啟 IAM 主控台中的政策頁面
。 -
選擇建立政策。
-
選擇 JSON 索引標籤,然後將下列政策貼到 JSON 編輯器。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1428341300017", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "", "Resource": "*", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow" } ] }
-
選擇下一步:標籤。
-
選擇下一步:檢閱。
-
在檢閱政策下,針對政策名稱,輸入
lambda-apigateway-policy
。 -
選擇建立政策。
建立執行角色
![步驟 2:建立執行角色](images/APIG_tut_steps_2.png)
執行角色是 AWS Identity and Access Management (IAM) 角色,授予 Lambda 函數存取 AWS 服務 和資源的許可。若要讓函數對 DynamoDB 資料表執行操作,您需附加在上個步驟中建立的許可政策。
建立執行角色並附加自訂許可政策
-
開啟 IAM 主控台中的角色頁面
。 -
選擇 建立角色。
-
信任的實體類型請選擇 AWS 服務,使用案例則選擇 Lambda。
-
選擇下一步。
-
在政策搜尋方塊中,輸入
lambda-apigateway-policy
。 -
在搜尋結果中,選取您建立的政策 (
lambda-apigateway-policy
),然後選擇下一步。 -
在 角色詳細資料 底下,角色名稱 請輸入
lambda-apigateway-role
,然後選擇 建立角色 。
在教學課程的後續階段中,需用到您剛才建立的角色之 Amazon Resource Name (ARN)。在 IAM 主控台的 角色 頁面上,選擇角色的名稱 (lambda-apigateway-role
),然後複製 摘要 頁面上顯示的 角色 ARN 。
建立函數
![步驟 3:建立函數](images/APIG_tut_steps_3.png)
下列程式碼範例會從 API Gateway 接收事件輸入,指定要對您建立的 DynamoDB 資料表執行的操作及一些承載資料。如果函數收到的參數有效,就會對資料表執行請求的操作。
使用 叫用 函數 AWS CLI
![步驟 4 使用 叫用 函數 AWS CLI](images/APIG_tut_steps_4.png)
在將函數與 API Gateway 整合之前,請確認已成功部署該函數。建立測試事件,其中包含 API Gateway API 將傳送給 Lambda 的參數, AWS CLI invoke
並使用 命令來執行函數。
使用 叫用 Lambda 函數 AWS CLI
-
將下面的 JSON 儲存為名為
input.txt
的檔案。{ "operation": "echo", "payload": { "somekey1": "somevalue1", "somekey2": "somevalue2" } }
-
執行下列
invoke
AWS CLI 命令。aws lambda invoke \ --function-name LambdaFunctionOverHttps \ --payload file://input.txt outputfile.txt \ --cli-binary-format raw-in-base64-out
如果您使用的是第 2 AWS CLI 版,則需要 cli-binary-format選項。若要讓此成為預設的設定,請執行
aws configure set cli-binary-format raw-in-base64-out
。若要取得更多資訊,請參閱《AWS Command Line Interface 使用者指南第 2 版》中 AWS CLI 支援的全域命令列選項。您應該會看到下列回應:
{ "StatusCode": 200, "ExecutedVersion": "LATEST" }
-
確認函數已執行您在 JSON 測試事件中指定的
echo
操作。檢查outputfile.txt
檔案,並確認包含下列內容:{"somekey1": "somevalue1", "somekey2": "somevalue2"}
使用 API Gateway 建立 REST API
![步驟 5 建立 API](images/APIG_tut_steps_5.png)
在此步驟中,您將建立用來調用 Lambda 函數的 API Gateway REST API。
若要建立 API
-
開啟 API Gateway 主控台
。 -
選擇 建立 API 。
-
在 REST API 方塊中,選擇 建置 。
-
在 API 詳細資訊下,讓新增 API維持在已選取的狀態,然後對於 API 名稱,輸入
DynamoDBOperations
。 -
選擇 建立 API 。
在 REST API 上建立資源
![步驟 6 建立 API 資源](images/APIG_tut_steps_6.png)
若要將 HTTP 方法新增到 API 中,首先需為該方法建立用來操作的資源。您可以在此建立資源來管理 DynamoDB 資料表。
若要建立資源
-
在 API Gateway 主控台
中,在 API 的資源頁面上,選擇建立資源。 -
在資源詳細資訊中,針對資源名稱輸入
DynamoDBManager
。 -
選擇 建立資源 。
建立 HTTP POST 方法
![步驟 7 建立 HTTP POST 方法](images/APIG_tut_steps_7.png)
在此步驟中,您將為 DynamoDBManager
資源建立方法 (POST
)。您需將此 POST
方法連結到 Lambda 函數,如此一來當方法收到 HTTP 請求,API Gateway 就會調用 Lambda 函數。
注意
基於本教學課程的目的,會使用一個 HTTP 方法 (POST
) 來調用單一 Lambda 函數,該函數會對 DynamoDB 資料表執行所有操作。在實際的應用程式中,最佳實務是針對每項操作使用不同的 Lambda 函數和 HTTP 方法。如需詳細資訊,請參閱無伺服器園地中的 The Lambda Monolith
建立 POST 方法
-
在 API 的資源頁面上,確定已反白選取
/DynamoDBManager
資源。然後,在方法窗格中,選擇建立方法。 -
針對方法類型,選擇 POST。
-
對於整合類型,讓 Lambda 函數維持在已選取的狀態。
-
對於 Lambda 函數,請為函數 (
LambdaFunctionOverHttps
) 選擇 Amazon Resource Name (ARN)。 -
選擇建立方法。
建立 DynamoDB 資料表
![步驟 8 建立 DynamoDB 資料表](images/APIG_tut_steps_8.png)
建立空白的 DynamoDB 資料表,Lambda 函數會對該資料表執行 CRUD 操作。
若要建立 DynamoDB 資料表
-
開啟 DynamoDB 主控台的資料表
頁面。 -
選擇 建立資料表 。
-
在 Table details (資料表詳細資訊) 下,執行下列動作:
-
對於 Table name (資料表名稱),請輸入
lambda-apigateway
。 -
對於 Partition key (分割區索引鍵),輸入
id
,並保持資料類型設定為 String (字串)。
-
-
在 Table settings (資料表設定) 下,保留 Default settings (預設設定)。
-
選擇 建立資料表 。
測試 API Gateway、Lambda 和 DynamoDB 的整合
![步驟 9 測試 API Gateway、Lambda 和 DynamoDB 的整合](images/APIG_tut_steps_9.png)
您現在已準備好測試 API Gateway API 方法與 Lambda 函數和 DynamoDB 資料表的整合。使用 API Gateway 主控台,您可以利用主控台的測試功能,將請求直接傳送至您的 POST
方法。在此步驟中,首先需使用 create
操作將新項目新增至 DynamoDB 資料表,然後使用 update
操作來修改項目。
測試 1:在 DynamoDB 資料表中建立新項目
-
在 API Gateway 主控台
中,選擇您的 API ( DynamoDBOperations
)。 -
在
DynamoDBManager
資源下方,選擇 POST 方法。 -
選擇測試標籤。您可能需要選擇向右箭頭按鈕才能顯示此索引標籤。
-
在測試方法下,讓查詢字串和標頭留空。對於請求主體,貼上下列 JSON:
{ "operation": "create", "payload": { "Item": { "id": "1234ABCD", "number": 5 } } }
-
選擇 測試 。
測試完成時顯示的結果應該會顯示
200
狀態。此狀態碼表示create
操作成功。若要確認,您可以檢查 DynamoDB 資料表現在是否包含新項目。
-
開啟 DynamoDB 主控台的 資料表頁面
,然後選擇 lambda-apigateway
資料表。 -
選擇 探索資料表項目 。在 Items returned (傳回的項目) 窗格中,應該會看到一個包含 id
1234ABCD
和 number5
的項目。範例:
測試 2 :更新 DynamoDB 資料表中的項目
-
在 API Gateway 主控台
中,返回到 POST 方法的測試分頁。 -
在測試方法下,讓查詢字串和標頭留空。對於請求主體,貼上下列 JSON:
{ "operation": "update", "payload": { "Key": { "id": "1234ABCD" }, "UpdateExpression": "SET #num = :newNum", "ExpressionAttributeNames": { "#num": "number" }, "ExpressionAttributeValues": { ":newNum": 10 } } }
-
選擇 測試 。
測試完成時顯示的結果應該會顯示
200
狀態。此狀態碼表示update
操作成功。若要確認,請檢查 DynamoDB 資料表中的項目是否已修改。
-
開啟 DynamoDB 主控台的 資料表頁面
,然後選擇 lambda-apigateway
資料表。 -
選擇 探索資料表項目 。在 Items returned (傳回的項目) 窗格中,應該會看到一個包含 id
1234ABCD
和 number10
的項目。
部署 API
![步驟 10 部署 API](images/APIG_tut_steps_10.png)
為了讓用戶端能呼叫您的 API,您必須建立部署並建立相關聯的階段。階段代表 API 的快照,包括其方法和整合項目。
部署 API
-
開啟 API Gateway 主控台
中的 API 頁面,然後選擇 DynamoDBOperations
API。 -
在 API 的資源頁面上,選擇部署 API。
-
對於階段,請選擇*新增階段*,然後在階段名稱輸入
test
。 -
選擇部署。
-
在階段詳細資訊窗格中,複製調用 URL。您將在下一個步驟中使用此資料來透過 HTTP 請求調用函數。
使用 curl 來透過 HTTP 請求調用函數
![步驟 11 透過 HTTP 請求調用函數](images/APIG_tut_steps_11.png)
您現在可以透過向 API 發出 HTTP 請求來調用 Lambda 函數。在此步驟中,您將在 DynamoDB 資料表中建立新項目,然後對該項目執行讀取、更新和刪除操作。
若要使用 curl 在 DynamoDB 資料表中建立項目
-
使用您在上個步驟中複製的調用 URL 執行下列
curl
命令。將 curl 與-d
(資料) 選項搭配使用時,系統會自動使用 HTTP POST 方法。curl https://
l8togsqxd8.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "create", "payload": {"Item": {"id": "5678EFGH", "number": 15}}}'如果操作成功,您應該會看到傳回的回應及 HTTP 狀態碼 200。
-
您也可以使用 DynamoDB 主控台執行下列步驟,驗證新項目是否在您的資料表中:
-
開啟 DynamoDB 主控台的 資料表頁面
,然後選擇 lambda-apigateway
資料表。 -
選擇 探索資料表項目 。在 Items returned (傳回的項目) 窗格中,應該會看到一個包含 id
5678EFGH
和 number15
的項目。
-
若要使用 curl 讀取 DynamoDB 資料表中的項目
-
執行以下
curl
命令來讀取您剛建立之項目的值。使用您自己的調用 URL。curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager -d \ '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'視您選擇 Node.js 或 Python 函數程式碼而定,您應該會看到類似下列其中一項的輸出:
若要使用 curl 更新 DynamoDB 資料表中的項目
-
執行下列
curl
命令,透過變更number
值來更新您剛建立的項目。使用您自己的調用 URL。curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "update", "payload": {"Key": {"id": "5678EFGH"}, "UpdateExpression": "SET #num = :new_value", "ExpressionAttributeNames": {"#num": "number"}, "ExpressionAttributeValues": {":new_value": 42}}}' -
若要確認項目的
number
值已更新,請執行另一個讀取命令:curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'
若要使用 curl 刪除 DynamoDB 資料表中的項目
-
執行以下
curl
命令來刪除您剛剛建立的項目。使用您自己的調用 URL。curl https://
l8togsqxd8.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "delete", "payload": {"Key": {"id": "5678EFGH"}}}' 確認刪除操作成功。在 DynamoDB 主控台 探索項目 頁面的 傳回的項目 窗格中,確認具有 id
5678EFGH
的項目已不存在於資料表中。
清除資源 (選用)
除非您想要保留為此教學課程建立的資源,否則您現在便可刪除。透過刪除不再使用 AWS 的資源,您可以避免不必要的 費用 AWS 帳戶。
若要刪除 Lambda 函數
-
開啟 Lambda 主控台中的 函數頁面
。 -
選擇您建立的函數。
-
選擇 Actions (動作)、Delete (刪除)。
-
在文字輸入欄位中輸入
confirm
,然後選擇刪除。
刪除執行角色
-
開啟 IAM 主控台中的 角色頁面
。 -
選取您建立的執行角色。
-
選擇刪除。
-
在文字輸入欄位中輸入角色的名稱,然後選擇 刪除 。
若要刪除 API
-
開啟 API Gateway 主控台中的 API 頁面
。 -
選取您建立的 API。
-
選擇 動作 、刪除 。
-
選擇 刪除 。
若要刪除 DynamoDB 資料表
-
開啟 DynamoDB 主控台的 資料表頁面
。 -
選取您建立的資料表。
-
選擇 刪除 。
-
在文字方塊中輸入
delete
。 -
選擇 刪除資料表 。