Altyapıyı kod olarak kullanma önerileri

Bu Azure İyi Tasarlanmış Çerçeve operasyonel mükemmellik denetim listesi önerisi için geçerlidir:

OE:05 Standartlaştırılmış kod olarak altyapı (IaC) yaklaşımını kullanarak kaynakları ve bunların yapılandırmalarını hazırlayın. Diğer kodlar gibi tutarlı stiller, uygun modülerleştirme ve kalite güvencesi ile IaC tasarlayın. Mümkün olduğunda bildirim temelli bir yaklaşımı tercih edin.

Bu kılavuzda, altyapı dağıtımlarınız için IaC'yi standart olarak kullanma önerileri açıklanmaktadır. IaC kullanarak altyapı dağıtımlarınızı ve yönetiminizi mevcut yazılım geliştirme uygulamalarınızla tümleştirebilirsiniz. İş yükünüzün tüm bileşenleri için geliştirme ve dağıtım için tutarlı ve standart bir metodoloji sağlar. El ile yapılan dağıtımlara güvenmek, iş yükünüzü tutarsız yapılandırmalar ve güvenli olmayabilecek tasarım riskine sokar.

Tanımlar

Süre Tanım
Bildirim temelli araçlar Bir dağıtımın son durumunu tanımlayan ve kaynakların tanımlanan son durumla eşleşecek şekilde nasıl dağıtılacağını belirlemek için sisteme dayanan bir araç kategorisi.
Değişmez altyapı Her dağıtımda yeni yapılandırmayı çalıştıran yeni altyapıyla değiştirilmesi amaçlanan bir altyapı. Yerinde değiştirilmemelidir.
Kesinlik temelli araçlar İstenen son duruma neden olan yürütme adımlarını listeleyen bir araç kategorisi.
Modül Karmaşık dağıtımları basitleştirmek için kaynak gruplarını bölmeye yönelik bir soyutlama birimi.
Değiştirilebilir altyapı Yerinde değiştirilmesi amaçlanan bir altyapı. Dağıtımlar, altyapının yapılandırmasını yeni altyapıyla değiştirmek yerine değiştirir.

Temel tasarım stratejileri

Tedarik zincirinde ve araçları ve işlemleri standartlaştırma kılavuzlarında açıklandığı gibi, altyapı değişikliklerini (yapılandırma değişiklikleri dahil) yalnızca kod aracılığıyla dağıtmaya yönelik katı bir ilkeniz olmalıdır. IaC'yi sürekli tümleştirme ve sürekli teslim (CI/CD) işlem hatları aracılığıyla dağıtmanız gerekir. Bu ilkelerin benimsenmesi tüm IaC dağıtımları için işlemlerde tutarlılığı zorlar, ortamlarınız arasında yapılandırma kayması riskini en aza indirir ve ortamlarınız arasında altyapı tutarlılığı sağlar. Ayrıca, IaC geliştirme ve dağıtım araçlarınızı ve işlemlerinizi bir stil kılavuzunda standartlaştırmanız gerekir. Stil kılavuzunuz için öneriler şunlardır:

Kesinlik temelli araçlar yerine bildirim temelliyi tercih edin

Bildirim araçları ve ilişkili dosyaları, IaC'yi dağıtmak ve yönetmek için kesinlik temelli araçlardan daha iyi bir genel seçimdir. Bildirim araçları, tanım dosyaları için daha basit bir söz dizimi kullanır ve dağıtım tamamlandıktan sonra ortamın yalnızca istenen durumunu tanımlar. Kesinlik temelli araçlar, istenen son duruma ulaşmak için gereken adımları tanımlamanıza bağlıdır, bu nedenle dosyalar bildirim temelli dosyalardan çok daha karmaşık olabilir. Bildirim temelli tanım dosyaları, zaman içinde tahakkuk eden dağıtım betikleri gibi kesinlik temelli kodu korumanın teknik borcunu azaltmaya da yardımcı olur.

Yerel ve endüstri standardı araçları kullanma

Bulut platformunuzun yerel araçlarını ve platformla yerel olarak tümleşen endüstride kanıtlanmış diğer araçları kullanın. Bulut platformunuz, IaC dağıtımını kolay ve kolay hale getirmek için araçlar sağlar. Kendi çözümlerinizi geliştirmek yerine terraform gibi yerel tümleştirmeye sahip bu araçlardan ve diğer üçüncü taraf araçlardan yararlanın. Yerel araçlar platform tarafından desteklenir ve gereksinimlerinizin çoğu için yerleşik işlevler içerir. Platform sağlayıcısı tarafından sürekli olarak güncelleştirilerek platform geliştikçe daha kullanışlı hale getirirler.

Not

Bulut sağlayıcıları ve üçüncü taraf geliştiriciler araçlarını ve API'lerini güncelleştirdikçe iş yükünüzdeki en son sürümü kullanırken tahmin edilmeyen sorunlar riskiyle karşılaşabileceğinizi unutmayın. Araçları ve API'leri benimsemeden önce yeni sürümlerini kapsamlı bir şekilde test ettiğinizden emin olun. Benzer şekilde, dağıtım kodunuzda bir araçta veya API'de çağrı yaparken 'en son' bayrağını kullanmaktan kaçının. İş yükünüz için bilinen en son iyi sürümü çağırma konusunda bilinçli olun.

Görev için doğru aracı kullanma

Belirli görevler ve altyapı türleri için doğru araçları kullanın. Dağıtımların ötesinde birden çok görev bir altyapı yaşam döngüsüne dahil edilir. Yapılandırmanın uygulanması ve sürdürülmesi gerekir. Örneğin, Bicep gibi betik dağıtımlarında kullandığınız araç her yönetim işlemi için en iyi araç olmayabilir.

Benzer şekilde, farklı altyapı türleri için istenen durum yapılandırmasını (DSC) uygulamak için farklı araçlar gerekebilir. Örneğin, VM'ler için DSC'yi yönetmek için Ansible gibi belirli araçlar vardır ancak Flux, Kubernetes kümelerinde DSC'yi yönetmek için iyi bir araçtır. Hizmet olarak platform (PaaS) hizmetleri, IaC aracılığıyla işlenebilen yapılandırma yönetimi (Azure Uygulaması Yapılandırması gibi) için farklı araçlar sağlayabilir. Hizmet olarak yazılım (SaaS) hizmetleri platform tarafından daha sıkı denetlendiğinden daha sınırlı olabilir.

IaC uygulamalarınız kapsamındaki tüm görevleri ve altyapı türlerini düşünün ve yapmanız gereken işleri yerine getiren ve geliştirme ve yönetim uygulamalarınızla tümleştirilebilen araçları standartlaştırın.

Birden çok ortamı destekleme

Betikleriniz ve şablonlarınız, çeşitli ortamları kolayca dağıtacak kadar esnek olmalıdır. Kod yükseltme yığınınızdaki herhangi bir ortamı dağıtmak üzere değiştirilebilen standart bir kaynak kümesi dağıtmak için parametreleri, değişkenleri ve yapılandırma dosyalarını kullanın. Kaynak boyutu, sayı, ad, dağıtılacak konumlar ve bazı yapılandırma ayarları gibi soyut ayarlar. Ancak çok fazla soyutlamamaya dikkat edin. İş yükü yaşam döngüsü boyunca değiştirilmeyebilecek veya nadiren değişebilecek bir parametre veya değişkenle soyutlanabilir ayarlar vardır. Soyutlamamaları gerekir.

Not

Farklı ortamlar için farklı IaC varlıkları kullanmaktan kaçının. Örneğin üretim ve test ortamları için farklı Terraform dosyalarınız olmamalıdır. Tüm ortamlar tek bir dosya kullanmalıdır. Gerektiğinde farklı ortamlara dağıtmak için bu dosyayı işleyebilirsiniz.

İşlevleri kapsüllerken doğru dengeyi kullanma

Modüllerin kullanımını stratejileştirin ve standartlaştırın. Parametreler ve değişkenler gibi modüller de altyapı dağıtımlarınızı yinelenebilir hale getirir. Ancak bunları nasıl kullandığınız konusunda düşünceli olun. Standartlaştırılmış soyutlama stratejisi, modüllerin belirli, üzerinde anlaşmaya varılan hedefleri karşılayacak şekilde derlenmesini sağlamaya yardımcı olur. Karmaşık yapılandırmaları veya kaynak bileşimlerini kapsüllemek için modülleri kullanın. Kaynağın yalnızca varsayılan yapılandırmasını kullanıyorsanız modüllerden kaçının. Ayrıca, yeni modüller geliştirme konusunda da usta olun. Uygun olduğunda, örneğin duyarsız senaryolarda bakımlı açık kaynak modülleri kullanın.

Belge el ile uygulanan adımlar

El ile uygulanan adımlar için belge standartları. Ortamınıza özgü olan ve el ile müdahale gerektiren altyapıyı dağıtma ve korumayla ilgili adımlar olabilir. Bu adımların mümkün olduğunca simge durumuna küçültülmüş ve açıkça belgelenmiş olduğundan emin olun. Stil kılavuzunuzda ve standart çalışma yordamlarınızda, görevlerin güvenli ve tutarlı bir şekilde gerçekleştirildiğinden emin olmak için el ile gerçekleştirilen adımları standartlaştırabilirsiniz.

Yalnız bırakılmış kaynakları işlemek için belge standartları. Yapılandırma yönetimi için kullandığınız araçlara ve bunların sınırlamalarına bağlı olarak, belirli bir kaynağın iş yükünüz tarafından artık gerekli olmadığı ve IaC araçlarınızın kaynağı otomatik olarak kaldırabildiği zamanlar olabilir. Örneğin, bazı işlevler için VM'lerden PaaS hizmetine geçtiğinizi ve IaC araçlarının kullanımdan kaldırılacak kaynakları kaldırma mantığı olmadığını varsayalım. İş yükü ekibi el ile silmeyi hatırlamıyorsa bu kaynaklar yalnız bırakılmış hale gelebilir. Bu senaryoları işlemek için, yalnız bırakılmış kaynakları taramak ve silmek için bir stratejiyi standart hale getirin. Şablonlarınızın güncel olduğundan emin olmak için de düşünmeniz gerekir. Bu gibi durumlarda planlamanız gerekenleri anlamak için IaC araçlarınızın sınırlamalarını araştırın.

İş yükünüz için IaC kullanmak için geçerli olan aşağıdaki önerileri göz önünde bulundurun.

IaC işlem hatları için katmanlı bir yaklaşım kullanma

IaC işlem hatlarınızı iş yükü yığını içinde hizalamak için katmanlı bir yaklaşım kullanın. IaC işlem hatlarınızı katmanlara ayırmak karmaşık ortamları yönetmenize yardımcı olur. Onlarca veya yüzlerce kaynağı monolitik paket olarak dağıtmak verimsizdir ve bozuk bağımlılıklar gibi birden çok soruna neden olabilir. Dağıtım yaşam döngüleri veya işlevsellik gibi faktörler yakından eşleşen kaynaklardan oluşan katmanlarla hizalanmış birden çok işlem hattının kullanılması, IaC dağıtımlarının yönetimini kolaylaştırır.

Ağ kaynakları gibi temel altyapının yapılandırma güncelleştirmelerinden daha karmaşık değişikliklere nadiren ihtiyacı vardır, bu nedenle bu kaynakların düşük dokunmalı bir IaC işlem hattı oluşturması gerekir. İş yükünüzün karmaşıklık düzeyine bağlı olarak kaynaklar için bir veya daha fazla orta dokunmatik ve yüksek dokunmatik IaC işlem hattınız olabilir. Örnek olarak Kubernetes tabanlı bir uygulama yığını kullanıldığında, bir orta dokunma katmanı kümelerden, depolama kaynaklarından ve veritabanı hizmetlerinden oluşturulmuş olabilir. Yüksek dokunmatik katmanlar, sürekli teslim modunda çok sık güncelleştirilen uygulama kapsayıcılarından oluşur.

IaC ve uygulama kodunu aynı şekilde ele alın

IaC yapıtlarınızı uygulama kodu yapıtlarınızla aynı şekilde işlemek, kodu tüm işlem hatlarında yönetmek için aynı titizliği uygulamanıza yardımcı olur. Ayrıca, IaC geliştirme ve dağıtım uygulamaları uygulama uygulamalarını yansıtmalıdır. Sürüm denetimi, dallanma, kod yükseltme ve kalite standartları aynı olmalıdır. Ayrıca IaC varlıklarınızı uygulama kodu varlıklarınızla birlikte birlikte konumlandırmayı da göz önünde bulundurun. Bunu yapmak, her dağıtımda aynı işlemlerin izlenmesine yardımcı olur ve gerekli uygulama kodundan önce yanlışlıkla altyapı dağıtma gibi sorunlardan kaçınmanıza yardımcı olur(veya tam tersi).

Merkezi standartları ve kaynakları kullanma

Standartlaştırma ve yeniden kullanılabilirlik için kuruluşunuzdaki diğer ekiplerle işbirliği yapın. Büyük kuruluşlarda bazen iş yükleri geliştiren ve destekleyen birden çok ekip olabilir. Standartlarda anlaşmak için ekipler arasında işbirliği yapmak, iş yükü ortamlarında verimlilik ve tutarlılık elde etmek için kitaplıkları, şablonları ve modülleri yeniden kullanmanıza yardımcı olur. Benzer şekilde, IaC araçları da kuruluş genelinde standartlaştırılmalı ve bunu yapmanın pratik olduğu ölçüde yapılmalıdır.

IaC kodunda güvenliği zorunlu kılma

Güvenliğin dağıtım işlem hattının bir parçası olduğundan emin olmak için "kod olarak güvenlik" ilkesini uygulayın. IaC geliştirme sürecinin bir parçası olarak güvenlik açığı tarama ve yapılandırma sağlamlaştırmayı dahil edin. IaC depolarınızı kullanıma sunulan anahtarlar ve gizli diziler için tarayın. IaC kullanmanın avantajlarından biri, güvenlik odaklı ekip üyelerinin dağıtımdan önce kodu gözden geçirerek güvenlik tarafından yayımlanması onaylanan yapılandırmanın aslında üretime dağıtılan yapılandırma olduğundan emin olmasıdır. Ayrıntılı yönergeler için bkz . Geliştirme yaşam döngüsünün güvenliğini sağlama önerileri.

Rutin ve rutin olmayan etkinlikleri test edin. Dağıtım geri alma işlemleri dahil olmak üzere dağıtımları, yapılandırma güncelleştirmelerini ve kurtarma işlemlerini test edin.

Sabit dağıtım modelini benimseme

Sabit ve sabit altyapıyı dağıtmak arasındaki seçim birkaç faktöre bağlıdır. İş yükünüz iş açısından kritikse sabit altyapıyı kullanmak en iyisidir. Benzer şekilde, dağıtım damgalarını temel alan olgun bir altyapı tasarımınız varsa, uygulama kodunu ve yeni altyapıyı güvenilir bir şekilde dağıtabileceğiniz için sabit altyapı kullanmak mantıklı olabilir. Buna karşılık, güvenli dağıtım uygulamalarınız azaltılabilir dağıtım sorunları oluştuğunda dağıtımlarla ileriye doğru ilerlemenin tercih edilen seçenek olduğunu belirlerse, değiştirilebilir altyapı kullanmak daha iyi bir seçim olabilir. Bu durumda, büyük olasılıkla altyapıyı yerinde güncelleştirebilirsiniz.

Dikkat edilmesi gereken noktalar

Daha fazla uzmanlık: Bazı durumlarda, iş yükü ekibinize yeni diller kazandırma, öğrenme eğrisiyle birlikte gelir ve satıcıya kilitlenme, bunu kötü bir seçim haline getirebilir. Ekip üyelerinizi eğitin ve bulut sağlayıcılarınızın araç desteğine göre doğru aracı analiz edin.

Daha fazla bakım çalışması: IaC uygulamanızı güncel ve güvenli tutmak için kod tabanı ve araç bakımı gerekir. Teknik borcunuzu düzgün bir şekilde takip edin ve borcu azaltmanın ödüllendirildiği bir kültürü teşvik edin.

Yapılandırma değişiklikleri için daha fazla süre: Komut satırı yönergelerini kullanarak veya doğrudan bir portaldan altyapı dağıtmak için kodlama zamanı ve/veya test yapıtları gerekmez. Kod incelemeleri ve kalite güvencesi uygulamaları gibi önerilen uygulamaları izleyerek dağıtım süresini en aza indirin.

Modülerleştirmenin karmaşıklığını artırma: Daha fazla modül ve parametreleme kullanmak, sistemde hata ayıklama ve belgeleme süresini artırır ve bir soyutlama katmanı ekler. Karmaşıklığı azaltmak ve fazla mühendislikten kaçınmak için modülerleştirmenin kullanımını dengeleyin.

Azure kolaylaştırma

Azure Resource Manager şablonları (ARM şablonları) ve Bicep , bildirim temelli söz dizimi kullanarak altyapıyı dağıtmak için Azure'a özel araçlardır. ARM şablonları JSON dilinde yazılırken, Bicep etki alanına özgü bir dildir. Her ikisi de Azure işlem hatlarıyla veya GitHub Actions CI/CD işlem hatlarıyla kolayca tümleştirilebilir.

Terraform , Azure'da tam olarak desteklenen bildirim temelli bir IaC aracıdır. Altyapıyı dağıtmak ve yönetmek için kullanılabilir ve CI/CD işlem hattınızla tümleştirilebilir.

IaC'deki yanlış yapılandırmaları bulmak için Bulut için Microsoft Defender kullanabilirsiniz.

Örnek

Sağlanan Resource Manager, Bicep veya Terraform dosyaları aracılığıyla dağıtılabilir bir Sanal Masaüstü uygulaması örneği için Azure Sanal Masaüstü giriş bölgesi hızlandırıcı mimarisine ve ilişkili başvuru uygulamasına bakın.

Operasyonel Mükemmellik denetim listesi

Öneriler kümesinin tamamına bakın.