繁体   English   中英

当文件上传到 S3 存储桶时触发 AWS Cloud9 运行

[英]Trigger AWS Cloud9 to run when file is uploaded to a S3 Bucket

我在 AWS Cloud9 环境中有一个包含代码的 .py 文件。

我想在文件上传到特定 S3 存储桶时运行此代码。

但是,似乎我只能使用 AWS Lambda 函数来触发。 我不知道如何向 AWS Cloud9 函数添加触发器...

我在Cloud9环境下.py文件中的简单代码是:

import boto3
import os
import sys

s3 = boto3.client('s3')

s3.download_file('our-awesome-first-test-bucket', 'test_text.txt', 'test_text_saved_to_env.txt')

with open('test_text_saved_to_env.txt', 'r') as f:
    output = sum(map(int, f))
   
with open('output_to_awesome_bucket.txt', 'w') as outf:
    outf.write(str(output))
   
s3.upload_file('output_to_awesome_bucket.txt', 'outputbucket-for-our-first-awesome-bucket', 'output_to_awesome_bucket.txt')

os.remove('test_text_saved_to_env.txt')
os.remove('output_to_awesome_bucket.txt')

当文件上传到 S3 存储桶时,如何触发此代码运行?

文档中所述,上传 object 后,S3 支持以下目的地作为触发器:

  • Amazon Simple Notification Service (Amazon SNS) 主题
  • Amazon 简单队列服务 (Amazon SQS) 队列
  • AWS Lambda function

使用的理想解决方案是简单地运行 lambda function,但正如您所提到的,您依赖于大小大于 250MB 的库,这是 lambda 的限制。

在这种情况下,您应该考虑将 Python 应用程序打包到一个 Docker 映像中,您可以在 ECS 任务中运行该映像。 您还应该创建一个 lambda function 作为调用 ECS 任务的包装器。

配置存储桶以触发 lambda,后者将运行 ECS 任务。


作为替代方案,如果您希望在 Cloud9 EC2 实例上运行脚本,您可以在 EC2 实例上配置一项服务,该服务轮询 SQS 队列(配置为 S3 存储桶的目标),然后在事件发生时运行脚本在队列中被检测到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM