【问题标题】:How to run code on aws ec2 with local input and output如何使用本地输入和输出在 aws ec2 上运行代码
【发布时间】:2020-12-03 19:09:39
【问题描述】:

我在 aws ec2 上有代码。现在,它接受来自 s3 的输入和输出文件。这是一个低效的过程。我必须将输入文件上传到s3,将s3复制到ec2,运行程序,将输出文件从ec2复制到s3,然后在本地下载。

有没有办法在 ec2 上运行代码并接受本地文件作为输入,然后将输出保存在我的本地机器上?

【问题讨论】:

  • EC2 实例对数据执行什么类型的处理?运行需要多长时间?它使用什么库?我想知道它是否可以用 AWS Lambda 函数代替?

标签: python amazon-web-services amazon-s3 amazon-ec2


【解决方案1】:

看来您的情况是:

  • Amazon EC2 实例上的某些软件用于处理本地磁盘上的数据
  • 您正在通过 Amazon S3 手动将该数据传入/传出实例

Amazon EC2 实例就像任何其他计算机一样。它运行与您公司服务器上相同的操作系统和相同的软件。但是,它确实受益于云中,因为它可以轻松访问其他服务(例如 Amazon S3),并且可以关闭资源以节省费用。

优化当前进程

在坚持当前流程的情况下,您可以通过一些简单的自动化来改进它:

  • 通过AWS Command-Line Interface (CLI) 命令将您的数据上传到Amazon S3,例如:aws s3 cp file.txt s3://my-bucket/input/
  • 在 EC2 进程上执行一个脚本,该脚本将:
  • 下载文件,例如:aws s3 cp s3://my-bucket/input/file.txt .
  • 处理文件
  • 将结果复制到S3,例如:aws s3 cp file.txt s3://my-bucket/output/
  • 将结果下载到您自己的计算机上,例如:aws s3 cp s3://my-bucket/output/file.txt .

使用scp复制文件

假设您连接到 Linux 实例,您可以通过以下方式实现自动化:

  • 使用scp将文件复制到EC2实例(非常类似于SSH命令)
  • 使用ssh 和[远程命令(https://malcontentcomics.com/systemsboy/2006/07/send-remote-commands-via-ssh.html) 参数触发远程进程
  • 完成后使用scp 将文件复制下来

重新架构以使用 AWS Lambda

如果在数据上运行的作业适合作为 AWS Lambda 函数运行,则流程为:

  • 将数据上传到 Amazon S3
  • 自动触发 Lambda 函数,该函数处理数据并存储结果
  • 从 Amazon S3 下载结果

请注意,AWS Lambda 函数最多运行 15 分钟,并且临时磁盘空间限制为 512MB。 (这可以通过使用 Amazon EFS 进行扩展。)

介于两者之间

还有其他上传/下载数据的方法,例如在 EC2 实例上运行 Web 服务器并通过 Web 浏览器进行交互,或者使用 AWS Systems Manager Run Command 在 EC2 实例上触发进程。这样的选择将基于您被允许修改实例上运行的内容的程度以及您的技术能力。

【讨论】:

  • 这很有帮助,谢谢。我将通过将aws s3 cp 脚本添加到我的EC2 进程来优化当前进程。代码需要 10-15 分钟才能运行,具体取决于输入文件大小,并且需要 80MB 的机器学习模型,所以这可能会超过 lambda 容量,您怎么看?
  • 啊!你没有提到它是一个机器学习模型。 可能很难将这些模型加载到 Lambda 中。您也可以考虑使用 Amazon SageMaker。
  • 谢谢,会调查的。关于实施您的建议的问题。将本地文件放到 s3 并最终放到我的 ec2 上的最佳方法是什么? IIUC,您建议有 3 个脚本,1 个本地脚本上传到 s3,ec2 上的 1 个脚本从 s3 下载并处理数据和 cp 输出到 s3,然后另一个本地脚本从 s3 下载输出到本地。是这样吗,还是有办法从 ec2 做到这一切?
  • 问题是 Amazon EC2 实例,作为 Internet 上的计算机,无法访问您自己的计算机(可能位于路由器或防火墙后面)。您可以通过使用scp 将资源复制到 EC2 来完全避免 Amazon S3。我已将此添加到我的答案中。
  • 我已经回答了那个问题。
【解决方案2】:

@John Rotenstein 我们已经通过 VPC 附加 AWS EFS 卷解决了将 60MB+ 模型加载到 Lambda 中的问题。还解决了诸如 Tensorflow、opencv 等大型库的问题。基本上 lambda 层几乎变得多余,您可以真正高枕无忧,这为我们节省了几天甚至几周的调整、构建和从源代码中挑选库组件的时间,使我们能够专注于真正的问题。也每次都从 S3 加载。 EFS 方法显然需要一个 ec2 实例。

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2021-07-19
    • 1970-01-01
    • 2016-10-11
    相关资源
    最近更新 更多