На основании инструкций в официальной документации и официальном докере image Я запускаю Elasticsearch локально с этими конфигурациями через docker compose:
elasticsearch:
image: 'elasticsearch:6.7.1'
container_name: elasticsearch
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
С этимуспешно работает локально, сейчас я изучаю запуск этого в AWS ECS как в конфигурации EC2, так и в конфигурации Fargate.Тем не менее, я создал шаблон Cloudformation, который имеет TaskDefinition , который имеет ContainerDefinition для Elasticsearch, который выглядит следующим образом:
ContainerDefinition:
- Name: 'elasticsearch'
Image: 'elasticsearch:6.7.1'
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-group: !Ref 'LogGroup'
awslogs-region: 'us-west-2'
awslogs-stream-prefix: !Sub 'elasticsearch'
Environment:
- Name: cluster.name
Value: 'docker-cluster'
- Name: bootstrap.memory_lock
Value: 'true'
- Name: ES_JAVA_OPTS
Value: '-Xms512m -Xmx512m'
Cpu: '1024'
Memory: '4096'
Ulimits:
- Name: 'memlock'
- SoftLimit: -1
- HardLimit: -1
MountPoints:
- SourceVolume: esdata1
ContainerPath: /usr/share/elasticsearch/data
PortMappings:
- HostPort: '9200'
ContainerPort: '9200'
Запуск создания моего стека Cloudformationс этим шаблоном возникает следующая ошибка Cloudformation:
CREATE_FAILED AWS::ECS::TaskDefinition TaskDefinition Property HardLimit cannot be empty.
Когда я закомментирую следующий фрагмент конфигурации:
Ulimits:
- Name: 'memlock'
- SoftLimit: -1
- HardLimit: -1
и запусту создание моего стека Cloudformation, все на Cloudformationперспектива успешна и ошибок не обнаружено, что говорит мне о том, что помимо конфигурации Ulimits у меня все должно быть хорошо.Оттуда я взглянул на документацию AWS Cloudformation ContainerDefinition , в которой упоминается следующее о конфигурации Ulimits:
Для этого параметра требуется версия Docker 1.18Удаленный API или более поздней версии для вашего экземпляра контейнера.
Я не уверен, почему я получаю эту ошибку HardLimit cannot be empty.
, но мне было интересно, связано ли это с контейнером, нуждающимся в Docker Remote API.Я немного запутался в этом вопросе, но если у кого-то есть какая-либо информация о том, как получить эту работу, хотел бы услышать об этом.Мои знания Docker Remote API не так велики, и, возможно, эта ошибка вообще не имеет к этому никакого отношения.Иногда сообщения об ошибках Cloudformation не совсем понятны, просто я пытаюсь обойти эту проблему, поэтому выкидываю всю полученную информацию.Спасибо