Amazon bulutformasyonunda EC2 :: Instance veya RDS :: DBInstance'ın yeniden oluşturulmasını zorlamak mümkün mü?


16

Bir EC2 veya RDS örneğinin bulut oluşturma yığınlarını kullanarak yeniden oluşturulmasını zorlamak mümkün mü?

Yığım, kaynağı yok etmenin ve oluşturmanın onu düzelteceği bir noktada takılıp kalıyor, bunun yerine çalışmaya devam etmek için tüm yığını silmem gerekiyordu.

Düzenle:

Bu sorun beni iki kez vurdu. Önce bazı varsayılanlarla bir AWS :: RDS :: Örneği oluşturdum ve sonra bunu "EngineVersion" a indirmeye çalıştım: "5.5". Bunu değiştirmek bazı kesintilerle gerçekleşmesi gerekiyordu, ancak mysql örnekleri 5.6'dan 5.5'e düşürülemez, böylece yığın UPDATE_FAILED durumunda bırakıldı ve RDS'yi kötü bir hile olmadan yeniden oluşturamıyorum.

Diğer olay ben indirilen ve onun "UserData" bir komut dosyası yürüten birkaç "AWS :: EC2 :: Instance" açıkçası Y indirilen komut dosyasını değiştirirseniz ben örnek recrete gerekir ve bunu yapmak için hiçbir yolu oldu. Bir kez daha makineyi yeniden yaratmak için aynı kötü hileyi kullanıyorum.

Kötü hile:

Bir makineden otomatik ölçeklendirme grubu kullanmak yerine, her iki sorunu da özelliklerin kullanılabilirlik bölgesini değiştirerek çözdüm ... ama beni kötü bir tatla bıraktım


Yanıtlamak için daha fazla bilgiye ihtiyacınız var. Örnekleriniz başlangıçta donuyor mu? Bir hizmet yanıt vermiyor mu? Bir EC2 örneğini manuel olarak yeniden oluşturmak istiyorsanız, bir örneğiyle otomatik ölçeklendirme grubu oluşturabilirsiniz. Örneği sonlandırdığınızda bir başkası oluşturulur.
Edwin

açıklığa kavuşturmak için düzenlendi. Ben de burada sordum: forums.aws.amazon.com/thread.jspa?threadID=135295&tstart=0
theist

Bu doğrudan sorunuzu cevaplamıyor, ancak değiştirildiği zaman UserData komut dosyalarını yeniden çalıştırmak için şunlara bakabilirsiniz cfn-hup: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Reed Kraft-Murphy

Yanıtlar:


10

Örneğin, depo destekli EC2 örnekleri, bir numara, kullanıcı veri komut dosyasına sürüm numarası, tarih veya benzeri bir yorum eklemek ve ardından örneğin yeniden oluşturulmasını istediğinizde bunu değiştirmek:

{
    "Resources" : {
        "MyEC2Instance" : {
            "Type" : "AWS::EC2::Instance",
            "Properties" : {
                // ... other properties ...
                "UserData": { 
                    "Fn::Base64" : {
                        "Fn::Join" : [ ":", [
                        "#!/bin/bash\n",
                        "# Version: 1.0\n",
                        // ... rest of user data ...
                    ]]}
            }
        }
    }
}

Herhangi bir değişiklik UserData, örneğin değiştirilmesine neden olur (yani, yeniden oluşturulur). Bununla birlikte, tek değişiklik bir yorum olduğu için kullanıcı veri komut dosyasının davranışı aynı olmalıdır. Bunun EBS destekli örnekler için çalışmadığını unutmayın.

RDS için, geçerli RDS örneğinin bir DB anlık görüntüsünü alabilir , ardından şablonunuzu şu anlık görüntüyü kullanacak şekilde değiştirebilirsiniz DBSnapshotIdentifier:

{
    "Resources" : {
        "MyDB" : {
        "Type" : "AWS::RDS::DBInstance",
        "Properties" : {
            // ... other properties ...
            "DBSnapshotIdentifier": "<db snapshot ID>"
        }
    }    
}

Ne zaman DBSnapshotIdentifierdeğiştirilirse, veritabanı örneği değiştirilir. Anlık görüntülerin kullanılması, anlık görüntünün oluşturulduğu andan itibaren verileri saklamanızı da sağlar. ( Verileri silmek istiyorsanız , boş bir anlık görüntü oluşturabilir ve bunu giriş olarak iletebilirsiniz. Veya tüm CloudFormation yığınını silin ve yeniden oluşturun.)

Daha genel bir yaklaşım, kaynağın mantıksal adını değiştirmektir. Gönderen bir Yığın Şablonunu Değiştirme CloudFormation docs:

Çoğu kaynak için, bir kaynağın mantıksal adını değiştirmek, o kaynağı silmek ve yenisiyle değiştirmekle eşdeğerdir. Yeniden adlandırılan kaynağa bağlı olan diğer kaynakların da güncellenmesi gerekir ve bu kaynakların değiştirilmesine neden olabilir. Diğer kaynaklar, bir güncellemeyi tetiklemek için bir özelliği (yalnızca mantıksal adı değil) güncellemenizi gerektirir.


Tek çözüm "kirli hileler" yapmak gibi görünüyor
Sorduktan

4
Sadece örneğin değiştirildiğine işaret etmek ve böylece EC2 örneği örnek deposu desteklendiğinde UserData çalıştırılır. EBS destekliyse, UserData değişikliği yalnızca örneği yeniden başlatır ve UserData tekrar çalıştırılmaz. Bu durumda bile UserData'yı yeniden çalıştırmak için cfn-hup kullanabilirsiniz, ancak örnek aynı kalır.
Kaitsu

@ Kaitsu: Teşekkürler, bu çok değerli bir açıklama. Cevabımı buna göre güncelledim.
markusk

@Kaitsu, ancak komut dosyasını el ile yeniden çalıştırırsanız (/ var / lib / cloud / instance / komut dosyaları / part-001'de bulunur), komut dosyasının aynı komutları birden çok kez çalıştırmak için defansif olduğundan emin olmanız gerekir :(
c24w

1

Bir AutoScalingGroup içine koyarsanız, AutoScalingGroup min / max / default değerini 0 olarak düzenleyebilir, ardından eski örneği yok etmeye başlar başlamaz, min / max / default değerini 1/1/1 ve presto: yeni örnek.


0

EC2'niz bir AutoScalingGroup'taysa, AutoScalingGroupNameiçinde sürüm numarası bulunan özelliği ayarlayabilirsiniz .

Bu sürüm numarasını her değiştirdiğinizde: 1. yeni bir otomatik ölçeklendirme grubu oluşturur ve istediğiniz örnekleri döndürür 2. eski otomatik ölçeklendirme grubundaki örnekleri öldürür ve siler

İşte yığınımdan bir kod parçası, burada çok sayıda EC2 makinesini yeni yazılımı S3'ten yeniden oluşturmaya ve otomatik olarak çekmeye zorlamak için kullanıyorum.

AutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
        AutoScalingGroupName: !Sub "${StackName}-${ServiceName}-${ServiceVersion}"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.