簡體   English   中英

將新的 object 添加到 s3 存儲桶時,如何觸發 ec2 實例和 python 腳本?

[英]How to trigger ec2 instance and a python script inside when a new object is added to s3 bucket?

每當將新文件添加到 s3 存儲桶時,我想在我的 ec2 實例中自動運行 py 腳本。 截至目前,我已將我的存儲桶連接到 lambda function ,只要將文件添加到存儲桶,就會觸發事件通知。 我如何進一步使用它來觸發我的 ec2 實例開始執行 python 文件? 我想將該文件從存儲桶發送到實例,python 程序將使用該文件作為輸入。 我讀到我可以在添加 object 時觸發 lambda function。 現在我如何使用它或 SQS 自動啟動我的實例並在文件從存儲桶發送到實例后開始在其中運行 python 腳本?

如您所寫,在可能觸發 lambda function 的事件中將文件上傳到 s3 存儲桶。 lambda 可能是 python 代碼本身 - 在這種情況下,無需在 ec2 實例上運行它。 但是,您有執行時間限制(15 分鍾)。 如果這還不夠並且 ec2 實例正常停止,您可以使用 boto3 啟動您的 ec2 實例( 您可以使用此處描述的 lambda 代碼來執行此操作,並將實例配置為在啟動時運行 python 腳本(例如 @reboot entry在 /etc/crontab 中)

當創建新的 object 時,S3 可以生成事件https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.ZFC35FDC70D5FC69D2693ZEE7A5

一種類型的事件目的地可能是 SNS 主題https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html

一種 SNS 訂閱類型是 HTTP/S POST https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html

因此,如果您的腳本可以實現一個簡單的 HTTP 偵聽器/api,它將幾乎立即被 SNS 觸發。

有幾種選擇:

  • 配置 Amazon S3 以觸發 AWS Lambda function,然后在 Lambda ZC1C425268E68385D1AB4A
  • 讓 EC2 實例持續運行。 配置 S3 以將消息推送到Amazon SQS 隊列中。 EC2 實例上的應用程序應持續長輪詢 SQS 隊列以檢查是否已收到文件。 如果是這樣,SQS 消息將包含文件詳細信息。 或者
  • 配置 S3 以觸發 AWS Lambda function,然后啟動(“喚醒”)EC2 實例(如果它已停止)。 Lambda function 應該將消息推送到 SQS 隊列,以便實例可以訪問它(尤其是在創建了多個文件的情況下)。 在 EC2 實例的/var/lib/cloud/scripts/per-boot/中放置一個腳本,該腳本將在實例啟動時自動運行。 該腳本應該觸發應用程序,與上面的第二個選項相同,它從 SQS 隊列中讀取。 清空隊列后,腳本可以停止實例以最小化成本。 有關更多詳細信息,請參閱: EC2 實例完成任務時自動停止 - DEV 社區

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM