5

Django web sitesi tarafından kullanılmak üzere özel bir Docker kabını takarken bir Django sunucusunu normal Elastik Beanstalk yöntemiyle çalıştırmak istediğimiz bir durum var.Kaynak bağlamadan önce EC2 örneğindeki Elastic Beanstalk komutları nasıl çalıştırılır

packages: 
    yum: 
    ecs-init: [] 

files: 
    /etc/ecs/ecs.config: 
    mode: "000644" 
    owner/group: root 
    content: ECS_CLUSTER=${Ref: MyCluster} 

commands: 
    01_start_docker: sudo service docker start 
    02_start_ecs: sudo start ecs 

Resources: 
    MyCluster: 
    Type: AWS::ECS::Cluster 
    MyService: 
    Type: AWS::ECS::Service 
    Properties: 
     Cluster: ${Ref: MyCluster} 
     DesiredCount: 1 
     TaskDefinition: ${Ref: MyTask} 
    MyTask: 
    Type: AWS::ECS::TaskDefinition 
    Properties: 
     ContainerDefinitions: 
     - ... 

sorun ECS hizmet Elastik Beanstalk sağlanan EC2 örneği küme ile kayıtlı önce başlatmak için çalışıyor olmasıdır: Şimdiye kadar, temelde aşağıdaki .ebextensions yapılandırma dosyası var. Sonuç olarak, Elastic Beanstalk için dağıtım askıda kalıyor. EC2 örneğine el ile SSH'ledim ve el ile ecs-init'u yüklediysem, ecs.config'u oluşturdu ve komutları çalıştırdı, hizmet oluşturmaya devam ediyor ve EB ortamı başarıyla oluşturuluyor.

Hizmetin, EB'nin otomatik ölçeklendirme grubu tarafından oluşturulan EC2 örneğinin kümeye kaydedilinceye kadar beklemesinin bir yolu var mı?

fazla bağlam:

  • Biz Django sunucu localhost ile Docker kabı erişebilmesini istiyoruz, ama özellikle Docker konteyner ev sahipliği yapmaya Kaynakları bir EC2 örneğini dahil karşı olmaz Otomatik ölçeklendirilmiş EC2 örneklerinde belirtmek kolaysa
  • Çoklu yerleştirme kapsayıcı kapsayıcı yaklaşımını denedik, ancak bu yöntem EB'nin kullanımına daha yakın görünüyor (web sunucu dosyalarını bir docker yapmak yerine doğrudan ortamın çalışması için görüntü)

cevap

0

Bunu daha açık bir şekilde düşündükten sonra çözdüm.

Elastic Beanstalk'ın ECS kümesine (AutoScaling aracılığıyla) bağlandığı her EC2 örneğini kaydetmek mantıklı değildir. Sadece ECS görevinin bir örneği olmalıdır. Bu nedenle, ECS kümesine (servisi artık EC2 örneğine bağlı olan) bağlanan ayrı bir EC2 örneği oluşturmak gereklidir.

1

Aşağıdakine benzer bir şey deneyin. EB sadece CloudFormation yığınları olarak sizinkileri bulmak için awseb ile başlayan yığınlara bakar. Ardından EB uygulamanız, uzantılarında belirtmediğiniz önceden tanımlanmış EB kaynakları tarafından kullanılan adları görmek için dağıtırken CF Kaynaklarına bakın. İlk örneklerin lansmanı ile ilgili görünen AWSEBInstanceLaunchWaitCondition'ı görüyorum.

Resources: 
    MyService: 
    Type: AWS::ECS::Service 
    Properties: 
     Cluster: ${Ref: MyCluster} 
     DesiredCount: 1 
     TaskDefinition: ${Ref: MyTask} 
    DependsOn: AWSEBInstanceLaunchWaitCondition 
+0

Maalesef, bekleyiş koşulunun EC2 örneğinin başlatılması için olduğunu düşünüyorum. Komutların kancaları çalışana kadar bekleyebilecek bir bekleme şartına ihtiyacım var. –

+0

Muhtemelen kendi CreationPolicy kaynağınızı bağımlılık (veya belki de bir WaitCondition) olarak eklemeniz ve cfn-sinyalini 03 komutu olarak çağırmanız gerekecektir. Http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide /aws-attribute-creationpolicy.html – NHol