使用無伺服器方法將 AWS 服務鏈結在一起 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用無伺服器方法將 AWS 服務鏈結在一起

創建者阿尼克特·布拉幹薩 (AWS)

環境:生產

技術:無伺服器;; CloudNative;現代化 DevelopmentAndTesting DevOps;基礎架構

AWS 服務:Amazon S3;Amazon SNS;Amazon SQS;AWS Lambda

Summary

此模式展示了一種可擴展的無伺服器方法,方法是將亞馬遜簡單儲存服務 (Amazon S3)、亞馬遜簡單通知服務 (Amazon SNS)、亞馬遜簡單 Amazon Simple Queue Service (Amazon SQS) 和 AWS Lambda 鏈接在一起,以處理上傳檔案。上傳的文件示例用於演示目的。您可以使用無伺服器方法將符合業務目標所需的 AWS 服務組合鏈結在一起,以完成其他任務。無伺服器方法採用非同步工作流程,該工作流程仰賴事件驅動的通知、彈性儲存裝置,以及運算即服務 (FAA) 來處理要求。您可以使用無伺服器方法擴充以滿足需求,同時將成本降至最低。

注意:透過無伺服器方法將 AWS 服務鏈結在一起,有幾個選項。例如,您可以使用將 Lambda 與 Amazon S3 相結合的方法,而不是使用 Amazon SNS 和 Amazon SQS。但是,此模式使用 Amazon SNS 和 Amazon SQS,因為這種方法可讓您在事件通知期間將多個整合點新增至 Lambda 叫用程序,並擴展實作以在無伺服器協調中包含多個偵聽程式,同時將處理額外負荷降至最低。

先決條件和限制

先決條件

產品版本

  • AWS CDK 2.x

  • Python 3.9

架構

下圖說明鏈結的 AWS 服務如何讓使用者將檔案上傳到 S3 儲存貯體進行處理。

使用鏈結的 AWS 服務將檔案上傳到 S3 儲存貯體的工作流程。

該圖顯示以下工作流程:

  1. 使用者將檔案上傳到 S3 儲存貯體。

  2. 上傳會啟動 S3 事件,將訊息發佈到 SNS 主題。訊息包含 S3 事件的詳細資訊。

  3. 發佈至 SNS 主題的訊息會插入 SQS 佇列,該佇列已訂閱並接收該主題的通知。

  4. Lambda 函數會輪詢 SQS 佇列 (做為其事件來源),並等待訊息處理。

  5. Lambda 函數從 SQS 佇列接收訊息時,會處理這些訊息並確認收到這些訊息。

  6. 如果 Lambda 未處理訊息,則該訊息會傳回至 SQS 佇列,最後會傳輸至 SQS 無效字母佇列。

技術, 堆

  • Amazon S3

  • Amazon SNS

  • Amazon SQS

  • AWS Lambda

工具

AWS 服務

其他工具

  • AWS Cloud Development Kit (AWS CDK) 是與 AWS CDK 應用程式互動的主要工具。它會執行您的應用程式、詢問您定義的應用程式模型,以及產生和部署 AWS CDK 產生的 AWS CloudFormation 範本。

  • AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。

  • Python 是一種高級別的,解釋的通用編程語言。

Code

此模式的程式碼可在將 S3 與 SNS GitHub 鏈結到 SQS 到 Lambda 儲存庫中使用。

史诗

任務描述所需技能

複製儲存庫。

複製存放庫並導覽至資python/s3-sns-sqs-lambda-chain料夾。

應用程式開發人員

設定虛擬環境。

  1. 在 AWS CDK 中,執行python3 -m venv .venv命令。

  2. 在 MacOS/Linux 或.venv\Scripts\activate.bat視窗上執行source .venv/bin/activate指令。

應用程式開發人員

安裝依存項目。

執行 pip install -r requirements.txt 命令。

應用程式開發人員
任務描述所需技能

運行單元測試。

  1. 執行 pip install -r requirements-dev.txt 命令。

  2. (選擇性) 執行cdk synth --no-staging > template.yml命令以產生 CloudFormation 堆疊。重要事項:您可以檢查堆疊,但避免產生暫存的資源和成品。

  3. 運行命pytest令以運行所有單元測試。

  4. (選擇性) 執行pytest tests/unit/<test_filename>命令以針對特定檔案執行測試。

應用開發人員,測試工程
任務描述所需技能

設置啟動程序環境。

遵循 AWS 文件中啟動載入中的指示,在將部署 CloudFormation 堆疊的每個 AWS 區域中啟動 AWS CDK 部署環境。

附註:此步驟要求您擁有具有程式設計存取權的認證。

App 開發人員、 DevOps 工程師、資料工程師

部署 CloudFormation 堆疊。

執行命cdk deploy令以建置堆疊並將其部署到 AWS 帳戶。

AWS 應用程式開發人員、 DevOps 工程師 DevOps
任務描述所需技能

刪除 CloudFormation 堆疊並移除關聯的資源。

若要刪除已建立的 CloudFormation 堆疊並移除所有關聯的資源,請執行 run cdk destroy 命令。

應用程式開發人員