从AWS Lambda读取EC2上的文件

时间:2017-07-27 12:03:24

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

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

是否有一个简短的片段(Python首选)如何做到这一点? 或者只是一个简短的教程?

我已经完成了大量的教程,但我无法弄清楚

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您必须了解,默认情况下,实例外的任何人(或任何人)都无法使用您的EC2卷。为了便于理解,它们是“本地卷”。

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

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

  • 你可以在你的实例中安装像FTP这样的文件共享服务,并在你的lambda中连接它;
  • 您可以安装端点服务,以便在EC2内的文件上执行任务,并从lambda连接到此服务。

但关键是:考虑到所有其他可用的AWS服务,也许这个设计不是满足您需求的解决方案。正如之前的回复中所说的那样,使用S3可能会更好。或者lambda不是最好的计算解决方案。请记住,Lambda有一些运行时间限制,并且考虑到Lambda限制,使用网络磁盘操作会使您处于危险区域。

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