#amazon-web-services #amazon-s3 #amazon-cloudformation #amazon-ecs #docker-container
#amazon-веб-сервисы #amazon-s3 #aws-cloudformation #amazon-ecs #docker-контейнер
Вопрос:
Я работаю над проектом VOIP с использованием Asterisk в Linux. Наша текущая цель — иметь несколько компьютеров EC2, на которых работает контейнер Asterisk, на каждом из них, и мы хотим иметь возможность разработки, промежуточной и производственной среды. Для этого я пишу шаблон CloudFormation для использования AWS-ECS. Моя проблема в том, что я не могу найти правильный способ сопоставления корзин AWS-S3 с объемами контейнеров. Я хочу использовать 2 разных корзины. Один для внедрения конфигурационных файлов Asterisk во все контейнеры. Еще один для сохранения голосовых сообщений и журналов всех контейнеров.
Спасибо,
PS Я поместил свой образ Asterisk в AWS-ECR и сослался на него в определении задачи. Я вижу там точки монтирования и тома, но они, похоже, не являются моим решением.
Ответ №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.
Спасибо, Маниш
Комментарии:
1. Привет, я собираюсь подключить том ECS к корзине s3, чтобы иметь доступ к журналам без входа на сервер, мне интересно, как ссылаться на эти переменные среды в контейнерах?
Ответ №2:
Я знаю, что это не совсем отвечает на эту проблему, это более простое решение, чем решение Manish, но простой способ обеспечить совместное хранение между контейнерами ECS — полагаться на эластичные файловые системы.
Установив такой сценарий в пользовательских данных экземпляров Docker или в конфигурации запуска группы автоматического масштабирования, EFS можно смонтировать в /mnt/efs каждого экземпляра Docker, таким образом разделяя тома, установленные на что-то вроде /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).