AWS 上的專案

建立現代 Web 應用程式

部署 Web 應用程式、連接資料庫,以及分析使用者行為

單元 3:存放 Mysfit 資訊

在此單元中,您將設定 Amazon DynamoDB 以將 mysfit 資訊存放在中央資料庫資料表中。

概觀

現在,您已部署服務,使用 CI/CD 管道可在每次更新程式碼儲存庫時自動將變更交付至該服務,您可以快速將新的應用程式功能從概念轉變為可供 Mysical Mysfits 客戶使用。隨著敏捷性的提高,我們向 Mysical Mysfits 網站架構 (資料層) 新增另一項基礎功能。

在此單元中,您將在 Amazon DynamoDB 中建立一個資料表,這是 AWS 上具有超快效能的受管和可擴展的 NoSQL 資料庫服務。我們不會將所有 Mysfits 存放在靜態 JSON 檔案中,而是將其存放在資料庫中,以使網站未來更具可延伸性和可擴展性。

架構圖

fargate 和 dynamodb 弧形圖

 完成時間

20 分鐘

 使用的服務

實作說明

  • A:建立 DynamoDB 資料表

    若要將 DynamoDB 資料表新增至該架構,我們包含了另一個 JSON CLI 輸入檔案,該檔案定義一個名稱為 MysfitsTable 的資料表。此資料表將具有由稱為 MysfitId 的雜湊索引鍵屬性定義的主要索引,以及另外兩個次要索引。第一個次要索引將具有 Species 的雜湊索引鍵和 MysfitId 的範圍索引鍵,第二個次要索引將具有 Alignment 的雜湊索引鍵和 MysfitId 的範圍索引鍵。

    這兩個次要索引讓我們能夠對資料表執行查詢,以擷取與指定 Species 或 Alignment 相符的所有 mysfit,以啟用您可能已經註意到尚未在網站上使用的篩選功能。您可以在 ~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json 檢視此檔案。無需對此檔案做出任何變更即可隨時執行。若要了解有關 DynamoDB 中的索引和其他核心概念的詳細資訊,請瀏覽此頁面。 

    若要使用 AWS CLI 建立資料表,請在 Cloud9 終端機中執行以下命令:

    aws dynamodb create-table --cli-input-json file://~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json

    執行命令後,即可透過在終端機中執行以下 AWS CLI 命令來檢視新建立資料表的詳細資訊

    aws dynamodb describe-table --table-name MysfitsTable

    如果我們執行以下命令來擷取資料表中存放的所有項目,您會看到該資料表為空:

    aws dynamodb scan --table-name MysfitsTable
    {
        "Count": 0,
        "Items": [],
        "ScannedCount": 0,
        "ConsumedCapacity": null
    }
    B:新增項目至 DynamoDB 資料表

    還提供了一個 JSON 檔案,可用於將許多 Mysfit 項目批次插入此資料表。這會透過 DynamoDB API BatchWriteItem 完成。

    若要使用提供的 JSON 檔案叫用此 API,請執行以下終端機命令 (服務回應中應報告沒有未處理的項目):

    aws dynamodb batch-write-item --request-items file://~/environment/aws-modern-application-workshop/module-3/aws-cli/populate-dynamodb.json

    現在,如果執行相同的命令來掃描資料表的所有內容,則會發現項目已載入資料表中:

    aws dynamodb scan --table-name MysfitsTable
  • A:複製更新的 Flask 服務程式碼

    現在我們已將資料包含在資料表中,我們來修改應用程式的程式碼以從該資料表中讀取資料,而不是返回單元 2 中使用的靜態 JSON 檔案。我們針對您的 Flask 微型服務包含了一組新的 Python 檔案,但是現在並非讀取靜態 JSON 檔案,而是向 DynamoDB 發出請求。

    該請求使用稱為 boto3 的 AWS Python SDK 形成。此 SDK 是一種透過 Python 程式碼與 AWS 服務互動的強大而簡單的方法。它讓您能夠使用各種服務用戶端定義和功能,這些定義和功能與本講習班中執行的 AWS API 和 CLI 命令高度對稱。使用 boto3 時,將這些命令轉換為可用的 Python 程式碼非常簡單。

    若要將新檔案複製到 CodeCommit 儲存庫目錄中,請在終端機中執行以下命令:

    cp ~/environment/aws-modern-application-workshop/module-3/app/service/* ~/environment/MythicalMysfitsService-Repository/service/
    B:複製更新的 Flask 服務程式碼

    現在,我們需要使用 git 命令行用戶端將這些程式碼變更簽入 CodeCommit。

    執行以下命令以簽入新的程式碼變更並開始使用您的 CI/CD 管道:

    cd ~/environment/MythicalMysfitsService-Repository
    git add .
    git commit -m "Add new integration to DynamoDB."
    git push

    現在,僅需 5-10 分鐘,您會看到程式碼變更透過 CodePipeline 中的完整 CI/CD 管道完成,並輸出到部署至 AWS Fargate on Amazon ECS 的 Flask 服務。

    隨時登入 AWS CodePipeline 主控台,以查看管道中的變更進度。

  • 最後,我們需要在 S3 儲存貯體中發佈新的 index.html 頁面,以便新的 API 功能使用查詢字串來篩選將要使用的回應。新的 index.html 檔案位於 ~/environment/aws-modern-application-workshop/module-3/web/index.html。

    在 Cloud9 IDE 中開啟此檔案,然後使用適當的 NLB 端點取代指示 “REPLACE_ME” 的字串,就像在單元 2 中所做的那樣。請記住不要包含 /mysfits 路徑。

    若有需要,請參考 /module-2/ 目錄中已編輯的檔案。取代端點以指向您的 NLB 之後,透過執行以下命令 (取代為在單元 1 中所建立儲存貯體的名稱) 來上傳新的 index.html 檔案︰

    aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-3/web/ s3://your_bucket_name_here/

    重新造訪 Mysical Mysfits 網站,以查看 DynamoDB 資料表中載入的 Mysfits 的新填充內容,以及篩選功能的工作方式!

    單元 3 到此結束。

接下來,設定使用者註冊。