İlk kapsayıcılı Azure İşlevleri oluşturma

Bu makalede, Linux kapsayıcısında çalışan bir işlev uygulaması oluşturacak ve bunu Azure Functions'a dağıtacaksınız.

İşlev kodunuzu Azure İşlevlerini bir kapsayıcıya dağıtmak için Premium plan veya Ayrılmış (App Service) planı barındırmayı gerektirir. Bu makalenin tamamlanması, Azure hesabınızda birkaç ABD dolarının maliyetine neden olur ve işiniz bittiğinde kaynakları temizleyerek en aza indirebilirsiniz.

İpucu

Azure'da olay odaklı işlevlerinizi diğer mikro hizmetler, API'ler, web siteleri, iş akışları veya kapsayıcı tarafından barındırılan programlarla aynı ortamda çalıştırmanız gerektiğinde, kapsayıcılı işlev uygulamalarınızı Azure Container Apps'te barındırmayı düşünün. İşlevler, Container Apps'te kapsayıcılı işlev uygulamaları geliştirmek, dağıtmak ve yönetmek için tümleşik destek sağlar. Daha fazla bilgi için Azure İşlevleri'ni barındıran Azure Container Apps bölümüne bakın.

Geliştirme dilinizi seçin

İlk olarak, docker kapsayıcısında dile özgü bir Linux temel görüntüsü kullanarak proje kodunuzu işlev uygulaması olarak oluşturmak için Azure İşlevleri araçlarını kullanırsınız. Makalenin üst kısmında istediğiniz dili seçtiğinizden emin olun.

Çekirdek Araçlar, projeniz için otomatik olarak işlev diliniz için doğru temel görüntünün en güncel sürümünü kullanan bir Dockerfile oluşturur. Kapsayıcınızı en son temel görüntüden düzenli olarak güncelleştirmeli ve kapsayıcınızın güncelleştirilmiş sürümünden yeniden dağıtmalısınız. Daha fazla bilgi için bkz. Kapsayıcılı işlev uygulamaları oluşturma.

Önkoşullar

Başlamadan önce aşağıdaki gereksinimleri karşılamanız gerekir:

  • Azure CLI sürüm 2.4 veya üzerini yükleyin.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Oluşturduğunuz kapsayıcılı işlev uygulaması görüntüsünü bir kapsayıcı kayıt defterinde yayımlamak için yerel bilgisayarınızda çalışan bir Docker Kimliği ve Docker Desktop gerekir. Docker kimliğiniz yoksa bir Docker hesabı oluşturabilirsiniz.

Ayrıca Kapsayıcı Kayıt Defteri hızlı başlangıç bölümünün Kapsayıcı kayıt defteri oluşturma kısmını da tamamlamanız gerekir. Tam nitelikli oturum açma sunucusu adınızı not edin.

Sanal ortam oluşturma ve etkinleştirme

Uygun bir klasörde aşağıdaki komutları çalıştırarak adlı .venvbir sanal ortam oluşturun ve etkinleştirin. Azure İşlevleri tarafından desteklenen Python sürümlerinden birini kullandığınızdan emin olun.

python -m venv .venv
source .venv/bin/activate

Python venv paketini Linux dağıtımınıza yüklemediyse aşağıdaki komutu çalıştırın:

sudo apt-get install python3-venv

Bu etkinleştirilmiş sanal ortamda sonraki tüm komutları çalıştırırsınız.

Yerel işlevler projesini oluşturma ve test etme

Terminalde veya komut isteminde, geçerli klasörde bir işlev uygulaması projesi oluşturmak için seçtiğiniz dil için aşağıdaki komutu çalıştırın:

func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker

Boş bir klasörde aşağıdaki komutu çalıştırarak İşlevler projesini bir Maven arketipinden oluşturun:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker

parametresi İşlevler -DjavaVersion çalışma zamanına hangi Java sürümünün kullanılacağını bildirir. İşlevlerinizin Java 11 üzerinde çalışmasını istiyorsanız -DjavaVersion=11 ifadesini kullanın. belirtmediğinizde Maven varsayılan olarak Java 8'i kullanır -DjavaVersion. Daha fazla bilgi için bkz . Java sürümleri.

Önemli

Bu JAVA_HOME makaleyi tamamlamak için ortam değişkeni, JDK'nin doğru sürümünün yükleme konumuna ayarlanmalıdır.

Maven, projeyi dağıtımda oluşturma işlemini tamamlamak için gereken değerleri ister. istemleri izleyin ve aşağıdaki bilgileri sağlayın:

Komut İstemi Değer Açıklama
groupId com.fabrikam Java için paket adlandırma kurallarını izleyerek projenizi tüm projelerde benzersiz olarak tanımlayan bir değer.
artifactId fabrikam-functions Sürüm numarası olmadan jar'ın adını içeren bir değer.
versiyon 1.0-SNAPSHOT Varsayılan değeri seçin.
paket com.fabrikam.functions Oluşturulan işlev kodu için Java paketi olan bir değer. Varsayılan değeri kullanın.

Yazın Y veya onaylamak için Enter'a basın.

Maven, proje dosyalarını artifactId adlı yeni bir klasörde oluşturur. Bu örnekte şöyledirfabrikam-functions: .

seçeneği--docker, proje için Azure İşlevleri ve seçilen çalışma zamanıyla kullanmak için uygun bir kapsayıcı tanımlayan bir Dockerfile oluşturur.

Proje klasörüne gidin:

cd fabrikam-functions

Aşağıdaki komutu kullanarak projenize işlev ekleyin. Burada --name bağımsız değişken işlevinizin benzersiz adıdır ve --template bağımsız değişken işlevin tetikleyicisini belirtir. func new projenizde bir C# kod dosyası oluşturur.

func new --name HttpExample --template "HTTP trigger"

Aşağıdaki komutu kullanarak projenize işlev ekleyin. Burada --name bağımsız değişken işlevinizin benzersiz adıdır ve --template bağımsız değişken işlevin tetikleyicisini belirtir. func new, function.json adlı bir yapılandırma dosyası içeren işlev adıyla eşleşen bir alt klasör oluşturur.

func new --name HttpExample --template "HTTP trigger"

İşlevi yerel olarak test etmek için projenin kök dizininde yerel Azure Functions çalışma zamanı ortamını başlatın. İşlevin daha sonra Docker'da barındırıldığında çağrılabilmesini sağlamak için yetkilendirme düzeyinin olarak ayarlandığından AuthorizationLevel.Anonymousemin olun veya henüz yapılandırılmadıysa ayarlayın.

func start  
func start  
npm install
npm start
mvn clean package  
mvn azure-functions:run

Çıkışa HttpExample yazılan uç noktayı gördükten sonra bu uç noktaya gidin. Yanıt çıkışında bir karşılama iletisi görmeniz gerekir.

Çıkışa HttpExample yazılan uç noktayı gördükten sonra http://localhost:7071/api/HttpExample?name=Functions adresine gidin. Tarayıcının, Functions sorgu parametresine sağlanan değeri geri döndüren name bir "hello" iletisi görüntülemesi gerekir.

Konağı durdurmak için Ctrl+C (Command+C macOS'ta) tuşlarına basın.

Kapsayıcı görüntüsünü oluşturma ve yerel olarak doğrulama

(İsteğe bağlı) Proje klasörünün kökündeki Dockerfile dosyasını inceleyin. Dockerfile, linux üzerinde işlev uygulamasını çalıştırmak için gerekli ortamı açıklar. Azure İşlevleri için desteklenen temel görüntülerin tam listesi Azure İşlevleri temel görüntü sayfasında bulunabilir.

Kök proje klasöründe docker build komutunu çalıştırın, bir adı azurefunctionsimage ve bir etiketi v1.0.0 olarak belirtin. <DOCKER-ID> değerini Docker Hub hesabınızın kimliğiyle değiştirin. Bu komut, kapsayıcı için Docker görüntüsünü oluşturur.

docker build --tag <DOCKER-ID>/azurefunctionsimage:v1.0.0 .

Komut tamamlandığında, yeni kapsayıcıyı yerel olarak çalıştırabilirsiniz.

Derlemeyi doğrulamak için docker run komutunu kullanarak görüntüyü yerel bir kapsayıcıda çalıştırın, <DOCKER-ID> yerine Docker Hub hesap kimliğinizi yazın ve bağlantı noktaları -p 8080:80 bağımsız değişkenini ekleyin:

docker run -p 8080:80 -it <DOCKER-ID>/azurefunctionsimage:v1.0.0

Görüntü yerel kapsayıcıda başladıktan sonra, öncekiyle aynı karşılama iletisini görüntülemesi gereken http://localhost:8080/api/HttpExample adresine gidin. Oluşturduğunuz HTTP ile tetiklenen işlev anonim yetkilendirme kullandığından, erişim anahtarı almak zorunda kalmadan kapsayıcıda çalışan işlevi çağırabilirsiniz. Daha fazla bilgi için bkz . Yetkilendirme anahtarları.

Görüntü yerel kapsayıcıda başladıktan sonra, öncekiyle aynı "merhaba" iletisini görüntülemesi gereken http://localhost:8080/api/HttpExample?name=Functions adresine gidin. Oluşturduğunuz HTTP ile tetiklenen işlev anonim yetkilendirme kullandığından, erişim anahtarı almak zorunda kalmadan kapsayıcıda çalışan işlevi çağırabilirsiniz. Daha fazla bilgi için bkz . Yetkilendirme anahtarları.

Kapsayıcıdaki işlev uygulamasını doğruladıktan sonra yürütmeyi durdurmak için Ctrl+C'ye (Command+ macOS'ta) basın.

Kapsayıcı görüntüsünü kayıt defterinde yayımlama

Kapsayıcı görüntünüzü bir barındırma ortamına dağıtım için kullanılabilir hale getirmek için kapsayıcı kayıt defterine göndermeniz gerekir. En iyi güvenlik uygulaması olarak bir Azure Container Registry örneği kullanmanız ve yönetilen kimlik tabanlı bağlantıları zorunlu kılmanız gerekir. Docker Hub, paylaşılan gizli dizileri kullanarak kimlik doğrulaması yapmanızı gerektirir ve bu da dağıtımlarınızı daha savunmasız hale getirir.

Azure Container Registry, kapsayıcı görüntülerini ve ilgili yapıtları oluşturmaya, depolamaya ve yönetmeye yönelik özel bir kayıt defteri hizmetidir. Kapsayıcılarınızı Azure hizmetlerinde yayımlamak için özel bir kayıt defteri hizmeti kullanmalısınız.

  1. Geçerli Azure kimlik bilgilerinizi kullanarak kayıt defteri örneğinizde oturum açmak için bu komutu kullanın. <REGISTRY-NAME> değerini Container Registry örneğinizin adıyla değiştirin.

    az acr login --name <REGISTRY-NAME>
    
  2. Görüntünüzü kayıt defteri oturum açma sunucunuzun tam adıyla etiketlemek için bu komutu kullanın. <LOGIN-SERVER> etiketini kayıt defteri oturum açma sunucunuzun tam adıyla ve <DOCKER-ID> etiketini Docker kimliğinizle değiştirin.

    docker tag <DOCKER-ID>/azurefunctionsimage:v1.0.0 <LOGIN-SERVER>/azurefunctionsimage:v1.0.0 
    
  3. Kapsayıcıyı kayıt defteri örneğine göndermek için şu komutu kullanın:

    docker push <LOGIN-SERVER>/azurefunctionsimage:v1.0.0
    

İşleviniz için destekleyici Azure kaynakları oluşturma

Kapsayıcınızı Azure'a dağıtmadan önce üç kaynak oluşturmanız gerekir:

Önemli

Bu makalede şu anda bağlantı dizesi ve diğer paylaşılan gizli dizi kimlik bilgilerini kullanarak hem Azure Depolama hesabına hem de kapsayıcı kayıt defterinize nasıl bağlandığınız gösterilmektedir. En iyi güvenlik için, bunun yerine Microsoft Entra kimlik doğrulamasını kullanarak hem depolama hesabınıza hem de Azure Container Registry'ye yönelik yönetilen kimlik tabanlı bir bağlantı kullanmanız gerekir. Daha fazla bilgi için İşlevler geliştirici kılavuzuna bakın.

Bu öğeleri oluşturmak için aşağıdaki komutları kullanın. Hem Azure CLI hem de PowerShell desteklenir. Azure PowerShell kullanarak Azure kaynaklarınızı oluşturmak için Az PowerShell modülü, sürüm 5.9.0 veya üzeri de gereklidir.

  1. Henüz yapmadıysanız Azure'da oturum açın.

    az login
    

    Azure hesabınıza kaydolmanızı sağlayan az login komutudur.

  2. Seçtiğiniz bölgede adlı AzureFunctionsContainers-rg bir kaynak grubu oluşturun.

    az group create --name AzureFunctionsContainers-rg --location <REGION>
    

    az group create komutu bir kaynak grubu oluşturur. Yukarıdaki komutta, <REGION> yakınınızdaki bir bölgenin koduyla değiştirin. Bu kod, az account list-locations komutundan döndürülen kullanılabilir bir bölge kodudur.

  3. Kaynak grubunuz ve bölgenizde genel amaçlı bir depolama hesabı oluşturun.

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
    

    az storage account create komutu depolama hesabını oluşturur.

    Önceki örnekte, <STORAGE_NAME> ifadesini size uygun ve Azure Depolama'da benzersiz olan bir adla değiştirin. Depolama adları yalnızca 3 ile 24 karakter arasında sayı ve küçük harf içermelidir. Standard_LRSİşlevler tarafından desteklenen genel amaçlı bir hesap belirtir.

  4. Azure İşlevleri için adı olan bir Premium plan oluşturmak için komutu kullanın; bu plan, kendi içinde, Linux kapsayıcısında , ve Elastik Premium 1 fiyatlandırma katmanında () yer alacaktır.

    az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
    

    Premium planı burada kullanırız ve bu plan gerektiğinde ölçeklendirilebilir. Barındırma hakkında daha fazla bilgi için bkz. Azure İşlevleri barındırma planları karşılaştırması. Maliyetleri hesaplama hakkında daha fazla bilgi için İşlevler fiyatlandırma sayfasına bakın.

    Komut, aynı kaynak grubunda, işlev uygulamanızı izleyip günlükleri görüntüleyebileceğiniz ilişkili bir Azure Application Insights örneği de oluşturur. Daha fazla bilgi için Azure İşlevlerini İzleme bölümüne bakın. İnstans, siz onu etkinleştirene kadar maliyet oluşturmaya başlamaz.

Görüntüyle Azure'da işlev uygulaması oluşturma ve yapılandırma

Azure'daki bir işlev uygulaması, Azure İşlevleri barındırma planınızda işlevlerinizin yürütülmesini yönetir. Bu bölümde, önceki bölümde yer alan Azure kaynaklarını kullanarak kapsayıcı kayıt defterindeki bir görüntüden işlev uygulaması oluşturacak ve bunu Azure Depolama'ya bağlantı dizesi yapılandıracaksınız.

  1. Kapsayıcı kayıt defterinize bağlı olarak aşağıdaki komutu kullanarak bir işlev uygulaması oluşturun:

    az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 
    

    Bu örnekte, <STORAGE_NAME> yerine önceki bölümde depolama hesabı için kullandığınız adı yazın. Ayrıca, <APP_NAME>’yı size uygun olan ve genel olarak benzersiz bir isimle değiştirin ve <DOCKER_ID> veya <LOGIN_SERVER>’yi sırasıyla Docker Hub hesap kimliğiniz veya Container Registry sunucunuzla değiştirin. Özel bir kapsayıcı kayıt defterinden dağıtım yaparken, görüntü adı kayıt defterinin URL'sini gösterir.

    İşlev uygulamasını ilk oluşturduğunuzda, ilk görüntüyü Docker Hub'ınızdan çeker. Azure'a sürekli dağıtımı, kapsayıcı kayıt defterinizden de etkinleştirebilirsiniz.

    İpucu

    ANSI denetim karakterlerinin DisableColorkapsayıcı günlüklerine yazılmasını önlemek için host.json dosyasındaki ayarı kullanabilirsiniz.

  2. Oluşturduğunuz depolama hesabının bağlantı dizesi almak için aşağıdaki komutu kullanın:

    az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
    

    Depolama hesabı için bağlantı dizisi, az storage account show-connection-string komutu kullanılarak döndürülür.

    Önemli

    Bu makalede şu anda bir bağlantı dizesi kullanarak varsayılan depolama hesabına nasıl bağlandığınız gösterilmektedir. En iyi güvenlik için bunun yerine Microsoft Entra kimlik doğrulamasını kullanarak Azure Depolama'ya yönetilen kimlik tabanlı bir bağlantı oluşturmanız gerekir. Daha fazla bilgi için İşlevler geliştirici kılavuzuna bakın.

    değerini daha önce oluşturduğunuz depolama hesabının adıyla değiştirin <STORAGE_NAME> .

  3. ayarı işlev uygulamasına eklemek için aşağıdaki komutu kullanın:

    az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
    

    az functionapp config appsettings set komutu ayarı oluşturur.

    Bu komutta, <APP_NAME> öğesini işlev uygulamanızın adıyla ve <CONNECTION_STRING> öğesini önceki adımdaki bağlantı dizesiyle değiştirin. Bağlantı, ile DefaultEndpointProtocol=başlayan uzun kodlanmış bir dize olmalıdır.

  4. İşlev artık depolama hesabına erişmek için bu bağlantı dizesi kullanabilir.

Azure'da işlevlerinizi doğrulama

Görüntü Azure'daki işlev uygulamanıza dağıtıldığında artık HTTP istekleri aracılığıyla işlevi çağırabilirsiniz.

  1. Yeni işlevinizin URL'sini almak için aşağıdaki az functionapp function show komutu çalıştırın:

    az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate 
    

    İşlev uygulamanızın adıyla <APP_NAME> ifadesini değiştirin.

  1. Aldığınız URL'yi kullanarak HttpExample işlev uç noktasını çağırın ve ?name=Functions sorgu dizesini ekleyin.
  1. İşlev uç noktasını çağırmak için az önce aldığınız URL'yi HttpExample kullanın.

Bu URL'ye gittiğinizde, tarayıcının işlevi yerel olarak çalıştırdığınızdakine benzer bir çıkış görüntülemesi gerekir.

Kaynakları temizleme

Bu makalede oluşturduğunuz kaynakları kullanarak Azure İşlevi ile çalışmaya devam etmek istiyorsanız, tüm bu kaynakları yerinde bırakabilirsiniz. Azure İşlevleri için bir Premium Plan oluşturduğunuz için, sürekli masraflar olarak günde bir veya iki ABD doları maliyete girersiniz.

Devam eden maliyetleri önlemek için kaynak grubunu silip AzureFunctionsContainers-rg bu gruptaki tüm kaynakları temizleyin:

az group delete --name AzureFunctionsContainers-rg

Sonraki adımlar