Skip to main content

Custom Resource Providers ve Azure Function Kullanım Örnekleri – Bölüm 3

· 4 min read
Hasan Gural

Bir önceki yazımızda Azure Function örneğini deploy etmiş ve içerisinde bulunan function ile nasıl etkileşim halinde olduğunu ve aksiyon aldığından bahsetmiştik. Şimdi ise Azure aboneliği üzerine Custom Resource Provider tanımlamasının nasıl olduğunu anlayamaya çalışalım. Öncelikle Custom Resoırce Provider henüz general available olmadığı için tüm Azure Region'larında kullanma şansınız yok. Bu yüzden ben sadece destekleyenlerden biri olan, 'EastUs' özelinde devam edeceğim. Custom Resoırce Provider kesinlikle destekleyen Region'lar da oluşturulmalıdır.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "containerName": {
            "type": "string",
            "defaultValue": "fsocietyTerminal01"
        }
    },
    "resources": [
        {
            "apiVersion": "2018-09-01-preview",
            "type": "Microsoft.CustomProviders/resourceProviders",
            "name": "customContainerProvider",
            "location": "eastus",
            "properties": {
                "resourceTypes": [
                    {
                        "name": "startContainer",
                        "routingType": "proxy",
                        "endpoint": "https://customprovider-func.azurewebsites.net/api/{RequestPath}"
                    }
                ]
            }
        },
        {
            "apiVersion": "2018-09-01-preview",
            "type": "Microsoft.CustomProviders/resourceProviders/startContainer",
            "name": "customContainerProvider/startNewContainer",
            "location": "eastus",
            "dependsOn": [
                "[resourceId('Microsoft.CustomProviders/resourceProviders/', 'customContainerProvider')]"
            ],
            "properties": {
                "ContainerName": "[parameters('containerName')]"
            }
        }
    ],
    "outputs": {
    }
}

Yukarıda gördüğünüz resim üzerinde bir çok açıklama mevcut. Öncelike yukarıda gördüğünüz resim basit bir Azure Resoırce Manage Template ibaret ama bunun içerisinde bir tanımlamalar var. Bu template genel anlamıyla iki iş yapıyor. Bu açıkmalar resim üzerinde var ama kısaca yine özetlemekte fayda olduğunu düşünüyorum.

Azure Template içerisinde Resources kısmında tanımlı olan bölümleri ele alalım.

    1. Bölge yani , Custom Resoırce Provider için Azure API içerisinde tanımlı olan Resoırce Type çağırıp, işte benim custom resoırce provider adım ve ResoırceType tanımlamam bunlar dedik. CustomContainerProvider adında bulunan Custom Resoırce Provider bana startContainer adında bir resoırceType sağlıyor olacak. Bunu tekrar template içerisinde kullanarak süreci Azure function tarafına devredeceğim.
    1. Bölge de tamamen tanımlamış olduğum Custom Resoırce Provider çağırıyorum ve ona parameterik olarak bir değer gönderip container oluşmasını sağlayacağım. Dediğim gibi normalde bunu Azure Resource Manager Template ile yapabilirsiniz ama burada vermek istediğimiz mesaj Azure Abonelikleri eğer benim Custom Resoırce Provider'ımı kullanıyor ise, lütfen şu propertyleri göndersin ve onun için kendi hizmetimi, bana özel çözümümü Azure Aboneliği içerisine kolay birşekilde dağıtabileyim ve müşteri tarafında gereken tüm automation, yapılacak bir çok işlem (lisanslama, deployent validation vs) Azure Function arkasında çalışan Powershell ile yönetilebilsin. Bunun giib farklı örnekler ile senaryomuz genişletilebilir.

Şimdi isterseniz Deployment sürecine geçelim ve nasıl aksiyon alındığını beraber görelim. Yukarıda gönrdüğümüz template kendi aboneliğim içerisinde çalıştıracağım ve bu sayede basit bir container elde edeceğim. Azure Portal içerisinden Template Deployment seçelim,

Daha sonra "Create" butonuna basarak yukarıda bulunan Azure Resource Manager Template içerisine yapıştıralım ve parametreleri dolduralım.

Template için parametrik değer olarak "Container Name" kısmını belirledik. Bu containerName için girdiğimiz değer, yukarıda bahsettiğimiz gibi Azure Function içerisinde Azure API üzerinde REST API olarak gönderilecek ve Azure Function bu değerleri aldıktan sonra bizim için aksiyon alacak. Şimdi 'Purchase' butonuna basalım ve neler olduğunu beraber görelim.

Deployment süreci başladı. İlk önce tanımlamış olduğumuz customContainerProvider tanımlamasını yaptı. Bunu görebilmeniz için, Deploy ettiğiniz Resource Group içerisinde Deployments sekmesine gelmeniz yeterli. Şimdi ise Azure Resource Manager Template içerisinde olan ikinci kaynak olan Custom Resource Provider içerisine containerName parametresini gönderip Azure Function tarafından tetiklenmesini sağlandığını görelim.

Herşey yolunda gitmiş gözüküyor, gönderdiğimiz değer Azure Function içerisine gönderilmiş , Azure Function içerisindeki Powershell çalıştırıldı ve Azure Rest API gerekli cevaplar düzgün iletilmiş. Görüldüğü üzere deployment Azure function tarafından başarılı bir şekilde yapılmış gözüküyor. Şimdi ise Azure Function tarafında Log detaylarını görelim, böyle bir talep geldiği zaman nasıl bir etkileşim başlıyor.

Kullanmış olduğumuz Template içerisindeki Parametrik olarak değer Azure ARM REST API sayesinde Azure Function içerisine gönderildi ve yapmak istediğim Resource Group ve Azure Container Instance oluşturuldu. Azure Container Instance oluşup oluşmadığını kontrol edelim.

Yukarıdaki resimde görüldüğü üzere Azure Container Instance oluşturuldu ve Container içerisinde console üzerine yazılar yazdırdık. Bu yüzden tamamen neler yapabileceğimize bir örnek vermek adına yaptığımız bir uygulama oldu. Aşağıda paylaştığım gitHub adresim üzerinden dilerseniz Custom Resource Provider Template direk deploy edebilirsiniz. Fakat dikkat etmeniz gereken endpoint adreslerinin düzeltilmesi, kendi Azure Function hizmetini göstermelisiniz.

Not: Yaptığımız örneklerde sadece bir adet Azure Aboneliği özelinde devam ettik. Gerçek senaryolarda Azure Function tamamen hizmeti veren firma, partner tarafından yönetilir. Firmanın verdiği hizmetleri kullanmak isteyen Azure Abonelikleri Custom Resource Provider sayesinde Partnerlerin hizmetini kendi abonelikleri içerisine deploy etmelerine yardımcı olur. Yazımızın başında dediğimiz gibi, bu yöntem Partner firmaların hizmetlerini Azure Aboneliklerine dağıtırken kullanabilecekleri bir yöntem ama dilerseniz kendi organizasyon yapınızda kullanabilmek şansınız olabilir. Daha önceki yazımda verdiğim örnek gibi, Jumbox on demand aslında buna en net örnek olarak gösterebilirim. Bunun sebebi herşey kolay ve hızlı bir şekilde Azure Functions tarafından geliştirilen Powershell tarafından yönetiliyor olacak. Bu yüzden kontrol, yönetim, gizlilik herşey Azure Functions arkasında yazılan olan kısıma bağlı yani özetle hizmet veren kişiye/firmalara.

Daha fazla detay için gitHub adresim üzerinden contribute edebilir veya bana direk yorumlarınızı iletebilirsiniz.