首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用亚马逊网络服务CloudFormation模板将亚马逊网络服务S3存储桶映射到亚马逊网络服务上的容器?

如何使用亚马逊网络服务CloudFormation模板将亚马逊网络服务S3存储桶映射到亚马逊网络服务上的容器?
EN

Stack Overflow用户
提问于 2016-10-18 07:53:25
回答 2查看 2.1K关注 0票数 0

我正在做一个在Linux上使用Asterisk的VOIP项目。我们目前的目标是让几台EC2机器在每台机器上运行一个Asterisk容器,我们希望能够拥有开发、升级和生产环境。为此,我正在编写一个使用AWS-ECS的CloudFormation模板。我的问题是,我找不到将AWS-S3存储桶映射到容器卷的适当方法。我想用两个不同的水桶。一个用于将Asterisk配置文件注入到所有容器中。另一个用于保存所有容器的语音消息和日志。

谢谢,

附注:我已经在AWS-ECR上推送了我的星号图像,并在TaskDefenition中引用了它。我在那里看到了MountPoints和Volumes,但它们似乎不是我的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2016-10-18 12:19:12

您可以尝试在任务定义中使用环境变量吗?

在CF模板中,它如下所示:

代码语言:javascript
复制
"DefJob":{
     "Type":"AWS::ECS::TaskDefinition",
     "Properties":{
        "ContainerDefinitions":[
           {
              "Name":"integration-jobs",
              "Cpu":"3096",
              "Essential":"true",
              "Image":"828387064194.dkr.ecr.us-east-1.amazonaws.com/poblano:integration",
              "Memory":"6483",
              "Environment":[
                 {
                    "Name":"S3_REGION",
                    "Value":"us-east-1"
                 },
                 {
                     "Name":"S3_BUCKET"
                     "Value":"Name-of-S3"
                  }
                  ........

然后在容器中引用这些环境变量以使用这些S3存储桶。您必须确保您的实例有权使用这些S3存储桶。

谢谢,曼尼什

票数 1
EN

Stack Overflow用户

发布于 2016-10-19 07:18:22

我知道它不能完全解决这个问题,这比Manish的解决方案更基本,但在ECS容器之间实现共享存储的原始方法是依赖Elastic文件系统。

通过在Docker实例的用户数据中设置这样的脚本,或者弹性伸缩组启动配置,可以将EFS挂载到每个Docker实例的/mnt/efs上,从而共享设置为/mnt/efs/之类的卷。

为此,此用户数据块完成了此工作(我们将其用于Amazon ECS优化的映像)。

代码语言:javascript
复制
Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0

--==BOUNDARY==
MIME-Version: 1.0
Content-Type: text/text/x-shellscript; charset="us-ascii"
#!/bin/bash
yum install -y nfs-utils
mkdir "/mnt/efs"
echo "us-east-1a.fs-1234567.efs.us-east-1.amazonaws.com:/ /mnt/efs nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 0 0" >> /etc/fstab
mount -a
/etc/init.d/docker restart
docker start ecs-agent
--==BOUNDARY==--

Docker会在最后重启,否则看不到已挂载的卷(只有在创建实例时才需要)。

当然,要实现这一点,必须将安全组设置为允许实例和EFS通过NFS网络端口进行通信(2049)。

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

https://stackoverflow.com/questions/40097418

复制
相关文章

相似问题

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