本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:搭配 API Gateway 使用 Lambda
在本教學課程中,您會建立使用 HTTP 請求叫用 Lambda 函數的 REST API 。您的 Lambda 函數將在 DynamoDB 資料表上執行建立、讀取、更新和刪除 (CRUD) 操作。此處提供此函數以供示範,但您將學習到設定可叫用任何 Lambda 函數RESTAPI的API閘道。
使用 API Gateway 為使用者提供安全HTTP端點來叫用 Lambda 函數,並可透過調節流量和自動驗證和授權呼叫,協助管理對函數的大量API呼叫。API Gateway 也使用 AWS Identity and Access Management (IAM) 和 Amazon Cognito 提供彈性的安全控制。對於需要預先授權才能呼叫應用程式的使用案例,這非常有用。
完成本教學課程需逐一進行以下階段:
-
以 Python 或 Node.js 建立並設定 Lambda 函數,用於對 DynamoDB 資料表執行操作。
-
在API閘道RESTAPI中建立 以連線至 Lambda 函數。
-
建立 DynamoDB 資料表,然後在主控台中使用您的 Lambda 函數進行測試。
-
在終端機中使用 curl 部署您的 API並測試完整設定。
透過完成這些階段,您將了解如何使用 API Gateway 建立HTTP端點,以安全地叫用任何規模的 Lambda 函數。您也將了解如何部署 API,以及如何在主控台中測試 ,並使用終端機傳送HTTP請求。
章節
必要條件
如果您沒有 AWS 帳戶,請完成下列步驟以建立 。
若要註冊 AWS 帳戶
開啟https://portal.aws.amazon.com/billing/註冊
。 請遵循線上指示進行。
部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。
當您註冊 時 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身分中心。
如需指示,請參閱 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 子系統
建立許可政策
在建立 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
。 -
選擇 建立政策 。
建立執行角色
執行角色是 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。
建立函數
下列程式碼範例會從 API Gateway 接收事件輸入,指定要對您要建立的 DynamoDB 資料表和一些承載資料執行的操作。如果函數收到的參數有效,就會對資料表執行請求的操作。
使用 叫用函數 AWS CLI
在整合函數與 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"}
REST API 使用 API Gateway 建立
在此步驟中,您可以建立RESTAPI用來叫用 Lambda 函數的API閘道。
若要建立 API
-
開啟API閘道主控台
。 -
選擇建立 API。
-
在 RESTAPI方塊中,選擇建置 。
-
在API詳細資訊 下,保持選取新增API,在API名稱 中輸入
DynamoDBOperations
。 -
選擇建立 API。
在 上建立資源 REST API
若要將HTTP方法新增至 API,您首先需要為該方法建立資源,以便在 上操作。您可以在此建立資源來管理 DynamoDB 資料表。
若要建立資源
-
在API閘道主控台
中,在 的資源頁面上API,選擇建立資源 。 -
在資源詳細資訊中,針對資源名稱輸入
DynamoDBManager
。 -
選擇 建立資源 。
建立HTTPPOST方法
在此步驟中,您將為 DynamoDBManager
資源建立方法 (POST
)。您可以將此POST
方法連結至 Lambda 函數,以便在方法收到HTTP請求時,APIGateway 會叫用您的 Lambda 函數。
注意
在本教學課程中,有一個HTTP方法 (POST
) 用於叫用單一 Lambda 函數,該函數會在 DynamoDB 資料表上執行所有操作。在實際應用程式中,最佳實務是針對每個操作使用不同的 Lambda 函數和HTTP方法。如需詳細資訊,請參閱無伺服器園地中的 The Lambda Monolith
建立 POST 方法
-
在 的資源頁面上API,確保
/DynamoDBManager
資源反白顯示。然後,在方法窗格中,選擇建立方法。 -
針對方法類型 ,選擇 POST。
-
對於整合類型,讓 Lambda 函數維持在已選取的狀態。
-
針對 Lambda 函數 ,選擇函數 (ARN) 的 Amazon Resource Name (
LambdaFunctionOverHttps
)。 -
選擇建立方法。
建立 DynamoDB 資料表
建立 Lambda 函數將在其中執行CRUD操作的空 DynamoDB 資料表。
若要建立 DynamoDB 資料表
-
開啟 DynamoDB 主控台的 資料表頁面
。 -
選擇 建立資料表 。
-
在 Table details (資料表詳細資訊) 下,執行下列動作:
-
對於 Table name (資料表名稱),請輸入
lambda-apigateway
。 -
對於 Partition key (分割區索引鍵),輸入
id
,並保持資料類型設定為 String (字串)。
-
-
在 Table settings (資料表設定) 下,保留 Default settings (預設設定)。
-
選擇 建立資料表 。
測試 API Gateway、Lambda 和 DynamoDB 的整合
您現在可以測試API閘道API方法與 Lambda 函數和 DynamoDB 資料表的整合。使用API閘道主控台,您可以使用主控台的測試函數,將請求直接傳送到您的POST
方法。在此步驟中,首先需使用 create
操作將新項目新增至 DynamoDB 資料表,然後使用 update
操作來修改項目。
測試 1:在 DynamoDB 資料表中建立新項目
-
在API閘道主控台
中,選擇您的 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閘道主控台
中,返回您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
若要讓用戶端呼叫 API,您必須建立部署和相關聯的階段。階段代表 的快照,API包括其方法和整合。
部署 API
-
開啟API閘道主控台
的 APIs 頁面,然後選擇 DynamoDBOperations
API。 -
在資源頁面上,API選擇部署 API。
-
對於階段,請選擇*新增階段*,然後在階段名稱輸入
test
。 -
選擇部署。
-
在階段詳細資訊窗格中,複製叫用 URL。您將在下一個步驟中使用此功能,以使用 HTTP請求叫用函數。
使用 curl 使用 HTTP 請求叫用函數
您現在可以透過向 發出HTTP請求來叫用 Lambda 函數API。在此步驟中,您將在 DynamoDB 資料表中建立新的項目,然後對該項目執行讀取、更新和刪除操作。
使用 curl 在 DynamoDB 資料表中建立項目
-
使用URL您在上一個步驟中複製的調用執行下列
curl
命令。當您搭配-d
(資料) 選項使用 curl 時,它會自動使用該HTTPPOST方法。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 (刪除)。
-
在文字輸入欄位中輸入
delete
,然後選擇 刪除 。
刪除執行角色
-
開啟IAM主控台的角色頁面
。 -
選取您建立的執行角色。
-
選擇 刪除 。
-
在文字輸入欄位中輸入角色的名稱,然後選擇 刪除 。
若要刪除 API
-
開啟API閘道主控台的 APIs頁面
。 -
選取API您建立的 。
-
選擇 動作、刪除。
-
選擇 刪除 。
若要刪除 DynamoDB 資料表
-
開啟 DynamoDB 主控台的 資料表頁面
。 -
選取您建立的資料表。
-
選擇 刪除 。
-
在文字方塊中輸入
delete
。 -
選擇 刪除資料表 。