Aracılığıyla paylaş


Kod olarak altyapı

İpucu

Bu içerik, .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Azure için Buluta Özel .NET Uygulamaları Tasarlama adlı e-Kitap'tan bir alıntıdır.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Buluta özel sistemler hız ve çeviklik elde etmek için mikro hizmetleri, kapsayıcıları ve modern sistem tasarımını benimser. Tutarlı ve kaliteli kod sağlamak için otomatik derleme ve yayın aşamaları sağlar. Ama bu hikayenin sadece bir parçası. Bu sistemlerin üzerinde çalıştığı bulut ortamlarını nasıl sağlarsınız?

Modern buluta özel uygulamalar, Kod Olarak Altyapı veya IaC'nin yaygın olarak kabul edilen uygulamasını benimser. IaC ile platform sağlamayı otomatikleştirirsiniz. Temel olarak DevOps uygulamalarınıza test ve sürüm oluşturma gibi yazılım mühendisliği uygulamaları uygularsınız. Altyapınız ve dağıtımlarınız otomatik, tutarlı ve yinelenebilir. El ile yapılan dağıtımların geleneksel modelini sürekli teslim otomatik hale getirirken Kod Olarak Altyapı (IaC) de uygulama ortamlarının yönetilme şeklini geliştiriyor.

Azure Resource Manager (ARM), Terraform ve Azure Komut Satırı Arabirimi (CLI) gibi araçlar, ihtiyacınız olan bulut altyapısını bildirimli olarak betik olarak yazmanızı sağlar.

Azure Resource Manager şablonları

ARM, Azure Resource Manager'ın kısaltmasıdır. Azure'da yerleşik olarak sunulan ve API hizmeti olarak kullanıma sunulan bir API sağlama altyapısıdır. ARM, Azure kaynak grubunda yer alan kaynakları tek ve eşgüdümlü bir işlemle dağıtmanızı, güncelleştirmenizi, silmenizi ve yönetmenizi sağlar. Altyapıya ihtiyacınız olan kaynakları ve bunların yapılandırmasını belirten JSON tabanlı bir şablon sağlarsınız. ARM, dağıtımı bağımlılıklara göre doğru sırada otomatik olarak düzenler. Motor, bir kez daha etkili olmasını sağlar. aynı yapılandırmaya sahip istenen bir kaynak zaten varsa, sağlama yoksayılır.

Azure Resource Manager şablonları, Azure'da çeşitli kaynakları tanımlamaya yönelik JSON tabanlı bir dildir. Temel şema Şekil 10-14'e benzer.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "",
  "apiProfile": "",
  "parameters": {  },
  "variables": {  },
  "functions": [  ],
  "resources": [  ],
  "outputs": {  }
}

Şekil 10-14 - Resource Manager şablonunun şeması

Bu şablonda, kaynaklar bölümünde aşağıdaki gibi bir depolama kapsayıcısı tanımlayabilirsiniz:

"resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "apiVersion": "2018-07-01",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],

Şekil 10-15 - Resource Manager şablonunda tanımlanan depolama hesabı örneği

Arm şablonu dinamik ortam ve yapılandırma bilgileriyle parametrelendirilebilir. Bunun yapılması geliştirme, Soru-Cevap veya üretim gibi farklı ortamları tanımlamak için yeniden kullanılmasını sağlar. Normalde şablon, tek bir Azure kaynak grubu içindeki tüm kaynakları oluşturur. Gerekirse tek bir Resource Manager şablonunda birden çok kaynak grubu tanımlamak mümkündür. Kaynak grubunun kendisini silerek bir ortamdaki tüm kaynakları silebilirsiniz. Maliyet analizi, kaynak grubu düzeyinde de çalıştırılabilir ve her ortamın ne kadar maliyete mal olduğunu hızlı bir şekilde hesaplayabilir.

GitHub'daki Azure Hızlı Başlangıç Şablonları projesinde arm şablonlarının birçok örneği vardır. Yeni şablon oluşturma veya mevcut şablonu değiştirme sürecini hızlandırmaya yardımcı olabilir.

Resource Manager şablonları birçok şekilde çalıştırılabilir. Belki de en basit yol bunları Azure portalına yapıştırmaktır. Deneysel dağıtımlar için bu yöntem hızlı olabilir. Azure DevOps'ta derleme veya yayın işleminin bir parçası olarak da çalıştırılabilirler. Şablonları çalıştırmak için Azure'a bağlantılardan yararlanacak görevler vardır. Resource Manager şablonlarındaki değişiklikler artımlı olarak uygulanır; başka bir deyişle, yeni bir kaynak eklemek için yalnızca şablona eklenmesi gerekir. Araç, geçerli kaynaklarla şablonda tanımlanan kaynaklar arasındaki farkları mutabık hale getirir. Daha sonra kaynaklar, şablonda tanımlananlarla eşleşecek şekilde oluşturulur veya değiştirilir.

Terraform

Buluta özel uygulamalar genellikle olarak cloud agnosticoluşturulur. Böyle olması, uygulamanın belirli bir bulut satıcısıyla sıkı bir şekilde bağlı olmadığı ve herhangi bir genel buluta dağıtılabildiği anlamına gelir.

Terraform , azure, Google Cloud Platform, AWS ve AliCloud gibi tüm büyük bulut oynatıcılarda bulutta yerel uygulamalar sağlayabilen ticari bir şablon oluşturma aracıdır. Şablon tanım dili olarak JSON kullanmak yerine biraz daha terse HCL'sini (Hashicorp Yapılandırma Dili) kullanır.

Şekil 10-16'da, önceki Resource Manager şablonuyla aynı işlemi gösteren örnek terraform dosyası (Şekil 10-15) gösterilmiştir:

provider "azurerm" {
  version = "=1.28.0"
}

resource "azurerm_resource_group" "testrg" {
  name     = "production"
  location = "West US"
}

resource "azurerm_storage_account" "testsa" {
  name                     = "${var.storageAccountName}"
  resource_group_name      = "${azurerm_resource_group.testrg.name}"
  location                 = "${var.region}"
  account_tier             = "${var.tier}"
  account_replication_type = "${var.replicationType}"

}

Şekil 10-16 - Resource Manager şablonu örneği

Terraform, sorun şablonları için sezgisel hata iletileri de sağlar. Şablon hatalarını erken yakalamak için derleme aşamasında kullanılabilecek kullanışlı bir doğrulama görevi de vardır.

Resource Manager şablonlarında olduğu gibi, Terraform şablonlarını dağıtmak için komut satırı araçları da kullanılabilir. Azure Pipelines'da Terraform şablonlarını doğrulayıp uygulayabilen topluluk tarafından oluşturulmuş görevler de vardır.

Bazen Terraform ve ARM şablonları, yeni oluşturulan bir veritabanına bağlantı dizesi gibi anlamlı değerler verir. Bu bilgiler derleme işlem hattında yakalanabilir ve sonraki görevlerde kullanılabilir.

Azure CLI Betikleri ve Görevleri

Son olarak, bulut altyapınızı bildirimli olarak betik olarak kullanmak için Azure CLI'yi kullanabilirsiniz. Neredeyse tüm Azure kaynaklarını sağlamak ve yapılandırmak için Azure CLI betikleri oluşturulabilir, bulunabilir ve paylaşılabilir. CLI, nazik bir öğrenme eğrisi ile kullanımı kolaydır. Betikler PowerShell veya Bash içinde yürütülür. Özellikle ARM şablonlarıyla karşılaştırıldığında hata ayıklaması da kolaydır.

Altyapınızı yıkıp yeniden dağıtmanız gerektiğinde Azure CLI betikleri iyi çalışır. Mevcut bir ortamı güncelleştirmek karmaşık olabilir. Birçok CLI komutu bir kez etkili değildir. Bu, kaynak zaten mevcut olsa bile her çalıştırıldığında kaynağı yeniden oluşturacakları anlamına gelir. Oluşturmadan önce her kaynağın varlığını denetleyen kod eklemek her zaman mümkündür. Ancak bunu yaptığınızda betiğiniz şişirilebilir ve yönetilmesi zor olabilir.

Bu betikler Azure DevOps işlem hatlarına olarak Azure CLI tasksda eklenebilir. İşlem hattının yürütülmesi betiği çağırır.

Şekil 10-17'de Azure CLI sürümünü ve aboneliğin ayrıntılarını listeleyen bir YAML kod parçacığı gösterilmektedir. Azure CLI komutlarının satır içi betikte nasıl yer aldığına dikkat edin.

- task: AzureCLI@2
  displayName: Azure CLI
  inputs:
    azureSubscription: <Name of the Azure Resource Manager service connection>
    scriptType: ps
    scriptLocation: inlineScript
    inlineScript: |
      az --version
      az account show

Şekil 10-17 - Azure CLI betiği

Kod Olarak Altyapı Nedir? makalesinde Yazar Sam Guckenheimer, "IaC'yi uygulayan ekipler kararlı ortamları hızlı ve uygun ölçekte sunabilir. Ekipler, ortamların el ile yapılandırılmasını önler ve kod aracılığıyla ortamlarının istenen durumunu temsil ederek tutarlılığı zorlar. IaC ile altyapı dağıtımları tekrarlanabilir ve yapılandırma kaymasından ve bağımlılıkların eksik kalmasından kaynaklanan çalışma zamanı sorunları önlenir. DevOps ekipleri, uygulamaları ve destekleyici altyapılarını hızlı, güvenilir ve uygun ölçekte sunmak için birleşik bir dizi uygulama ve araçla birlikte çalışabilir."