將 Lambda 函數訂閱至不同AWS區域中 S3 儲存貯體的事件通知 - AWS 方案指引

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

將 Lambda 函數訂閱至不同AWS區域中 S3 儲存貯體的事件通知

由 Suresh Konathala、Andrew Preston 和 Arindom Sarkar 建立

環境:生產

技術:分析

AWS 服務:AWSLambda、Amazon S3、AmazonSNS、Amazon SQS

Summary

Amazon Simple Storage Service (Amazon S3) Event Notifications 會發佈 S3 儲存貯體中特定事件的通知 (例如,物件建立的事件、物件移除事件或還原物件事件)。您可以使用 AWS Lambda 函數,根據應用程式的需求處理這些通知。不過,Lambda 函數無法直接訂閱來自在不同AWS區域中託管之 S3 儲存貯體的通知。

此模式的方法會部署扇出案例,透過為每個區域使用 Amazon S3 Simple Notification Service (Amazon SNS) 主題來處理來自跨區域 S3 儲存貯體的 Amazon S3 通知。這些區域SNS主題會將 Amazon S3 事件通知傳送至包含 Lambda 函數的中央區域中的 Amazon Simple Queue Service (AmazonSQS) 佇列。Lambda 函數會訂閱此SQS佇列,並根據您的組織需求處理事件通知。

先決條件和限制

先決條件

架構

下圖顯示此模式方法的架構。 

工作流程使用 Amazon SNS、S3 和 SQS 處理來自跨區域 S3 儲存貯體的事件通知。

該圖顯示以下工作流程:

  1. Amazon S3 會將有關 S3 儲存貯體的事件通知 (例如,建立的物件、移除的物件或還原的物件) 傳送至相同區域中SNS的主題。

  2. SNS 主題會將事件發佈至中央區域中的SQS佇列。

  3. SQS 佇列設定為 Lambda 函數的事件來源,並緩衝 Lambda 函數的事件訊息。 

  4. Lambda 函數會輪詢訊息的SQS佇列,並根據您的應用程式需求處理 Amazon S3 事件通知。

技術堆疊

  • Lambda

  • Amazon SNS

  • Amazon SQS

  • Amazon S3

工具

  • AWS CLI– AWS命令列介面 (AWS CLI) 是一種開放原始碼工具,可透過命令列 Shell 中的命令與 AWS服務互動。組態最少時,您可以從AWSCLI命令提示中執行執行與瀏覽器型AWS管理主控台提供的功能相當的命令。

  • AWS CloudFormation – AWS CloudFormation 可協助您建立和設定AWS資源模型、快速且一致地佈建資源,以及在整個生命週期中管理資源。您可以使用範本來描述您的資源及其相依性,並將它們一起啟動和設定為堆疊,而不是個別管理資源。您可以管理和佈建跨多個AWS帳戶和AWS區域的堆疊。

  • AWS Lambda – AWS Lambda 是一種運算服務,支援執行程式碼,無需佈建或管理伺服器。Lambda 只有在需要時才會執行程式碼,可自動從每天數項請求擴展成每秒數千項請求。只需為使用的運算時間支付費用,一旦未執行程式碼,就會停止計費。

  • Amazon SNS – Amazon Simple Notification Service (Amazon SNS) 會協調和管理發佈者和用戶端之間的訊息傳遞或傳送,包括 Web 伺服器和電子郵件地址。訂閱者會收到發佈到所訂閱主題的所有訊息,且某一主題的所有訂閱者均會收到相同訊息。

  • Amazon SQS– Amazon Simple Queue Service (Amazon SQS) 提供安全、耐用且可用的託管佇列,可讓您整合和解耦分散式軟體系統和元件。Amazon 同時SQS支援標準和FIFO佇列。

史詩

任務描述所需的技能

使用 Lambda 觸發程序建立SQS佇列。

登入 AWS 管理主控台,並在 Lambda 文件中使用 Lambda 搭配 Amazon 教學SQS課程的指示,在您的中央區域建立下列資源: AWS

  • Lambda 執行角色

  • 處理 Amazon S3 事件的 Lambda 函數

  • SQS 佇列

注意 :請確定您已將SQS佇列設定為 Lambda 函數的事件來源。

AWS DevOps,雲端架構師
任務描述所需的技能

建立SNS主題以接收 Amazon S3 事件通知。

在您要接收 Amazon S3 事件通知的區域中建立SNS主題。如需詳細資訊,請參閱 Amazon SNS 文件中的建立SNS主題。 

重要 :請務必記錄SNS主題的 Amazon Resource Name (ARN)。 

AWS DevOps,雲端架構師

將SNS主題訂閱至中央SQS佇列。

將您的SNS主題訂閱到中央區域託管的SQS佇列。如需詳細資訊,請參閱 Amazon SNS 文件中的訂閱SNS主題

AWS DevOps,雲端架構師

更新SNS主題的存取政策。

  1. 開啟 Amazon SNS主控台,選擇主題 ,然後選擇您先前建立SNS的主題。

  2. 選擇編輯,然後展開存取政策 - 選用區段。

  3. 將下列存取政策連接至您的SNS主題,以允許 Amazon S3 的sns:publish許可,然後選擇儲存

{ "Version": "2012-10-17", "Statement": [ { "Sid": "0", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-west-2::s3Events-SNSTopic-us-west-2" } ] }
AWS DevOps,雲端架構師

設定區域中每個 S3 儲存貯體的通知。

設定區域中每個 S3 儲存貯體的事件通知。如需詳細資訊,請參閱 Amazon S3 文件中的使用 Amazon S3 主控台啟用和設定事件通知。 Amazon S3

注意:在目的地區段中,選擇SNS主題並指定您先前建立SNS的主題ARN的 。

AWS DevOps,雲端架構師

針對所有必要的區域重複此史詩。

重要 :針對您要從中部區域接收 Amazon S3 事件通知的每個區域,重複此史詩中的任務。

AWS DevOps,雲端架構師

相關資源