【问题标题】:Reading files on EC2 from AWS Lambda从 AWS Lambda 读取 EC2 上的文件
【发布时间】:2017-07-27 21:40:25
【问题描述】:

我在 EC2 实例上上传了一些文件。 我想从 lambda 函数中读取和处理它们。

是否有简短的 sn-p(首选 Python)说明如何操作? 还是只是一个简短的教程?

我已经阅读了大量的教程,但我还是搞不懂

【问题讨论】:

  • 考虑将文件上传到 S3,然后从 s3:ObjectCreated:* 事件触发您的 Lambda 函数。

标签: amazon-web-services amazon-ec2 aws-lambda


【解决方案1】:

您必须使用 Web 服务器或其他方式从 EC2 服务器以某种方式提供文件。或者,您可以尝试在 Lambda 函数中使用 SCP 或 SFTP 库连接到 EC2 服务器并复制文件。在这些服务之间共享文件的正常方式是让 EC2 服务器上的进程将文件复制到 S3,而不是将它们留在 EC2 服务器上。

【讨论】:

    【解决方案2】:

    如果您决定使用 EC2 实例来提供文件,请确保:

    • 您可以从外部访问实例,这意味着它需要具有公共 IP,并且服务器必须侦听来自任何位置 (0.0.0.0) 的连接
    • EC2 安全组必须允许 0.0.0.0 用于 80 或 443(或自定义端口)

    在 Python 中,有SimpleHTTPServer。您可以将其作为起点,然后根据您的需要对其进行强化。

    import SimpleHTTPServer
    import SocketServer
    
    PORT = 8000
    
    Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
    
    httpd = SocketServer.TCPServer(("", PORT), Handler)
    
    print "serving at port", PORT
    httpd.serve_forever()
    

    【讨论】:

      【解决方案3】:

      您必须了解,默认情况下,您的 EC2 卷对您的实例之外的任何人(或任何事物)均不可用。为了便于理解,它们是“本地卷”。

      您的 lambda 代码在您的 EC2 实例之外运行。您可以将其配置为像在您的 VPC 中一样运行,但即使在这种情况下,它也无法访问您实例内的“本地”卷。

      要让 lambda 函数访问 EC2 中的文件,您将有几个选项:

      • 您可以在您的实例中安装文件共享服务(如 FTP)并在您的 lambda 中连接到它;
      • 您可以安装端点服务来对 EC2 内的文件执行任务,并从您的 lambda 连接到该服务。

      但重点是:考虑到所有其他可用的 AWS 服务,也许这种设计不能满足您的需求。正如前面的回复中所说,也许使用 S3 会更好地为您服务。或者也许 lambda 不是最好的计算解决方案。请记住,Lambda 有一些运行时间限制,考虑到 Lambda 限制,通过网络使用磁盘操作会将您置于危险区域。

      如果您可以向我们提供有关您的用例的更多信息,我们可以为您提供更好的帮助。

      【讨论】:

        猜你喜欢
        • 2020-03-19
        • 2019-10-15
        • 1970-01-01
        • 1970-01-01
        • 2015-09-27
        • 2017-05-11
        • 2020-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多