首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将S3存储桶挂载为AWS ECS容器上的文件系统

将S3存储桶挂载为AWS ECS容器上的文件系统
EN

Stack Overflow用户
提问于 2018-08-27 22:30:25
回答 4查看 20.1K关注 0票数 11

我正在尝试使用rexray/s3fs驱动程序将S3作为卷挂载到AWS ECS docker容器上。

我可以在我安装插件的本地计算机上执行此操作

代码语言:javascript
运行
复制
$docker plugin install rexray/s3fs

并将S3吊桶安装在码头集装箱上。

代码语言:javascript
运行
复制
$docker plugin ls

ID                  NAME                 DESCRIPTION                                   ENABLED

3a0e14cadc17        rexray/s3fs:latest   REX-Ray FUSE Driver for Amazon Simple Storage   true 

$docker run -ti --volume-driver=rexray/s3fs -v s3-bucket:/data img

我正在尝试将其复制到AWS ECS上。

已尝试遵循以下文档:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-volumes.html

如果我给了驱动器值,那么任务就不能运行,并且“我们无法放置一个任务,因为没有容器实例满足它的所有要求”。错误。

我使用的是t2.media实例,并给出了它的任务要求,所以它不应该是硬件要求问题。

如果我从作业定义中删除驱动程序配置,则会执行任务。

看起来我错过了一些配置。

有没有人尝试/尝试过同样的事情,请分享相关知识。

谢谢!!

EN

回答 4

Stack Overflow用户

发布于 2019-05-29 13:06:08

您使用rexray/s3fs驱动程序的方法是正确的。

这些是我在Amazon Linux1上运行的步骤。

首先,您需要安装s3fs。

代码语言:javascript
运行
复制
yum install -y gcc libstdc+-devel gcc-c+ fuse fuse-devel curl-devel libxml2-devel mailcap automake openssl-devel git gcc-c++
git clone https://github.com/s3fs-fuse/s3fs-fuse
cd s3fs-fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl
make
make install

现在安装驱动程序。这里有一些您可能希望修改的选项,例如使用IAM角色而不是访问密钥和AWS区域。

代码语言:javascript
运行
复制
docker plugin install rexray/s3fs:latest S3FS_REGION=ap-southeast-2 S3FS_OPTIONS="allow_other,iam_role=auto,umask=000" LIBSTORAGE_INTEGRATION_VOLUME_OPERATIONS_MOUNT_ROOTPATH=/ --grant-all-permissions

现在是重新启动ECS代理的非常重要的一步。为了更好的衡量,我也更新。

代码语言:javascript
运行
复制
yum update -y ecs-init
service docker restart && start ecs

现在,您应该已准备好创建任务定义。重要的部分是您的卷配置,如下所示。

代码语言:javascript
运行
复制
"volumes": [
  {
    "name": "name-of-your-s3-bucket",
    "host": null,
    "dockerVolumeConfiguration": {
      "autoprovision": false,
      "labels": null,
      "scope": "shared",
      "driver": "rexray/s3fs",
      "driverOpts": null
    }
  }
]

现在您只需要在容器定义中指定挂载点:

代码语言:javascript
运行
复制
"mountPoints": [
  {
    "readOnly": null,
    "containerPath": "/where/ever/you/want",
    "sourceVolume": "name-of-your-s3-bucket"
  }
]

现在,只要您拥有访问s3存储桶的适当IAM权限,您的容器就应该启动,并且可以继续将s3用作卷。

如果您在运行显示"ATTRIBUTE“的任务时出错,请仔细检查插件是否已成功安装在ec2实例上,以及是否已重新启动ecs代理。还要仔细检查你的驱动程序名是"rexray/s3fs“。

票数 8
EN

Stack Overflow用户

发布于 2019-02-02 23:34:22

ecs集群ec2实例需要安装rexray驱动程序。在这篇aws博客文章中,他们讨论了这一点。https://aws.amazon.com/blogs/compute/amazon-ecs-and-docker-volume-drivers-amazon-ebs/

为了帮助您入门,我们创建了一个构建两节点

集群的AWS CloudFormation模板。该模板将rexray/ebs卷驱动程序引导到每个节点上,并使用内联策略为它们分配一个IAM角色,该角色允许它们调用REX-Ray所需的API操作。

这同样适用于s3驱动程序

票数 2
EN

Stack Overflow用户

发布于 2020-03-06 08:59:53

我只需直接运行s3fs命令将存储桶挂载到容器中,就可以让s3fs在ECS容器中工作。我不熟悉rexray驱动程序,它可能比仅仅使用s3fs提供了一些好处,但对于许多用例来说,这可能工作得很好,并且不需要任何UserData编辑。

我通过将容器的入口点设置为以下内容,使其更平滑一些:

代码语言:javascript
运行
复制
#!/bin/bash

bucket=my-bucket

s3fs ${bucket} /data -o ecs

echo "Mounted ${bucket} to /data"

exec "$@"

-o ecs选项对于承担ECS Task角色至关重要,如果您使用常规-o iam_role=autos3fs将承担运行ECS代理的EC2实例的IAM角色。

注意:apt-get install s3fs安装的s3fs版本比较旧,在撰写本文时还没有提供此选项,这意味着您可能需要从源代码安装s3fs

还要注意:您需要在特权模式下运行您的容器,s3fs挂载才能工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52041550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档