AWS 入門

建置無伺服器 Web 應用程式

使用 AWS Lambda、Amazon API Gateway、AWS Amplify、Amazon DynamoDB 和 Amazon Cognito

建置無伺服器 Web 應用程式

單元 3:無伺服器服務後端

您將看到 AWS Lambda 和 Amazon DynamoDB 建置後端程序,以處理 Web 應用程式的請求

概觀

在本單元中,您將看到 AWS Lambda 和 Amazon DynamoDB 建置後端程序,以處理 Web 應用程式的請求。您在第一個單元中部署的瀏覽器應用程式可讓使用者請求將獨角獸傳送至其選擇的位置。為了實現那些請求,在瀏覽器中執行的 JavaScript 將需要呼叫在雲端中執行的服務。

架構概觀

架構概觀

每當使用者請求獨角獸時,您皆會實作叫用 Lambda 函數。此函數會從隊列中選取一個獨角獸、在 DynamoDB 表中記錄請求,然後再向前端應用程式回應有關目前所分派獨角獸的詳細資訊。

使用 Amazon API Gateway 從瀏覽器叫用此函數。您將在下一個單元中實作該連線。對於本單元,您只會隔離測試您的功能。

 完成時間

30 分鐘

 使用的服務

實作

  • 使用 Amazon DynamoDB 主控台來建立新的 DynamoDB 資料表。呼叫您的 Rides 表格,並為其提供含類型 String 的分割區金鑰,並將該金鑰命名為 RideId。資料表名稱和分割區索引鍵會區分大小寫。確定您使用所提供的確切 ID。所有其他設定請使用預設值。

    在建立了資料表之後,請記下要在下一個步驟中使用的 ARN。

    a.從 AWS 管理主控台中,選擇 Services (服務),然後選取資料庫下的 DynamoDB
    b.選擇 Create Table (建立資料表)。
    c.輸入 Rides 作為 Table name (資料表名稱)。 此欄位會區分大小寫。
    d.輸入 RideId 作為 Partition key (分割區索引鍵),然後選取 String (字串) 作為索引鍵類型。此欄位會區分大小寫。
    e.勾選 Use default settings (使用預設設定) 方塊,然後選擇 Create (建立)。
    f.捲動至新資料表的概觀區段底部,並記下 ARN。您會在下一個區段中使用此 ARN。

  • 每個 Lambda 函數皆有與其關聯的 IAM 角色。此角色會定義允許函數與哪些其他 AWS 服務進行互動。針對本研習營之用途,您必須建立一個 IAM 角色,授與 Lambda 函數許可將記錄寫入至 Amazon CloudWatch Logs,以及將項目寫入至 DynamoDB 表格的存取權。

    使用 IAM 主控台來建立新角色。將其命名為 WildRydesLambda,然後選取 AWS Lambda 作為角色類型。您必須連接政策,針對函數授與寫入至 Amazon CloudWatch Logs,以及將項目置入 DynamoDB 表格的許可。

    將名為 AWSLambdaBasicExecutionRole 的受管政策連接到這個角色,以授與所需的 CloudWatch Logs 許可。此外並為角色建立自訂內嵌政策,針對您在上個區段中建立的資料表允許 ddb:PutItem 動作。

    a.從 AWS 管理主控台中,按一下 Services (服務),然後選取安全性、身分與合規區段中的 IAM

    b.在左導覽列中選取 Roles (角色),然後選擇 Create New Role (建立新角色)。

    c.從 AWS service (AWS 服務) 群組中選取 Lambda 作為角色類型,然後按一下 Next: Permissions (下一個:許可)。

    備註:選取角色類型會自動為您的角色建立信任政策,允許 AWS 服務代表您採用此角色。如果您是使用 CLI、AWS CloudFormation 或另一個機制,來建立此角色,則會直接指定信任政策。

    d.開始在 Filter (篩選條件) 文字方塊中輸入 AWSLambdaBasicExecutionRole,然後勾選該角色旁的方塊。

    e.選擇 Next step (下一步)。

    f.輸入 WildRydesLambda 作為 Role Name (角色名稱)。

    g.選擇 Create Role (建立角色)。

    h.在角色頁面上的篩選條件方塊中輸入 WildRydesLambda,然後選擇剛建立的角色。

    i.在 Permissions (許可) 索引標籤上,選擇右下角的 Add inline policy (新增內嵌政策) 連結來建立新的內嵌政策。

    j.選取 Choose a service (選擇服務)。

    k.開始在標記為 Find a service (尋找服務) 搜尋方塊中輸入 DynamoDB,並在其出現時選取 DynamoDB

    l.選擇 Select actions (選取動作)。

    m.開始在標記為 Filter actions (篩選動作) 搜尋方塊中輸入 PutItem,並在其出現時勾選 PutItem 旁邊的方塊。

    n.選取 Resources (資源) 區段。

    o.選取 Specific (具體) 選項後,再選擇 table (資料表) 區段中的 Add ARN (新增 ARN) 連結。

    Specify ARN for table (指定資料表的 ARN) 欄位中,貼上您在前一個區段中建立之表格的 ARN,然後選擇 Add (新增)。

    q.選擇 Review Policy (檢閱政策)。

    r.輸入 DynamoDBWriteAccess 作為政策名稱,然後選擇 Create policy (建立政策)。

  • AWS Lambda 將執行您的程式碼,以回應 HTTP 請求之類的事件。在此步驟中,您將建置核心函數,處理來自 Web 應用程式的 API 請求,以分派獨角獸。在下一個單元中,您將使用 Amazon API Gateway,來建立 RESTful API,以公開可從使用者的瀏覽器呼叫的 HTTP 端點。接著,您會將此步驟中建立的 Lambda 函數連線至該 API,以為 Web 應用程式建立完整功能的後端。

    使用 AWS Lambda 主控台建立名為 RequestUnicorn 的新 Lambda 函數,用以處理 API 請求。針對函數程式碼,使用提供的 requestUnicorn.js 範例實作。只從該檔案複製並貼入 AWS Lambda 主控台的編輯器中。

    務必將函數設為使用您在前一個區段中建立的 WildRydesLambda IAM 角色。

    a.選擇 Services (服務),然後選取運算區段中的 Lambda
    b.按一下 Create function (建立函數)​。
    c.將預設的 Author from scratch (從頭編寫) 卡片保持選取的狀態。
    d.在 Name (名稱) 欄位中,輸入 RequestUnicorn
    e.為 Runtime (執行時間) 選取 Node.js 6.10
    f.務必從 Role (角色) 下拉式清單中選取 Choose an existing role (選擇現有角色)。
    g.從 Existing Role (現有的角色)下拉式清單中選取 WildRydesLambda
    h.按一下 Create function (建立函數)。
    i.向下捲動到 Function code (函數程式碼) 區段,並將 index.js 程式碼編輯器中的退出程式碼取代為 requestUnicorn.js 的內容。
    j.按一下頁面右上角的 Save (儲存)。

  • 在本單元中,您會測試使用 AWS Lambda 主控台建立的函數。在下個單元中,您會使用 API Gateway 來新增 REST API,如此即可從您在第一個單元中部署,且以瀏覽器為基礎的應用程式,來叫用函數。

    a.在函數的主編輯畫面上,從 Select a test event... (選取測試事件...) 下拉清單中選取 Configure test event (配置測試事件)。
    b.將 Create new test event (建立新的測試事件) 保持選取的狀態。
    c.在 Event name (事件名稱) 欄位中,輸入 TestRequestEvent
    d.將下列測試事件複製並貼至編輯器:

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }

    e.按一下 Create (建立)。
    f.在主要函數編輯畫面上,按一下 Test (測試) 並在下拉清單中選取 TestRequestEvent
    g.捲動到頁面頂部並展開 Execution result (執行結果) 區段的 Details (詳細資訊) 區段。
    h.確認執行成功,且函數結果類似如下:

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }

這個單元對您是否有幫助?

部署 RESTful API