Skip to main content

69 posts tagged with "Azure"

View All Tags

· 5 min read
Hasan Gural

Uzun zamandır yazmak istediğim yazının ilk adımını atmış bulunuyorum. Powershell ile çok fazla zamanı geçiyorum fakat deneyimimi aktaracak derli toplu bir yazı olmadığını farkındayım bu yüzden Level 100 bir seri ile olan Powershell ile Diziler ( Array ) konusuna değineceğim. Konuya başlamadan önce kesinlikle bir uyarı yapmam gerekiyor, bunun en başı temel programlama bilgisinde olan değişken nedir, nasıl atanır gibi konulara göz gezdirmeniz olacaktır. Bu yazı hiçbir şekilde Değişken ( Variable ) gibi detayları kapsamıyor. Sizin bildiğinizi en azından Powershell içerisinde değişken nasıl oluşturulur, nasıl atanr gibi konulara ucundan hâkim olmanız yeterlidir.

Powershell Diziler Nedir, Ne için kullanmayalıyız?

En basit haliyle 'Diziler' nedir bunu bir anlayalım. Diziler, birden fazla aynı veya farklı tipte veri tipinin bir araya gelmesiyle oluşur. Bu veriler String, Integer, PSObject vd. gibi tipler olabilecegi gibi, kendi yazdigimiz nesneler de olabilir. Buna ek olarak birden fazla değişkeninde bir araya gelmesiylede oluşabilir diye tanımlayabiliriz. Çok geçmise gidersek, Matematikteki sonlu dizi adında bir konu var, oraya dönüp hafızayı pekiştirebilirsiniz. Yazımında devamında artık Dizilere ( 'Array' ) olarak sesleniyor olacağım bu yüzden kafanız karışmasın.

Array, birden çok öğenin bir koleksiyonu olarak işlev gören bir veri yapısıdır. Koleksiyon kelimesi çok önemli bunu lütfen aklınızda yer etmesini sağlayın. Koleksiyon dediğimiz zaman aklınıza elinizde birden fazla erişebildiğiniz bir değerler bütünü olduğunu hayal ediniz. Array'ler üzerinde yeni eleman ekleyebilir veya Array içerisinden belirlediğiniz bir elemana erişebilirsiniz.

Array oluşturmaya ilk adım

Powershell içerisinden değişken bildiğiniz üzere '$' işareti ile başlanarak oluşturulmaya başlanır. Vereceğiniz değişken adını '$' işaretinden sonra yazarsınız ve Powershell tarafından otomatik olarak algılanır ve '=' eşittir ile atamasını gerçekleştirirsiniz. Hemen aşağıdaki basit kullanım ile başlayalım.

Yukarıda görüldüğü üzere, ilk Array tanımlamımızı yaptık. '$myfirstarray' adındaki değişkeniz var fakat karşına '@()' girerek kendisinin bir Array olduğunu Powershell'e söylemiş olduk. Şimdilik bu bizim için boş bir Array yani içerisinde herhangi bir eleman yok. Şimdi ise Array içerisine eleman atayalım ve neler olduğunu anlayalım.

Görüldüğü üzere üsteki resim içerisinde Array içerisine elemanlar yazdık ve ilgili satırı çalıştırarak memory içerisine aktarmış olduk. Daha sonra değişkeni, çağırdığımız zaman karşımıza tüm elemanları döküldüğünü görüyor olacaksınız. Üste gördüğünüz resim içerisinde tüm anlattığım adımları yaptım, bir Array oluşturup içerisine elemanlarımı tanıttım ve daha sonra Array çağırdığımda tüm elemanlarımı görebiliyorum. Dilerseniz bunun dışında şu şekilde tanımlama yapabilirsiniz. Aşağıdaki örnek farklı bir tanımlama şeklidir.

Yukarıdaki örnekte her bir satırda eleman tanımlaması yaptık. İki şekilde kullanabilme şansınız var, ben günlük hayatta yazdığım kodların okunabilmesi için en son gerçekleştirdiğim şekilde yazmayı tercih ediyorum. İlk yaptığımız örnek fena değil ama Array içerisinde çok fazla elemanınız olunca görüntü ve okunabilirlik açısından çok zor olmaktadır. Birçok tanımlama yöntemi var Array tanımı yaparken, bunlardan en ilgiç olanı birazdan aşağıda göreceğiniz normalde ben hiç kullanmıyorum ama karşınıza çıkar ise bir Array tanımlanıza yardımcı olan cmdlet 'Write-Output' unutmayız. Aşağıdaki son örnek farklı bir açıdan Array tanımlamak. Dikkat ettiyseniz elemanlar arasında herhangi bir virgul ile tanımlama yok, ama bu şekilde tanımlamaya rastlarsanız unutmayın bu komut ise Array oluşturmanızdaki en değişik yöntemlerden bir tanesidir.

Array içerisindeki elemana erişmek

Öncelike Array içerisindeki elemanlara neden erişmek istediğimizi bir anlayalım. Tanımlı olan elemanlarınızın içerisinden değişiklik yapmak isteyebilirsiniz veya var olan bir elemana erişip onunla ilgili bir bilgiye edinmek isteyebilirsiniz. Array içerisinde bulunan her elemanın bir Index değeri vardır. Yani o dizi içerisinde sırasını belirten bir değer. Aşağıdaki örnek içerisinde tanımlamış olduğumuz elemanların Array içerisindeki Index değerli mevcuttur. Her programlama dilinde ilk Index değeri yani o elamanın yerinin belirtildiği yer SIFIR ile başlar. Bu yüzden Array içerisindeki ilk elemanınız çağırmak isterseniz her zaman index değerinin sıfır'dan başladığını bilmeniz gerekiyor.

Elemanlarımıza erişmek için aşağıda gösterilen şekilde köşeli parantez '[]' içerisine Index numaranızı yazarak erişebilirsiniz.

Array içerisindeki elemana erişmek istiyorsak yukarıdaki gibi gösterildiği şekilde tanımlama yapmamız gerekiyor. Tanımladığımız Array içerisinden bir eleman çağırma işlemiyle başlayalım. Bildiğiniz üzere toplamda 4 adet elemanım var bunlardan 'remote-pc2' olanı çağırmak istiyorum Array içerisinden, bunun Index değeri yani basit haliyle dizi içerisinde onu gösteren veya tanımlayan sırası 1 olarak gözlenmektedir.

Yukarıdaki resim içerisinde 'remote-pc2' isimli elemanımı çağırmak için şu şekilde bir '$myfirstArray[1]' tanımlama kullandım. Bu sayede istediğim elemana Array içerisinden erişmiş oldum. Eğer sizde diğer yazılım dillerine hâkim iseniz çok zorluk çekmeyeceksiniz, hemen hemen aynı mantık ve syntax yapısına sahip olduğunu görebilirsiniz.

Array içerisindeki birden fazla elemana erişmek

Başka bir durum ise yine farklı bir kullanımı olan belirlediğiniz birden fazla Index değeri ile birden fazla elemana ulaşma şansınız bulunmaktadır. Örneğin, 'remote-pc1', 'remote-pc3' aynı anda ukaşmak istiyorsanız kullanım şeklini aşağıda görebilirsiniz.

Hatırlarsanız, köşeli parantezler içerisine bir Index numarası girerek istediğimiz elemanı ilgili Array içerisinden çağırabileceğimizden bahsetmiştik. Bu örnekte ise, birden fazla 'Index' numarasını 'virgül' koyarak erişebildiğiniz bir senaryo olarak düşünebilirsiniz.

Örneklerimizde farklı detaylara değinmeye çalıştık. Array kullanımının farklı özelliklerinden bahsettim aklıma gelenler ve temel olanlar şimdilik bu kadar, Array içerisindeki elemana erişmenin birçok yöntemi bulunmaktadır. Yukarıdaki son resimdeki sonuçları lütfen inceleyerek anlayamaya çalışınız.

Array içerisindeki elemanları güncellemek

Array içerisinde tanımlı olan elemanları bazı sebeplerden dolayı güncellemek veya içeriğinde bir değişiklik yapmak isteyebilirisiniz. Bunu yapmak için bilmeniz gereken ilgili elemanın Index değerini ve Array içerisinde o elemanı aramak.

Gördüğünüz gibi yukarıdaki resim içerisinde Array içerisindeki sırası ilk yanı Index numarası (0) sıfır'a eşit olanı güncellenmesini yaptım. Array tekrar çağırdığım zaman son güncel halinin sonucu görebilirsiniz. Index numarası sıfır'a eşit olanı güncelledim ve sonuç görüldüğü gibi, eleman sayısımız 4 adet falan ben farklı bir örnek yaparak hata almaya çalışacağım ve neden hata aldığımıda anlayamaya çalışalım.

Array içerisinde Index numarası 4'e eşit olan elemanın update etme işlemine kalkıştık, fakat bildiğiniz gibi bizim toplam 4 adet elemanımız var ama Index numarası 0(sıfır)'dan başladığı için en son elemanımızın Index numarası 3(üç)'e eşit olmaktadır. Index numarası 4 olan bir elemanımız yok, güncelleme işlemini yaptığım zaman bir hata almaktayım. Birçok kişinin yanıldığı veya öyle düşündüğü bir nokta var aslında, eleman Index sayısına eşit olmasa bile Array içerisine o elemanı ekleyecekmiş gibi düşünüyor fakat Array içerisine Index sayısını gönderdiğiniz için 'Outside the bounds of the array' hatası almaktasınız. Bu sebepten ötürü dikkatli olmanızı öneririm. Uzun döngüler, içerisinde hatanın nerede olduğunu anlarken kaybolmak istemiyorsanız ne zaman Array yapısı kullandığınıza çok dikkat etmelisiniz.

Serimizin devamında, Iteration konusu ile devam edeceğiz.

· 2 min read
Hasan Gural

I've been working Azure Resource Templates for consistency deployment process.This GitHub repository offers test platform who wants to deploy quickly Active Directory Environment which will be placed on Windows Server 2016 OS for Azure deployments. All of the templates in this repository have been developed for who needs this structure. This repository contains just Standalone Active Directory deployment templates that have been tested. The templates for Microsoft Learning Partner who wants to demonstrate quickly Azure Resource Manager Templates

This template allows you to create these resources.

  • Virtual Machine - ADDS Service
    • Network Security Group with RDP Rule
    • Public Ip Address - Static
    • Desired State Configuration Extension - ADDS
    • BGInfo Extension
    • Diagnostic Storage
  • Virtual Network
    • 2 subnets: Application, Management
    • DNS Server : ADDS Server

Also you can deploy this template with the Powershell. Before you have to login with your Azure Admin Account on the Azure Powershell. However, you can use Azure Cloud Shell.

# --- Set resource group name and create
$ResourceGroupName = "pr-prod-rg"
New-AzureRmResourceGroup -Name $ResourceGroupName -Location "West Europe" -Force

# --- Deploy infrastructure
$DeploymentParameters = @{
envName = "msft"
vNETAddress = "172.10.0"
userName = "prAdmin"
userPassword = "mike!s10!q"
domainName = 'msft.com'

}

New-AzureRmResourceGroupDeployment -Name "deployment-01" -ResourceGroupName $ResourceGroupName -TemplateFile .\\examples\\example-linked-template.json @DeploymentParameters

Also you can reach my GitHub Profile here; https://github.com/hasangural

· 5 min read
Hasan Gural

There are several ways to connect Azure Subscriptions. Before, we were using VPN gateway for connecting different subscriptions Virtual Network to Virtual Network. We can use VNet Peering to connect virtual networks in the same Azure region or different Azure regions. The virtual networks can be in the same Azure subscription or in different subscriptions, as long as they share the same Azure AD tenant. Also now, we can use VNet Peering to connect different Azure AD Tenants. VNet Peering also allows you to connect two virtual networks created by using different deployment models. In this article, I'm going to explain how can we implement VNet Peering across different Azure Active Directory Tenants.

Before we start this article, what exactly we need to implement for this feature. We can configure VNet Peering by using the Azure portal, Azure PowerShell, Azure CLI and also Azure Resource Manager templates.

As you can see the above picture, need requirements which will be used for VNet Peering to connect Azure subscriptions.

Contents of this article;

  • Clarify VNet to VNet Peering
  • Creating and Configure VNet in the CompanyA with Powershell
  • Creating and Configure VNet in the CompanyB with Powershell
  • Configuring VNet Peering for each Virtual Network.
  • Conclusion

Clarify VNet to VNet Peering

As we mentioned before, If you want to use VNet peering for your project or production environments, you can find below requirements which should have for each user.

  • At least one user who has got access on all subscription.
  • If you want to use multiple users for each subscription, each user should have to reach all subscriptions
  • Users should verify to access each subscription on the different Azure AD Tenants.
  • Take notes subscriptions.

In this article, I'm going to use just one user which has got permission for each subscription. On the best practices case, you should use specific users which have got permission for each subscription. Note that, in this article, we use the AZ Powershell Module which is new.

Creating and Configure VNet in the Company-A with Powershell

Now I have one user and it has permission for each subscription which placed different tenants. We are going to build new infrastructure resources because I want to show you step by step how can we manage this action. In this example, we have two companies. We call them Company-A and Company-B. The first Step is needed to login Powershell with the accessed user. Thereafter, We will create new resources, Virtual Network. We will do these actions each subscription. Because As I said before, we will be created new infrastructure resources.

Connect to Azure Connect-AzAccount

Create Resource Group for Company-A

New-AzResourceGroup -Name "RG-Company-A" -Location "West Europe" -Tag @{Company="A"}

# Create Virtual Network for Company-B

New-AzVirtualNetwork -Name "companyA-VNET" `
-ResourceGroupName "RG-Company-A" `
-AddressPrefix "192.168.10.0/24" `
-Location 'West Europe' -Tag @{Company="A"}

As you can see the results say us, we have executed our command lets for creating Resource Group, Virtual Network. We did all the steps into the Company-A Subscription.

Creating and Configure VNet in the Company-B with Powershell

Now we can log in to "Company-B Subscription". We are creating same resources which are Resource Group and Virtual Network. Afterwards, now we are ready to peer two different Virtual Network.

# Create Resource Group for Company-A

New-AzResourceGroup -Name "RG-Company-B" -Location "West Europe" -Tag @{Company="B"}

# Create Virtual Network for Company-B

New-AzVirtualNetwork -Name "companyA-VNET" `
-ResourceGroupName "RG-Company-B" `
-AddressPrefix "10.10.10.0/24" `
-Location 'West Europe' -Tag @{Company="B"}

As you can see clearly, we have created Resource Group and Virtual Network on each subscription. Now can skip configuring VNet to VNet Peering steps. I think that it is the easiest way to implement Azure subscriptions which placed on different Azure Active Directory Tenant.

Configuring VNet Peering for each Virtual Network.

We are going to use two command-lets which are "Get-AzureRmVirtualNetwork" and "Add-AzureRmVirtualNetworkPeering". Also As we said before, we have to take a note each subscription Id. Because We will use them into the Powershell Command-Lets.

# Peer company-A-VirtualNetwork to company-B-VirtualNetwork
# Select Company-A Subscription - Select-AZSubscription.

$vNetA = Get-AZVirtualNetwork -Name companyB-VNET -ResourceGroupName RG-Company-B

Add-AZVirtualNetworkPeering \`
-Name 'companyA-VNET' \`
-VirtualNetwork $vNetA \`
-RemoteVirtualNetworkId "/subscriptions/26e1b27f-\*\*\*\*\*\*\*\*8829-cacfc62/resourceGroups/RG-Company-A/providers/Microsoft.Network/virtualNetworks/companyA-VNET"

In the script lines, I did mention red lines which should be referred to Resource Group, Virtual Network, and SubscriptionId. We should use the above script for Company-A side. You have to execute the same scripts for the company-B site before you should be sure using "Company-B". If you used to the same script for the Company-B side now we can test peering connections status. Also, you can see the above picture, "PeeringState" column which explains to us peering status.

Conclusion

End of the article, we are going to test what is connection status for VNet Peering. There are two ways to control status VNet Peering. As you may know, the first one is Azure Portal also we can check with Powershell Command Lets. We used to Powershell Scripts for VNet Peering because Azure Portal does not support this implementation. You can see the below picture two ways.

· 3 min read
Hasan Gural

Packer serimize Provisioners' ile devam ediyoruz. Packer Image Template'leri içerisinde, 'Provisioners' bölümü en çok dikkat çeken kısım olarak karşımıza çıktığını daha önce belirtmiştim. Packer ile oluşturmak istediğiniz imaj için öncesinde içerisinde olmasını istediğiniz yazılımı yüklemek veya işletim sistemini yapılandırmak için kullanması gereken bir özelliktir. Basit olarak bunu kullanmanızda birçok aşama var. Öncelikle bildiğiniz gibi bir imaj alırken, Sysprep önem arz eder, bunun dışında belki o imaj içerisinde belirli bir yazılım olsun, Registry içerisinde şu şekilde bir kayıt olsun, bunu değeri bu olsun, hatta Package Management üzerinden bir yazılım yüklensin gibi her türlü detayı belirtebiliryorsunuz. Öncelikle 'Provisioners' isteğe bağlıdır. Bir şablon içinde hiçbir hazırlayıcı tanımlanmamışsa, sonuçta ortaya çıkan makine görüntülerine varsayılanlardan başka hiçbir yazılım yüklenmeyecektir. Bununla birlikte, bu tipik değildir, çünkü Packer'ın değerinin çoğu önceden yapılandırılmış yazılımın çoklu özdeş resimlerini üretmektir. Provisioners genellikle bir Powershell Script, bash script vb. nitelikler ile tanımlanır.

Yukarıda görüleceği gibi basit bir haliyle mevcut imaj için tanımladığımız JSON dosyamızın son bölümüne, 'Provisioners' adında yeni bir nitelik tanımladım ve artık bunun içerisinden Powershell, Shell gibi komut satırları aracılığı ile istediğimi yapabileceğim. İstediğim derken? Hayal gücünüze kalan bir detay burası, tamamıyla size ait, isterseniz, bir Web Server install edebilir, isterseniz Scale Set kullanıyorsanız, Scale Set sonrası image içerisinde yapılması gerekenleri script içerisinde yazarak hızlı bir şekilde image haline getirebilirsiniz. Şimdi ise basit bir Powershell Script tanımlaması yapalım ve neler olduğunu görelim.

Kırmızı alan içerisine aldığım satırlarda örnek olması için Provisioners bölümünü ekledim ve 'type' olarak Powershell yazdım. Tekrar söylemek gerekirse, Provisioners olmadan bir imaj yaratmanız neredeyse imkansız, biz Builders içerisinde Microsoft kütüphanesi içerisinden hazır bir imajdan faydalandık. Fakat bizim için sadece clean bir Windows Server vermekte, fakat biz bunun üzerine bir ihtiyacımız olan kısmı ekleyerek imajımızı kurumumuza göre geliştirebiliriz. Şimdi sizinle bir Powershell Script dosyası oluşturup içerisine birkaç satır yazacağız. Bunun amacı tamamen image içerisine yapılması gerekenleri belirtmek. Örneğin bu image'ın adını WebServerIIS olarka vermiş idik ve anlamlı hale gelmesi için Windows Server içerisindeki IIS ve birkaç daha features ekleyecek script geliştirelim.

Features.ps1 isimli bir script geliştirdik. Şimdi bu Script içerisinde Windows firewall kapatmak için bir cmdlet yazdık ve bununla beraber Windows Server Feature aracılığı ile" Web-Server, Telnet-Client" vd role ve features kurulumunu yapması için gerekli Powershell Script yazdık. Peki şimdi bunu mevcut image template içerisine nasıl koyacağız. Bir önceki resim içerisinde bir Powershell satırlarını direk template içerisine yazmıştık. Şimdi ise bizim Powershell Scriptimizi ekleyeceğiz. Bunun için hemen template içerisine belirleyelim.

Yukarıdaki resim içerisinde görüleceği üzere, yeni bir satır ekleyerek Powershell ve mevcut scriptimizi tanımlamasını yaptık. Sizinle beraber yazmaya başladığımız bu Image dosyası ( JSON) oldukça karmaşık ve istediğimiz seviyelere geldi. Bir sonraki yazımızda packer aracının kullanım şeklini ve nasıl çalıştığına değiniyor olacağız.

· 4 min read
Hasan Gural

Packer, HashiCorp tarafından sunulan tek bir kaynak konfigürasyonı ile birden fazla farklı platformlar için Virtual Machine veya konteyner imajları oluşturmak için kullanılan bir araçtır. Bu yazı serisinde Azure özelinde custom image'lerin nasıl oluşturulacağını açıklayacağım ancak önce Packer nedir kendisi tanıyalım. Kısacası Packer, Microsoft Azure'da spesific image oluşturmak, tanımlamak için kullanılabilen açık kaynaklı bir araçtır. HashiCorp tarafından bizlere sunulan bu araç ile Ansible, Powershell DSC etc. İle birlikte kullandığınız zaman Infrastructure as code yönetimini başka bir boyuta taşıyor olacaksınız. MsHowto üzerinde bulabileceğiniz, Mustafa Kara tarafından yazılan Ansible yazı serisi okumanızı tavsiye ederim. Packer, birden fazla platformda çalışır, Bu yazı serisinde Microsoft Azure üzerinde custom image'ler oluşturmak ve saklamak için örnekler gerçekleştirip, Packer'in Azure Resource Manager (ARM) bütünleşip, Azure Managed Image ile harika ve sorunsuz bir uyum içinde çalıştığına şahit olacaksınız.

Öncelike yazı serimize başlamadan önce, sürecin nasıl ilerleyeceğini aşağıdaki adımlar ile özetleyelim. Bu örnek senaryo içerisinde Windows Server bir image oluşturup içerisinde Web Server hizmetini aktif hale getireceğiz. Neden ve niçin böyle bir senaryo yaptığımızı ilerleyen kısımlarda anlatacağım. Sırasıyla adımlara göz gezdirelim.

  1. ) Packer aracının yüklenecek. ( HashiCorp sayfasından elde edilebilir.)
  2. ) Azure Active Directory Hizmet üzerinde Service Principal Name oluşturulacak.
  3. ) Mevcut bir Azure Marketplace içerisinde bulunan OS imajı referans alınıp, özelleştirecek ve imaj için şablon kullanılacak. Bu şablon JSON formatında olacak.
  4. ) Imaj oluşturmak için JSON formatı belirtilen nitelikler sayesinde imaj oluşturun (İhtiyaç duyduğunuzda deploy edilebilir durumda sizi bekliyor olacak.)
  5. ) Packer ile ilk imaj oluşturma sonrası test amaçlı deploy üzerinden yeni bir VM deploy ederek sonucu görmek.

Packer Edinme ve detaylı dökümantasyon için HasciCorp sayfası bizlere çok güzel ve detaylı açıklamalar vermektedir. Packer edinmek için şu sayfa üzerinden ilgili 'Packer.exe' indirebilirsiniz. Download Link : https://www.packer.io/downloads.html

Packer aracını artık edindik ve bir sonraki adımımıza geçebiliriz, bunun için Azure Active Directory üzerinden Service Principal oluşturmamı gerekmektedir. Service Principal kısaca, Azure uygulamanız için bir identity tanımlamak veya oluşturmak ve doğal olarak subscription içerisinde yetki alarak işlemler yapmak olarak tanımlayabiliriz, Packer, bir imaj oluştururken Azure aboneliğinizdeki kaynakları oluşturmak ve silmek için bir takım izinlere ihtiyaç duyar. İşte bunların tamamı için, Azure Active Directory üzerinden Service Principal oluşturup Service Principal'a gereken hakları atayarak elde edilir. Bu genellikle tek seferlik bir şeydir, bu adımı bir kez yaparsınız ve yeni bir imaj oluşturmak istediğinizde Service Principal'ı yeniden kullanırsınız.

Bu işlemleri için süreci kolaylaştırmak adına sizinle bir script paylaşıyor olacağım. Bu sizin için koaly ve hızlı bir şekilde yeni bir Service Principal oluşturmanızı sağlayacak. Makale serisi boyunca, tüm yazdığım kod bloklarının hepsini Visual Studio Code üzerinden gerçekleştiyor olacağım. Bu yüzden Visual Studio Code üzerinde bulunan çalışma dosyamın hepsini son seride indirebilir olacaksınız.

Yukarıda çalıştırdığım "MsHowto-PackerPrep.ps1" adlı Powershell Scripti sayesinde Azure Active Directory üzerinden Service Principal oluşturma işlemini tamamladık, Ekranı ortadan ikiye böldüm, sol tarafta Powershell Script içerisindeki satırlar içerisinde yaptığımız adımları özetlemek gerekirse, Bir takım değerleri parametrik hale getirerek, Resource Group Name, Location, Image Name, Role Assignment ve Service Principal Password gibi değerleri istediğiniz gibi değiştirebilirsiniz. Script çalıştıktan sonra, Ekranından sağ tarafında en alta bulunan yeşil alan içerisinde, oluşan Service Principal Name için, tüm detayları görebilirisiniz, gizlilik açısından bazı alanları ben kapattım, siz çalıştırdığınıza size özel değerler üretecektir. Bu değerli daha sonra Packer ile oluşturmak istediğimiz image için geliştireceğimiz JSON içerisine yazıyor olacağız. Bu değerleri not alalım ve saklayalım. Ayrıca yukarıda yaptığımız tüm işlemleri isterseniz Azure CLI ile yapma şansına sahipsiniz, bu yüzden tamamen sizin tercihiniz.

Makalemizin adımlarına tekrar baktığımızda Packer ve Azure Active Directory üzerinde, Packer özelinde bir adet Service Principal oluşturma sürecini tamamladık. Visual Studio Code içerisinde görebildiğiniz üzere projemin içerisinde 'Packer.exe' görebilirsiniz.Şimdi ise proje dosyam içerisinde imaj dosyamı tanımlamak için bir adet JSON dosyası oluşturup bir takım tanımlamalar yapacağız ve bunları tek tek açıklamaya çalışacağım. Makale boyunca kullanacağım JSON dosyasının adı, "packerimage.json" olarak kullanmaya özen göstereceğim ve bunun yazım şeklinden tutun ne gibi özellikler göndererek kullandığımıza değineceğim.

Yukarıda görüldüğü üzere packerimage.json adında bir dosya oluşturdum ve içerisinde bir JSON formatında key-value şeklinde tanımlamalar yaptım fakat JSON formatından anlıyacağınız gibi, ikinci satırda görebileceğiniz üzere Variable nesnesinin alt kısmına bir takım key-value şeklinde tanımlamlar yaptım ve bu tanımların hepsi değişken olarak JSON dosyasının ilerleyen aşamalarında kullanılıyor olacak. Bu tanımlamalar içerisindeki tüm satırları nasıl dolduracağımızı bir sonraki yazımda bulabilirsiniz.

· 3 min read
Hasan Gural

Packer ile Azure üzerinde VM image yönetimine devam ediyoruz. Bir önceki yazımızda Service Principal ve Packer tanımlaması için JSON dosya oluşturup Variable tanımlarını yaptık fakat karşılarına değerler girmedik. Şimdi dilerseniz bizden istenilen tanıımlamaları tek tek girelim. Aşağıdaki resim içerisinde göreceğiniz gibi Variables olarak adlandırılan bölümde, Azure Subscription detayları, Service Principal bilgileri ve son olarak oluşturulacak olan image için saklanacak resource group ve image name bilgileri yer almaktadır. Bu bilgileri doldurduktan sonra, daha sonra onları ilerki tanımlamalarda kullanıyor olacağız. Adından anlaşılacağı gibi, bunlar sadece bizim abonelik ve packer için kullanılacak bilgileri içermektedir.

Yukarıda gördüğünüz beyaz alan içerisinde tüm istenilen key-value ilişkisi içerisindeki değerleri doldurdum. Packer kendi içinde Azure ARM API üzerinden istek yaptığı zaman Service Principal kullanarak yani ClientId ve ClientSecret ile erişim sağlayıp, ilgili subscriptipon üzerinde işlemlere başlayacak. Şimdi JSON dosyası içerisinde geliştirmelere devam edeceğiz. Bir özellik daha ekleyeceğiz JSON içerisine ve bu sefer adı 'Builders olacak ve alt kısmına 'Builders bize sunduğu özellikleri girebileceğiz. Basit haliyle Builders ne iş yapar derseniz, çeşitli platformlar için sanal makineler oluşturup bunlardan image üretmekten sorumludur. Örneğin, EC2, VMware, Azure, Citrix, VirtualBox, vb. İçin ayrı geliştiriciler vardır. Packer, varsayılan olarak birçok üretici ile birlikte gelir ve ayrıca yeni geliştiriciler eklemek için geliştirelebilir ve geliştirilebilir.

Şimdi ise Builders için bir tanımlama yapalım ve nasıl kullanıldığını anlamaya çalışalım. Öncelikle 'builders' tanımlaması aşağıdaki gibi yapılmaktadır.

Yukarıda görüldüğü gibi 'Builders' nesne içerisine oluşturacağımız image için gerekli key-value değerleri girebiliriz. Bu kısımda anlaşılacağı gibi benim gireceğim değerleri nereden öğreneceğinizi merak ediyorsanız, bunun için Packer sayfasını ziyaret edebilirsiniz. Takdir ederseniz her hizmet sağlayıcısının ( Azure, AWS, Vmware, Hyper vd ) hepsinin kendine özel terimleri ve adlandırmaları var. Bu yüzden bunları key – value şeklinde tanımlarken, reference alabileceğiniz tek sayfa Packer Builders sayfası olacaktır. Şimdi ise, Azure için örnek bir 'builders' tanımlarını inceleyelim.

Artık 'Builders' içerisine yaptığımız tanımlamaları görmektesiniz. Aslında çok zor ve anlaşılmayacak bir tarafı yok. Hemen 'Builders' tanımın altında "Type' ( 13.Satır ) yazan kısımda hangi provider için kullanacağımızı belirtmek zorundayız. Bunun sebebi yazımızın başında söylediğimiz gibi, Packer birçok provider üzerinde image yönetimini destekliyor. Turkuaz alan içerisine aldığım 15 – 20 satır arasına dikkat ettiğinizde, Variables Nesne içerisinden onları değişken şekliden çağırıp kullandık. Aslında JSON dosyasımızın ilk kısmında, Variable alanları tanıtıp, 'Builders' içerisinde kullandık. En son olan kırmızı bölgemizde satır 22 – 40 arasındaki alan ise Packer sayfası üzerinden image yönetimini için gerekli tanımlamalar olarak söyleyebiliriz. Bu tanımlamalar olmadan herhangi bir yönetilen imaj oluşturma şansınız yok. Bu kısımda, 'Azure Tags' nesnesinin karşına key-value olarak bir takım Tagler tanımladım. Bunlarıda kaynak için atamasını yapıyor olacak. Bunun dışında imaj özelinde yaptığımız tanımlaların karşısındaki değerlere baktığınız zaman sizde çok kolay bir şekilde anlayacaksınız. Bunlar sırasıyla, "ImageSku,ImagePublisher,Image_Offer" gibi değerler, bunun yanı sıra, WinRM gibi hizmetlerin açılması ve tanımlamaları yaptım. Son olarak size makine boyutu ve region detaylarını belirttik.

Aşağıdaki ekran görüntüsünde, Packer sayfasından bir alıntı yapmak istedim. Bu görüntü içerisinde sizlere Packer sayfası üzerinde ne kadar basit bir şekilde yapmanız gerektiğini anlatıyor. Bir çok insan image yönetimini klasik ya da alıştıkları yöntemler ile yapmakta ısrarcı davranıyor. Mevcut kuralları yıkmak gerçekten çok zor, kurum kültürü organizasyon hareketleri malasef bu değişikliğe çok çabuk izin vermiyor. Ama makalemizin ilerleyen kısımlarında, Packer'ın yeteneklerine alışacağınıza inanıyorum.

Bir sonraki yazımızda, Packer için farklı bir konu olan "Provisioners" adlı kısmı inceleyeceğiz. Burası benim en çok sevdiğim ve neler yapabileceğimizi tamamen kavracağımız nokta olarak söyleyebilirim.

· One min read
Hasan Gural

For those who seek success even in a little rhythm,

In my personal career life, the only thing that I have cared for was dedication to have continuous achievement in future. Thankfully, I have gotten lots of chances to be awarded in many times but especially today I have acquired Most Valuable Professional award for the second time.

"Success" has always a different definition for me than in dictionaries. It is more extensive and particular than crossing the limits, actualizing expectations or even being awarded. To be successful, this word should appeal to you in a more productive and unique way for past, now and future.

I believe that confidence and passion are the key words for human to achieve their desire in life. Thus, this explains why hard obstacles that we face are not unbroken. I own my progress in this industry to my ambition and will in my notions and aims. But also, achievement enlarges in a good partnership and emphatic co-worker relationship. That’s why I thank warmly to MShowto Technical Community and PeakUp for their support.

World still sings different success stories for seekers.

· 3 min read
Hasan Gural

I did post one years ago "Azure Server Management Tools". The Post explained "How to use Azure Server Management" and it also has three different part. But, I'm willing to give you details for Windows Admin Center. Actually, Microsoft has announced this product "Project Honolulu". But İt has changed to "Windows Admin Center". I'm keen to work with this product because it's working with agentless. Indeed, Windows Admin Center is browser based management your Windows Servers without Azure or Cloud dependency. Also, Windows admin center is the future of remote server management designed to modernize and simplify the IT administrator experience. if you want to perform a management task on a machine there are almost twenty different tools. Perhaps we've consolidated all these tools into a single machine. Maybe we called it "Admin Management Server". We have almost deployed all tools

Windows admin Center think of it as the evolution of traditional inbox management tools like MMC it's great for administrators that need a lightweight management solution for smaller scale deployments or ad hoc management for large scale deployments.

How does Windows Admin Center Work?

Basically, IT Administrator runs in a Web Browsers and manages only these type of VMs.

  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows 10

Also, The Windows Admin Centers has particularly roles. These are called to "Web Server" and "Gateway". You can install Windows Admin Center to Windows Server 2016 and Windows 10. As a matter of fact, It is quite beautiful to have a chance to install Windows 10. According to me if you are planning install that services, you should try to Windows Server 2016. I'm going to explain roles.

Gateway : The gateway administers servers by using Remote PowerShell and WMI over Windows Remote Management. Also, The gateway is included with Windows Admin Center in setup package.

Web Server : I could say, The Web Server is included same package with Gateway. In other words, Windows Admin Center in a single basic "msi" package that you can download it.

Let's have a look that picture.

Windows Admin Center defines your management environment

Integration existing solutions, The Admin Center works with Microsoft products like System Center and Azure Operation Management Suite. It gives you "Manage your Infrastructure Single Management Console". In the other hand, Windows Admin Center contains many of the familiar tools you currently use to manage Windows Servers and clients so you don't need lost your time for adaption. In Fact, it is installed easy and you will use familiar functionality to manage your servers like "Microsoft Management Console – MMC". However, if you are implementing your firewall and DNS server, you will be able to access your Windows Admin Center on the Internet. Windows Admin Center has a lot of points of integration with Azure services, including Azure Activity Directory, Azure Backup, Azure Site Recovery, and more.

I'm quite excited to huge features Extensibility for Windows Admin Center. Microsoft and 3rd party developers to build tools and solutions beyond the current offerings. Microsoft offers an SDK that enables developers to build their own tools for Windows Admin Center. If you are excited like me, you can look at this page. Windows Admin Center- SDK

Next Article, I will be writing for "Install Windows Admin Center".

· One min read
Hasan Gural

Peakup olarak üniversitelerde verdiğimiz seminerlerin Eskişehir Üniversitesi ayağındaydık. Ezgi Can ve Fatih Doğan arkadaşlarımla birlikte katıldığımız seminerde gün boyunca Microsoft Cloud Vision - Big Data - IoT teknolojilerinden bahsettik. Keyifli bir organizasyon oldu. Katılım gösteren öğrenci arkadaşlarımıza teşekkür ediyorum.