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

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

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

建立者:Suresh Konathala、Andrew Preston 和 Arindom Sarkar

Summary

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

此模式的方法會部署廣發性案例,透過為每個區域使用 Amazon S3 Simple Notification Service (Amazon SNS) 主題來處理來自跨區域 S3 儲存貯體的 Amazon S3 通知。這些區域 SNS 主題會將 Amazon S3 事件通知傳送至包含 Lambda 函數的中央區域中的 Amazon Simple Queue Service (Amazon SQS) 佇列。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 服務互動。透過最少的組態,您可以從命令提示中執行 AWS CLI 命令,該命令會實作與瀏覽器型 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 管理主控台,並使用 AWS Lambda 文件中的教學課程使用 Lambda 搭配 Amazon SQS 的指示,在您的中央區域中建立下列資源: AWS Lambda

  • Lambda 執行角色

  • 處理 Amazon S3 事件的 Lambda 函數

  • SQS 佇列

注意

請務必將 SQS 佇列設定為 Lambda 函數的事件來源。

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

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

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

重要

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

AWS DevOps,雲端架構師

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

將您的 SNS 主題訂閱您的中央區域託管的 SQS 佇列。如需詳細資訊,請參閱 Amazon SNS 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,雲端架構師

相關資源