Aracılığıyla paylaş


Azure İşlevleri'nde dağıtım teknolojileri

Azure İşlevleri proje kodunuzu Azure'a dağıtmak için birkaç farklı teknoloji kullanabilirsiniz. Bu makalede, kullanabileceğiniz dağıtım yöntemlerine genel bir bakış ve çeşitli senaryolarda kullanılacak en iyi yönteme yönelik öneriler sağlanır. Ayrıca, temel dağıtım teknolojileriyle ilgili ayrıntılı ve önemli ayrıntıların bir listesini sağlar.

Dağıtım yöntemleri

Azure'da işlev uygulamanıza kod yayımlamak için kullandığınız dağıtım teknolojisi, özel gereksinimlerinize ve geliştirme döngüsündeki noktaya bağlıdır. Örneğin, geliştirme ve test sırasında doğrudan Visual Studio Code gibi geliştirme aracınızdan dağıtabilirsiniz. Uygulamanız üretim aşamasındayken, kaynak denetiminden veya doğrulama ve test içerebilen otomatik yayımlama işlem hattı kullanarak sürekli yayımlama olasılığınız daha yüksektir.

Aşağıdaki tabloda, kod projeniz için kullanılabilir dağıtım yöntemleri açıklanmaktadır.

Dağıtım türü Yöntemler En iyi...
Araçlar tabanlı Azure CLI
Visual Studio Code yayımlama
Visual Studio yayımlama
Temel Araçlar yayımlama
Geliştirme sırasındaki dağıtımlar ve diğer geliştirilmiş dağıtımlar. Yerel geliştirme araçlarını kullanarak kodunuzu isteğe bağlı olarak dağıtma.
App Service tarafından yönetilen Dağıtım Merkezi (CI/CD)
Kapsayıcı dağıtımları
Kaynak denetiminden veya kapsayıcı kayıt defterinden sürekli dağıtım (CI/CD). Dağıtımlar App Service platformu (Kudu) tarafından yönetilir.
Dış işlem hatları Azure Pipelines
GitHub Actions
Doğrulama, test ve otomatik dağıtımın parçası olarak çalıştırılması gereken diğer eylemleri içeren üretim işlem hatları. Dağıtımlar işlem hattı tarafından yönetilir.

Belirli dağıtımlar, belirli senaryoya göre en iyi teknolojiyi kullanmalıdır. Dağıtım yöntemlerinin çoğu, dağıtım için önerilen zip dağıtımını temel alır.

Dağıtım teknolojisi kullanılabilirliği

Dağıtım yöntemi, işlev uygulamanızı çalıştırdığınız barındırma planına ve işletim sistemine de bağlıdır.

İşlevler şu anda işlev uygulamalarınızı barındırmak için beş seçenek sunar:

Her planın farklı davranışları vardır. Her barındırma planı ve işletim sistemi için tüm dağıtım teknolojileri kullanılamaz. Bu grafik desteklenen dağıtım teknolojileri hakkında bilgi sağlar:

Dağıtım teknolojisi Esnek Tüketim Tüketim Elastik Premium Ayrılmış Konteyner Uygulamaları
Tek dağıtım
Zip dağıtımı
Dış paket URL'si1
Docker kapsayıcısı Yalnızca Linux Yalnızca Linux Yalnızca Linux
Kaynak denetimi Yalnızca Windows
Yerel Git1 Yalnızca Windows
FTPS1 Yalnızca Windows
Portal içi düzenleme2

1 Tetikleyicileri el ile eşitlemenizi gerektiren dağıtım teknolojileri önerilmez.
2 Kod, portal dışından işlev uygulamanıza dağıtıldığında portal içi düzenleme devre dışı bırakılır. Portal içi düzenleme için dil desteği ayrıntıları da dahil olmak üzere daha fazla bilgi için bkz . Dil desteği ayrıntıları.

Temel kavramlar

Bazı temel kavramlar, dağıtımların Azure İşlevleri nasıl çalıştığını anlamak için kritik öneme sahiptir.

Tetikleyici eşitlemesi

Tetikleyicilerinizden herhangi birini değiştirdiğinizde, İşlevler altyapısı değişikliklerin farkında olmalıdır. Eşitleme birçok dağıtım teknolojisi için otomatik olarak gerçekleşir. Ancak bazı durumlarda tetikleyicilerinizi el ile eşitlemeniz gerekir.

Bu dağıtım seçeneklerini kullanırken tetikleyicileri el ile eşitlemeniz gerekir:

Tetikleyicileri şu yollardan biriyle eşitleyebilirsiniz:

  • İşlev uygulamanızı Azure portalında yeniden başlatın.

  • Bu örnekte olduğu az rest gibi API'yi çağıran syncfunctiontriggers bir HTTP POST isteği göndermek için komutunu kullanın:

    az rest --method post --url https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Web/sites/<APP_NAME>/syncfunctiontriggers?api-version=2016-08-01
    

Dağıtım paketinin güncelleştirilmiş bir sürümünü dağıtıp aynı dış paket URL'sini koruduğunuzda, işlev uygulamanızı el ile yeniden başlatmanız gerekir. Yeniden başlatma, ana bilgisayara güncelleştirmelerinizi aynı paket URL'sinden eşitlemesi ve yeniden dağıtması gerektiğini gösterir. Functions ana bilgisayarı, uygulama başlatıldıktan sonra bir arka plan tetikleyici senkronizasyonu da gerçekleştirir. Ancak Tüketim ve Elastik Premium barındırma planları için şu senaryolarda tetikleyicileri el ile eşitlemeniz gerekir:

  • Dağıtımlar ARM şablonlarını veya Bicep veya Terraform dosyalarını kullanarak kaynak yöneticisi tabanlı dağıtıma sahip bir dış paket URL'si kullandığında.
  • Aynı dış paket URL'sini kullanarak dağıtım paketini yerinde güncelleştirdiğinizde.

Uzaktan derleme

Azure İşlevleri dağıtım sırasında kod projenizin uzak derlemesini gerçekleştirmesini isteyebilirsiniz. Bu senaryolarda, yerel olarak derlemek yerine uzak derleme istemeniz gerekir:

  • Bir uygulamayı Bir Windows bilgisayarda geliştirilen Linux tabanlı işlev uygulamasına dağıtıyorsunuz. Bu genellikle Python uygulaması geliştirme için böyle bir durumdur. Dağıtım paketini Windows'da yerel olarak oluştururken yanlış kitaplıkların kullanılmasıyla sonuçlanabilir.
  • Projenizin özel paket dizinine bağımlılıkları var.
  • Dağıtım paketinizin boyutunu küçültmek istiyorsunuz.

Uzaktan derleme isteğinde bulunma şekliniz, uygulamanızın Windows veya Linux üzerinde Azure'da çalışıp çalışmadığına bağlıdır.

Windows üzerinde çalışan tüm işlev uygulamalarının scm kudu tarafından sağlanan küçük bir yönetim uygulaması vardır. Bu site, Azure İşlevleri için dağıtım ve derleme mantığının büyük bir kısmını işler.

Bir uygulama Windows'a dağıtıldığında, (C#) veya dotnet restore (JavaScript) gibi npm install dile özgü komutlar çalıştırılır.

Dağıtım sırasında uzak derlemeler kullanılırken aşağıdaki noktalar geçerlidir:

  • Uzak derlemeler, Tüketim planında Linux üzerinde çalışan işlev uygulamaları için desteklenir. Ancak, bir (Kudu) sitesi olmadığından scm bu uygulamalar için dağıtım seçenekleri sınırlıdır.
  • Premium planda veya Ayrılmış (App Service) planında Linux üzerinde çalışan işlev uygulamalarının bir scm (Kudu) sitesi vardır, ancak Windows ile karşılaştırıldığında sınırlıdır.
  • Bir uygulama paketten çalıştır'ı kullanırken uzak derlemeler gerçekleştirilmez. Bu gibi durumlarda uzak derlemeyi kullanmayı öğrenmek için bkz . Zip dağıtımı.
  • Özellik kullanıma sunulmadan önce uygulamanız oluşturulduğunda (1 Ağustos 2019) uzaktan derlemeyle ilgili sorunlarla karşılaşabilirsiniz. Eski uygulamalar için yeni bir işlev uygulaması oluşturun veya işlev uygulamanızı güncelleştirmek için komutunu çalıştırın az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME> . Bu komutun başarılı olması için iki deneme gerekebilir.

Uygulama içeriği depolama

Paket tabanlı dağıtım yöntemleri paketi, AzureWebJobsStorage ayarında tanımlanan işlev uygulamasıyla ilişkili depolama hesabında depolar. Kullanılabilir olduğunda, Tüketim ve Elastik Premium planı uygulamaları bu hesaptan Azure Dosyalar içerik paylaşımını kullanmaya çalışır, ancak paketi başka bir konumda da tutabilirsiniz. Esnek Tüketim planı uygulamaları, dağıtım için kullanılacak farklı bir depolama hesabı yapılandırmadığınız sürece varsayılan depolama hesabında bir depolama kapsayıcısı kullanır. Daha fazla bilgi için, sonraki bölümde ele alınan her dağıtım teknolojisinde uygulama içeriğinin depolandığı yer bölümündeki ayrıntıları gözden geçirin.

Önemli

Depolama hesabı, bazen uygulama kodunun kendisi de dahil olmak üzere önemli uygulama verilerini depolamak için kullanılır. Diğer uygulama ve kullanıcılardan depolama hesabına erişimi sınırlamanız gerekir.

Dağıtım teknolojisi ayrıntıları

Aşağıdaki dağıtım yöntemleri Azure İşlevleri'de kullanılabilir. Her barındırma planının hangi teknolojileri desteklediğini belirlemek için dağıtım teknolojisi kullanılabilirlik tablosuna bakın.

Tek dağıtım

Bir dağıtım, Esnek Tüketim planındaki uygulamalar için desteklenen tek dağıtım teknolojisidir. Sonuç, işlev uygulamanızın üzerinde çalıştığı çalışmaya hazır bir .zip paketidir.

Nasıl kullanılır: Visual Studio Code yayımlama özelliğiyle veya Azure İşlevleri Core Tools veya Azure CLI kullanarak komut satırından dağıtın. Azure Dev Ops Görev ve GitHub Eylemimiz, bir Flex Consumption uygulamasının dağıtıldığını algıladığında benzer şekilde tek bir dağıtımdan yararlanıyor.

Bir Flex Consumption uygulaması oluşturduğunuzda, bir dağıtım depolama (blob) kapsayıcısı ve bunun için bir kimlik doğrulama yöntemi belirtmeniz gerekir. Varsayılan olarak, kimlik doğrulama yöntemiyle bağlantı dizesi olan bağlantıyla aynı depolama hesabı AzureWebJobsStorage kullanılır. Bu nedenle, dağıtım ayarlarınız uygulama oluşturma sırasında uygulama ayarlarına gerek kalmadan yapılandırılır.

Ne zaman kullanılır: Bir dağıtım, Flex Tüketim planında çalışan işlev uygulamaları için kullanılabilen tek dağıtım teknolojisidir.

Uygulama içeriğinin depolandığı yer: Flex Consumption işlev uygulaması oluşturduğunuzda bir dağıtım depolama kapsayıcısı belirtirsiniz. Bu, araçlarınızın dağıttığınız uygulama içeriğini karşıya yüklediği bir blob kapsayıcısıdır. Konumu değiştirmek için Azure portalındaki Dağıtım Ayarları dikey penceresini ziyaret edebilir veya Azure CLI'yı kullanabilirsiniz.

Zip dağıtımı

Zip dağıtımı, Tüketim, Elastik Premium ve App Service (Ayrılmış) planlarında işlev uygulamaları için varsayılan ve önerilen dağıtım teknolojisidir. Sonuç olarak işlev uygulamanızın üzerinde çalıştığı çalışmaya hazır bir .zip paketi elde edin. Platformumuzun uygulama içeriğinizi uzaktan oluşturmaktan ve depolamaktan sorumlu olması, dış paket URL'sinden farklıdır.

Nasıl kullanılır: Sık kullandığınız istemci aracını kullanarak dağıtın: Visual Studio Code, Visual Studio veya Azure İşlevleri Core Tools veya Azure CLI kullanarak komut satırından. Azure Dev Ops Görev ve GitHub Eylemimizde benzer şekilde zip dağıtımına sahiptir.

Zip deploy kullanarak dağıttığınızda, uygulamanızı paketten çalışacak şekilde ayarlayabilirsiniz. Paketten çalıştırmak için uygulama ayarı değerini olarak WEBSITE_RUN_FROM_PACKAGEayarlayın1. Zip dağıtımını öneririz. Uygulamalarınız için daha hızlı yükleme süreleri sağlar ve VS Code, Visual Studio ve Azure CLI için varsayılan değerdir.

Ne zaman kullanılır: Zip dağıtımı, Windows Tüketimi, Windows ve Linux Elastik Premium ve Windows ve Linux App Service (Ayrılmış) planlarında işlev uygulamaları için varsayılan ve önerilen dağıtım teknolojisidir.

Uygulama içeriğinin depolandığı yer: Varsayılan olarak zip dağıtımından alınan uygulama içeriği, işlev uygulaması oluşturulduğunda belirtilen depolama hesabından Azure Dosyalar tarafından yedeklenebilen dosya sisteminde depolanır. Linux Tüketimi'nde, uygulama içeriği bunun yerine uygulama ayarı tarafından AzureWebJobsStorage belirtilen depolama hesabındaki bir blobda kalıcı olur ve uygulama ayarı WEBSITE_RUN_FROM_PACKAGE blob URL'sinin değerini alır.

Dış paket URL'si

Dağıtımların nasıl gerçekleştirildiğini el ile denetlemek istiyorsanız dış paket URL'si bir seçenektir. Yerleşik uygulama içeriğinizi içeren çalışmaya hazır bir .zip paketini blob depolamaya yükleme ve bu dış URL'ye işlev uygulamanızda uygulama ayarı olarak başvurma sorumluluğunu alırsınız. Uygulamanız her yeniden başlatıldığında paketi getirir, bağlar ve Paketten Çalıştır modunda çalışır.

Nasıl kullanılır: Uygulama ayarlarınıza ekleyin WEBSITE_RUN_FROM_PACKAGE . Bu ayarın değeri, uygulamanızın çalışmasını istediğiniz paketin konumunu gösteren bir blob URL'si olmalıdır. Ayarları portaldan veya Azure CLI kullanarak ekleyebilirsiniz.

Azure Blob Depolama kullanıyorsanız, İşlev uygulamanız yönetilen kimlik tabanlı bağlantı kullanarak veya paylaşılan erişim imzası (SAS) ile kapsayıcıya erişebilir. Seçtiğiniz seçenek, WEBSITE_RUN_FROM_PACKAGE değeri olarak kullandığınız URL türünü etkiler. Yönetilen kimlik, genel güvenlik için ve SAS belirteçlerinin süresi dolduğundan ve el ile korunduğundan önerilir.

bir işlev uygulamasının başvurduğunu paket dosyasını her dağıttığınızda, ilk dağıtım dahil olmak üzere tetikleyicileri el ile eşitlemeniz gerekir. URL'nin kendisini değil paket dosyasının içeriğini değiştirdiğinizde, tetikleyicileri eşitlemek için işlev uygulamanızı da yeniden başlatmanız gerekir. Bu dağıtım teknolojisini yapılandırma ile ilgili nasıl yapılır kılavuzumuza bakın.

Ne zaman kullanılır: Uzak bir derlemenin gerçekleşmesini istemediğinizde, Linux Tüketim planında çalışan uygulamalar için desteklenen tek dağıtım yöntemi dış paket URL'sidir. Bu yöntem, uygulamanızı Azure Dosyalar olmadan oluştururken de önerilen dağıtım teknolojisidir. Linux üzerinde çalışan ölçeklenebilir uygulamalar için bunun yerine Flex Consumption planı barındırmayı göz önünde bulundurmanız gerekir.

Uygulama içeriğinin depolandığı yer: Uygulama içeriğinizi blob depolamaya yüklemek sizin sorumluluğunuzdadır. Herhangi bir blob depolama hesabı kullanabilirsiniz, ancak Azure Blob Depolama önerilir.

Docker kapsayıcısı

Linux kapsayıcısında çalışan bir işlev uygulaması dağıtabilirsiniz.

Nasıl kullanılır:İşlevlerinizi bir Linux kapsayıcısında oluşturun ve ardından kapsayıcıyı Azure İşlevleri veya başka bir kapsayıcı konağındaki Premium veya Ayrılmış plana dağıtın. Kapsayıcılı işlev uygulaması oluşturmak için kullandığınız projeniz için özelleştirilmiş bir Dockerfile oluşturmak üzere Azure İşlevleri Temel Araçları'nı kullanın. Kapsayıcıyı aşağıdaki dağıtımlarda kullanabilirsiniz:

  • Azure portalında oluşturduğunuz Azure İşlevleri kaynaklara dağıtın. Daha fazla bilgi için bkz . Kapsayıcıları kullanarak Azure portalı oluşturma.
  • Komut satırından oluşturduğunuz Azure İşlevleri kaynaklara dağıtın. Premium veya Ayrılmış (App Service) planı gerektirir. Nasıl yapılacağını öğrenmek için bkz. kapsayıcılı ilk Azure İşlevleri oluşturma.
  • Azure Container Apps'e dağıtma. Nasıl yapılacağını öğrenmek için bkz. Azure Container Apps'te ilk kapsayıcılı Azure İşlevleri oluşturma.
  • Azure Arc'a dağıtma (önizleme). Nasıl yapılacağını öğrenmek için bkz. Kapsayıcılarla çalışma ve Azure İşlevleri.
  • Kubernetes kümesine dağıtma. Azure İşlevleri Temel Araçları'nı kullanarak bir kümeye dağıtabilirsiniz. func kubernetes deploy komutunu kullanın.

Ne zaman kullanılır: İşlev uygulamanızın çalıştığı ve kapsayıcının barındırıldığı Linux ortamı üzerinde daha fazla denetime ihtiyacınız olduğunda Docker kapsayıcısı seçeneğini kullanın. Bu dağıtım mekanizması yalnızca Linux üzerinde çalışan işlevler için kullanılabilir.

Uygulama içeriğinin depolandığı yer: Uygulama içeriği, görüntünün bir parçası olarak belirtilen kapsayıcı kayıt defterinde depolanır.

Kaynak denetimi

İşlev uygulamanızla kaynak kodu deposu arasında sürekli tümleştirmeyi etkinleştirebilirsiniz. Kaynak denetimi etkinleştirildiğinde, bağlı kaynak deposundaki kod güncelleştirmeleri depodan en son kodun dağıtımını tetikler. Daha fazla bilgi için bkz. Azure İşlevleri için sürekli dağıtım.

Nasıl kullanılır: Kaynak denetiminden yayımlamayı ayarlamanın en kolay yolu, portalın İşlevler alanındaki Dağıtım Merkezi'ndendir. Daha fazla bilgi için bkz. Azure İşlevleri için sürekli dağıtım.

Ne zaman kullanılır: Kaynak denetimini kullanmak, işlev uygulamaları üzerinde işbirliği yapan ekipler için en iyi yöntemdir. Kaynak denetimi, daha karmaşık dağıtım işlem hatlarını etkinleştiren iyi bir dağıtım seçeneğidir. Kaynak denetimi genellikle depodaki güncelleştirmeler doğrulandıktan sonra üretime değiştirilebilen bir hazırlama yuvasında etkinleştirilir. Daha fazla bilgi için bkz. Azure İşlevleri dağıtım yuvaları.

Uygulama içeriğinin depolandığı yer: Uygulama içeriği kaynak denetim sistemindedir, ancak yerel olarak kopyalanmış ve oluşturulan bir uygulama içeriği, işlev uygulaması oluşturulduğunda belirtilen depolama hesabından Azure Dosyalar tarafından yedeklenebilen uygulama dosya sisteminde depolanır.

Yerel Git

Git kullanarak yerel makinenizden Azure İşlevleri kodu göndermek için yerel Git'i kullanabilirsiniz.

Nasıl kullanılır: Azure Uygulaması Hizmeti için Yerel Git dağıtımındaki yönergeleri izleyin.

Ne zaman kullanılır: Hata olasılığını azaltmak için tetikleyicileri el ile eşitlemenin ek adımını gerektiren dağıtım yöntemlerini kullanmaktan kaçınmanız gerekir. Mümkün olduğunda zip dağıtımını kullanın.

Uygulama içeriğinin depolandığı yer: Uygulama içeriği, işlev uygulaması oluşturulduğunda belirtilen depolama hesabından Azure Dosyalar tarafından yedeklenebilen dosya sisteminde depolanır.

FTP/S

Dosyaları doğrudan Azure İşlevleri aktarmak için FTP/S kullanabilirsiniz, ancak bu dağıtım yöntemi önerilmez. FTP kullanmayı planlamıyorsanız devre dışı bırakmanız gerekir. FTP kullanmayı seçerseniz, FTPS'yi zorunlu kılmanız gerekir. Azure portalında nasıl yapılacağını öğrenmek için bkz . FTPS'yi zorunlu kılma.

Nasıl kullanılır: FTPS kullanarak işlev uygulamanıza dağıtmak için kullanabileceğiniz URL'yi ve kimlik bilgilerini almak için FTPS dağıtım ayarlarındaki yönergeleri izleyin.

Ne zaman kullanılır: Hata olasılığını azaltmak için tetikleyicileri el ile eşitlemenin ek adımını gerektiren dağıtım yöntemlerini kullanmaktan kaçınmanız gerekir. Mümkün olduğunda zip dağıtımını kullanın.

Uygulama içeriğinin depolandığı yer: Uygulama içeriği dosya sisteminde depolanır. Uygulamanızın dosya sistemi varsayılan konak depolama hesabında Azure Dosyalar tarafından desteklendiğinde FTP/FTPS dağıtımları başarısız olur. FTP/FTPS, FTP sınırlamaları nedeniyle Azure Dosyalar'a bağlı depolama alanı olarak kullanıldığında başarısız oluyor.

Portal düzenleme

Portal tabanlı düzenleyicide, işlev uygulamanızdaki dosyaları doğrudan düzenleyebilirsiniz (değişikliklerinizi her kaydettiğinizde temelde dağıtılır).

Nasıl kullanılır: İşlevlerinizi Azure portalında düzenleyebilmek için, işlevlerinizi portalda oluşturmuş olmanız gerekir. Tek bir doğru kaynağını korumak için, başka bir dağıtım yöntemini kullanmak işlevinizi salt okunur hale getirir ve portal düzenlemesinin devam etmesini engeller. Azure portalında dosyalarınızı düzenleyebildiğiniz bir duruma dönmek için düzenleme modunu el ile uygulamasına Read/Write döndürebilir ve dağıtımla ilgili uygulama ayarlarını (örneğin) WEBSITE_RUN_FROM_PACKAGEkaldırabilirsiniz.

Ne zaman kullanılır: Portal, Azure İşlevleri kullanmaya başlamak için iyi bir yoldur. Azure portalındaki geliştirme sınırlamaları nedeniyle aşağıdaki istemci araçlarından birini daha gelişmiş geliştirme çalışmaları için kullanmanız gerekir:

Uygulama içeriğinin depolandığı yer: Uygulama içeriği, işlev uygulaması oluşturulduğunda belirtilen depolama hesabından Azure Dosyalar tarafından yedeklenebilen dosya sisteminde depolanır.

Dağıtım davranışları

güncelleştirmeleri işlev uygulama kodunuz için dağıttığınızda, şu anda yürütülen işlevler sonlandırılır. Dağıtım tamamlandıktan sonra, istekleri işlemeye başlamak için yeni kod yüklenir. Durum bilgisi olmayan ve savunma işlevleri yazmayı öğrenmek için Azure İşlevleri performansını ve güvenilirliğini geliştirme'yi gözden geçirin.

Bu geçiş üzerinde daha fazla denetime ihtiyacınız varsa dağıtım yuvalarını kullanmanız gerekir.

Dağıtım yuvaları

İşlev uygulamanızı Azure'a dağıttığınızda doğrudan üretim yerine ayrı bir dağıtım yuvasına dağıtabilirsiniz. Dağıtım yuvasına dağıtmak ve doğrulamadan sonra üretime geçmek, sürekli dağıtımı yapılandırmanın önerilen yoludur.

Yuvaya dağıtma yönteminiz, kullandığınız dağıtım aracına bağlıdır. Örneğin, Azure İşlevleri Temel Araçları kullanırken, komut için --slot belirli bir yuvanın adını belirtme seçeneğini eklersinizfunc azure functionapp publish.

Dağıtım yuvaları hakkında daha fazla bilgi için Azure İşlevleri Dağıtım Yuvaları belgelerine bakın.

Sonraki adımlar

İşlev uygulamalarınızı dağıtma hakkında daha fazla bilgi edinmek için şu makaleleri okuyun: