首页 > 解决方案 > AWS Batch 中的 Docker 上的 AWS S3 挂载

问题描述

我想在我用来运行一些 AWS Batch 作业的 Docker 容器上安装一个 AWS s3 存储桶。我一直在研究解决这个问题的几种方法,但我仍然不清楚如何让它在 AWS Batch 上工作,AWS Batch 将根据作业定义动态分配 EC2 实例。以下是我收集的想法,但我不确定如何将它们组合在一起:

  1. https://rexray.readthedocs.io/en/v0.9.0/user-guide/docker-plugins/ 我可以使用此插件将 S3 存储桶挂载为 Docker 卷,但不确定如何在 AWS Batch 上执行此操作。这个插件应该是 Docker 镜像的一部分吗?
  2. 我可以使用 s3fs-fuse,但有人告诉我,我将无法在 AWS Batch 实例上的 EC2 实例上安装或存储来自 S3 的任何文件,然后可以将其安装在 docker 中。- 有没有办法通过在 AMI 中包含一些将文件从 s3 复制到实例的代码来做到这一点?
  3. 有没有其他方法可以让它工作?

如果我的问题太基本,请原谅我。我对 Docker 和 AWS Batch 还很陌生。将不胜感激任何帮助!

谢谢 !

标签: amazon-web-servicesdockerbatch-processing

解决方案


我过去曾亲自s3fs解决过这个问题。使用 S3 作为挂载文件系统有一些注意事项,您最好熟悉一下(因为您正在处理不是文件系统的东西,就像文件系统一样,这是一个经典的泄漏抽象问题),但是如果您的工作流程相对简单并且没有出现竞争条件的可能性,您应该能够有信心做到这一点(尤其是现在 AWS S3 已于 2020 年 12 月自动发布了所有应用程序的读写一致性)。

要回答您的另一个问题:

我可以使用 s3fs-fuse,但有人告诉我,我将无法在 AWS Batch 实例上的 EC2 实例上安装或存储来自 S3 的任何文件,然后可以将其安装在 docker 中。- 有没有办法通过在 AMI 中包含一些将文件从 s3 复制到实例的代码来做到这一点?

如果您使用s3fs将 S3 存储桶挂载为 docker 中的文件系统,则无需担心将文件从 S3 复制到实例,实际上使用的全部意义s3fs在于您可以从容器访问 S3 中的所有文件,而无需不得不离开S3。

例如,您将 S3 存储桶安装s3://my-test-bucket/data容器中。my-executable --input /data/my-s3-file --output /data/my-s3-output然后,您可以像输入文件就在本地文件系统上一样运行您的程序。完成后,您可以看到输出文件将位于 S3 中的s3://my-test-bucket/my-s3-output. 这可以大大简化您的工作流程/减少胶水代码。

我的s3fsAWS 批处理容器的 dockerfile 如下所示:

FROM ubuntu:18.04

RUN apt-get -y update && apt-get -y install curl wget build-essential automake libcurl4-openssl-dev libxml2-dev pkg-config libssl-dev libfuse-dev parallel

RUN wget https://github.com/s3fs-fuse/s3fs-fuse/archive/v1.86.tar.gz && \
    tar -xzvf v1.86.tar.gz && \
    cd s3fs-fuse-1.86 && \
    ./autogen.sh && \
    ./configure --prefix=/usr && \
    make && \
    make install && \
    rm -rf s3fs-fuse-1.86 v1.86.tar.gz

RUN mkdir /data

COPY entrypoint.sh /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh总是在主程序之前运行 s3fs 挂载是一种便利(这打破了每个 docker 容器一个进程的范式,但我认为这不是主要关注的原因)。它看起来像这样:

#!/bin/bash

bucket=my-bucket

s3fs ${bucket} /data -o ecs

echo "Mounted ${bucket} to /data"

exec "$@"

请注意此处的相关答案:https ://stackoverflow.com/a/60556131/1583239


推荐阅读