Share via


Kod olarak altyapı kullanma önerileri

Bu Azure Well-Architected Framework 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 yapılandırmalarını hazırlayın. Diğer kodlarda olduğu 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 dağıtımlara güvenmek, iş yükünüzün tutarsız yapılandırmalar ve güvenli olmayan tasarım riskiyle karşı karşıya bırakır.

Tanımlar

Süre Tanım
Bildirim temelli araçlar Bir dağıtımın son durumunu tanımlayan ve kaynakların tanımlı 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ınız aracılığıyla dağıtmanız gerekir. Bu ilkelerin benimsenmesi tüm IaC dağıtımları için işlemlerde tutarlılığı zorunlu tutar, ortamlarınızda yapılandırma kayması riskini en aza indirir ve ortamlarınız arasında altyapı tutarlılığını 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 temelli tercih edin. Bildirim temelli 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 temelli 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.

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ımlarını kolay ve kolay hale getirmek için araçlar sağlar. Kendi çözümlerinizi geliştirmek yerine bu araçlardan ve Terraform gibi yerel tümleştirmeye sahip 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 güncelleştirilerek platform geliştikçe daha kullanışlı hale getiriliyor.

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ç 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.

Belirli görevler ve altyapı türleri için doğru araçları kullanın. Bir altyapı yaşam döngüsünde dağıtımların ötesinde birden çok görev yer alır. Yapılandırmanın uygulanması ve korunması 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 bulunurken Flux, Kubernetes kümelerinde DSC'yi yönetmek için iyi bir araçtır. Hizmet olarak platform (PaaS) hizmetleri, yapılandırma yönetimi için IaC aracılığıyla işlenebilen farklı araçlar (Azure Uygulama Yapılandırması gibi) 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 geliştirme ve yönetim uygulamalarınızla tümleştirilebilen ve ihtiyaç duyduğunuz işleri yerine getiren araçları standartlaştırın.

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ümesini 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.

Modüllerin kullanımını strateji haline getirin ve standartlaştırın. Parametreler ve değişkenler gibi modüller de altyapı dağıtımlarınızı yinelenebilir hale getirir. Bununla birlikte, 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. Buna ek olarak, yeni modüller geliştirme konusunda da judicious olun. Uygun olduğunda, örneğin duyarsız senaryolarda bakımlı açık kaynak modülleri kullanın.

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 sürdürmeyle ilgili adımlar olabilir. Bu adımların mümkün olduğunca en aza indirildiğinden 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ıramayacakları 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 anımsamazsa bu kaynaklar yalnız bırakılmış duruma gelebilir. Bu senaryoları işlemek için, yalnız bırakılmış kaynakları taramak ve silmek için bir stratejiyi standartlaştırabilirsiniz. Ş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.

Diğer IaC stratejileri

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

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 bir 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ı, yapılandırma güncelleştirmelerinden daha karmaşık değişikliklere nadiren ihtiyaç duyar, bu nedenle bu kaynakların düşük dokunmatik bir IaC işlem hattını 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 kodunuzla aynı şekilde davranı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ının tümü aynı olmalıdır. Ayrıca IaC varlıklarınızı uygulama kodu varlıklarınızla birlikte birlikte konumlandırabilirsiniz. Bunu yapmak, her dağıtımda aynı işlemlerin izlenmesine yardımcı olur ve gerekli uygulama kodundan önce altyapıyı yanlışlıkla dağıtma (veya tam tersi) gibi sorunlardan kaçınmanıza yardımcı olur.

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 kazanmak için kitaplıkları, şablonları ve modülleri yeniden kullanmanıza yardımcı olur. Benzer şekilde, IaC araçları kuruluş genelinde standartlaştırılmalı ve bunu yapmak pratiktir.

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ınlanması 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ğlamaya yönelik öneriler.

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.

Değiştirilebilir ve sabit altyapı karşılaştırması

Değiştirilebilir ve sabit altyapı dağıtımı 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ğıtabildiğ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çenek olabilir. Bu durumda, büyük olasılıkla altyapıyı yerinde güncelleştirebilirsiniz.

Dikkat edilmesi gerekenler

Artan uzmanlık: Bazı durumlarda, iş yükü ekibinize yeni diller tanıtmak öğrenme eğrisiyle birlikte gelir ve satıcının kilitlenmesi bunu kötü bir seçim yapabilir. 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ı gereklidir. Teknik borcunuzu düzgün bir şekilde izleyin 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 portaldan altyapı dağıtmak için kodlama süresi 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ığı artırıldı: Daha fazla modül ve parametre kullanmak, sistemde hata ayıklama ve belgeleme için gereken süreyi 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 kolayca tümleştirilebilir veya CI/CD işlem hatlarını GitHub Actions.

Terraform , Azure'da tam olarak desteklenen bir diğer bildirim temelli 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ı keşfetmek 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 Bkz. Azure Sanal Masaüstü giriş bölgesi hızlandırıcı mimarisi ve ilişkili başvuru uygulaması.

Operasyonel Mükemmellik denetim listesi

Önerilerin tamamına bakın.