Я нашел другой связанный сценарий, который вызовет это, и подумал, что помещу его здесь, если кто-то еще столкнется с этим. Если вы определите TaskDefinition
с изображением, которое на самом деле не существует в его ContainerDefinition
, а затем попытаетесь запустить это TaskDefinition
как службу, вы столкнетесь с той же проблемой зависания (или, по крайней мере, с чем-то похожим на ту же проблему) .
ПРИМЕЧАНИЕ: все приведенные ниже фрагменты YAML находятся в одном шаблоне CloudFormation.
Итак, в качестве примера я создал это Repository
:
MyRepository:
Type: AWS::ECR::Repository
А потом я создал это Cluster
:
MyCluster:
Type: AWS::ECS::Cluster
А это TaskDefinition
(в сокращении):
MyECSTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
# ...
ContainerDefinitions:
# ...
Image: !Join ["", [!Ref "AWS::AccountId", ".dkr.ecr.", !Ref "AWS::Region", ".amazonaws.com/", !Ref MyRepository, ":1"]]
# ...
Определив их, я создал Service
вот так:
MyECSServiceDefinition:
Type: AWS::ECS::Service
Properties:
Cluster: !Ref MyCluster
DesiredCount: 2
PlacementStrategies:
- Type: spread
Field: attribute:ecs.availability-zone
TaskDefinition: !Ref MyECSTaskDefinition
Все это казалось мне разумным, но оказалось, что в этом написании / развертывании есть две проблемы, из-за которых он завис.
- Для
DesiredCount
установлено значение 2, что означает, что он фактически попытается развернуть службу и запустить ее, а не просто определить ее. Если я установлю DesiredCount
на 0, это будет работать нормально.
Image
, определенный в MyECSTaskDefinition
, еще не существует. Я сделал репозиторий как часть этого шаблона, но на самом деле я ничего в него не вставлял. Поэтому, когда MyECSServiceDefinition
попытался развернуть DesiredCount
из 2 экземпляров, он завис, потому что изображение на самом деле не было доступно в репозитории (потому что репозиторий буквально только что был создан в том же шаблоне).
Итак, на данный момент решение состоит в том, чтобы создать стек CloudFormation с DesiredCount
= 0 для Service
, загрузить соответствующий Image
в репозиторий, а затем обновить стек CloudFormation для масштабирования службы. Или, как вариант, иметь отдельный шаблон, который настраивает основную инфраструктуру, такую как репозиторий, загружать в него сборки, а затем иметь отдельный шаблон для запуска, который настраивает сами Services
.
Надеюсь, что это поможет любому, у кого есть эта проблема!
person
Brent Writes Code
schedule
16.06.2017