0

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

谢谢,

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

4

2 回答 2

1

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

在 CF 模板中是这样的:

"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 存储桶。

谢谢,马尼什

于 2016-10-18T04:19:12.217 回答
0

我知道它不能准确回答这个问题,这比 Manish 的解决方案更基本,但实现 ECS 容器之间共享存储的原始方法是依赖Elastic File Systems

通过在 Docker 实例的User Data或 Auto Scaling Group 启动配置中设置这样的脚本,EFS 可以挂载在每个 Docker 实例的 /mnt/efs 上,从而共享设置为 /mnt/efs/something 之类的卷。

为此,这个用户数据块完成了这项工作(我们将它与Amazon ECS 优化图像一起使用)。

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) 进行通信。

于 2016-10-18T23:18:21.787 回答