我在Linux上使用Asterisk处理VOIP项目。我们目前的目标是让几台EC2机器在每台机器上运行Asterisk容器,我们希望能够拥有开发,登台和生产环境。为此,我正在编写CloudFormation模板以使用AWS-ECS。 我的问题是我无法找到将AWS-S3存储桶映射到容器卷的正确方法。我想使用2个不同的桶。一个用于将Asterisk配置文件注入所有容器。另一个保存所有容器的语音消息和日志。
谢谢,
P.S。我已经在AWS-ECR上推送了我的Asterisk映像,并在TaskDefenition中引用了它。我在那里看到MountPoints和Volumes,但它们似乎不是我的解决方案。
答案 0 :(得分: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存储桶。
谢谢, 和Manish
答案 1 :(得分:0)
我知道它并没有完全回答这个问题,这比Manish的解决方案更基本,但是在ECS容器之间实现共享存储的一种原始方法是依赖弹性文件系统。
通过在Docker实例的 User Data 中设置此类脚本,或自动扩展组启动配置,可以将EFS安装在每个Docker实例的/ mnt / efs上,从而共享卷集像/ mnt / efs / something。
为此,此用户数据块执行此任务(我们将其与 Amazon ECS Optimized 图像一起使用)。
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)。