我正在做一个在Linux上使用Asterisk的VOIP项目。我们目前的目标是让几台EC2机器在每台机器上运行一个Asterisk容器,我们希望能够拥有开发、升级和生产环境。为此,我正在编写一个使用AWS-ECS的CloudFormation模板。我的问题是,我找不到将AWS-S3存储桶映射到容器卷的适当方法。我想用两个不同的水桶。一个用于将Asterisk配置文件注入到所有容器中。另一个用于保存所有容器的语音消息和日志。
谢谢,
附注:我已经在AWS-ECR上推送了我的星号图像,并在TaskDefenition中引用了它。我在那里看到了MountPoints和Volumes,但它们似乎不是我的解决方案。
发布于 2016-10-18 12:19:12
您可以尝试在任务定义中使用环境变量吗?
在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-19 07:18:22
我知道它不能完全解决这个问题,这比Manish的解决方案更基本,但在ECS容器之间实现共享存储的原始方法是依赖Elastic文件系统。
通过在Docker实例的用户数据中设置这样的脚本,或者弹性伸缩组启动配置,可以将EFS挂载到每个Docker实例的/mnt/efs上,从而共享设置为/mnt/efs/之类的卷。
为此,此用户数据块完成了此工作(我们将其用于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)。
https://stackoverflow.com/questions/40097418
复制相似问题