2017-07-27 96 views
0

我有一些文件上传到EC2实例。 我想阅读并从lambda函数处理它们。从AWS读取EC2上的文件Lambda

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

我经历过吨的教程,但我不出来呢

+0

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

回答

1

你将不得不使用一个Web服务器什么的EC2服务器莫名其妙地提供文件服务。或者您可以尝试使用Lambda函数中的SCP或SFTP库连接到EC2服务器并复制文件。在这些服务之间共享文件的正常方式是让EC2服务器上的进程将文件复制到S3,而不是将它们留在EC2服务器上。

1

您必须了解,根据默认设置,您的EC2卷不适用于实例外的任何人(或任何其他人)。为了理解,它们是“本地卷”。

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

为了让对文件的访问您的EC2里面lambda函数你有几个选择:

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

但问题是:考虑到所有其他可用的AWS服务,可能这种设计不是您的需求的解决方案。正如前面的回复中所述,也许你会更好地使用S3。或者,也许lambda不是最好的计算解决方案。请记住,Lambda有几个运行时间限制,并且考虑到Lambda限制,通过网络使用磁盘操作会使您处于危险区域。

如果您可以给我们提供关于您的用例的更多信息,我们可以帮助您更好地完成工作。

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()