Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Veri API'si oluşturucusu, uygulama yığınınızın bir parçası olarak Azure Container Apps gibi Azure hizmetlerine hızla dağıtılabilir. Bu öğreticide, Azure'a Veri API oluşturucusu dağıtırken sık kullanılan görevleri otomatikleştirmek için Azure CLI'yi kullanacaksınız. İlk olarak, Data API builder ile bir kapsayıcı görüntüsü derleyip Azure Container Registry'de depolarsınız. Ardından kapsayıcı görüntüsü, bir destekleyici Azure SQL veritabanı ile Azure Container Apps’e dağıtılır. Eğitimin tamamı her bileşeni yönetilen kimlikleri kullanarak kimlik doğrulaması yapacak şekilde tasarlanmıştır.
Bu eğitimde, siz:
- Rol tabanlı erişim denetimi izinleriyle yönetilen kimlik oluşturma
- Örnek AdventureWorksLT veri kümesiyle Azure SQL'i dağıtma
- Azure Container Registry'de kapsayıcı görüntüsünü hazırlama
- Azure Container App'i Veri API oluşturucu kapsayıcı görüntüsüyle dağıtma
Eğer bir Azure aboneliğiniz yoksa, başlamadan önce ücretsiz bir hesap oluşturun.
Önkoşullar
- Azure aboneliği
- Azure Cloud Shell
- Azure Cloud Shell, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamıdır. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için bu kabuğu ve önceden yüklenmiş komutlarını kullanın. Azure Cloud Shell'i başlatmak için:
- Bu makalenin içindeki bir kod veya komut bloğunda Deneyin'i seçin. Deneyin seçildiğinde kod veya komut otomatik olarak Cloud Shell'e kopyalanmaz.
- adresine https://shell.azure.comgidin veya Cloud Shell'i Başlat'ı seçin.
- Azure portalının () menü çubuğunda https://portal.azure.com seçin
- Azure Cloud Shell, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamıdır. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için bu kabuğu ve önceden yüklenmiş komutlarını kullanın. Azure Cloud Shell'i başlatmak için:
Kapsayıcı uygulama oluştur
İlk olarak, sistem tarafından atanan yönetilen kimliğe sahip bir Azure Container Apps örneği oluşturun. Bu kimliğe sonunda Azure SQL ve Azure Container Registry'ye erişmek için rol tabanlı erişim denetimi izinleri verilir.
Bu öğreticinin devamında birden çok kaynak adı için kullanılacak evrensel
SUFFIXbir değişken oluşturun.let SUFFIX=$RANDOM*$RANDOMLOCATIONBu öğreticide kullanmayı seçtiğiniz Azure bölgesiyle bir değişken oluşturun.LOCATION="<azure-region>"Uyarı
Örneğin, Batı ABD bölgesine dağıtmak istiyorsanız bu betiği kullanabilirsiniz.
LOCATION="westus"Geçerli abonelik için desteklenen bölgelerin listesi için
az account list-locationsaz account list-locations --query "[].{Name:displayName,Slug:name}" --output tableDaha fazla bilgi için bkz. Azure bölgeleri.
Kaynak grubu adıyla adlı
RESOURCE_GROUP_NAMEbir değişken oluşturun. Bu kılavuz için öneririzmsdocs-dab-*. Bu öğreticide bu değeri birden çok kez kullanırsınız.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"kullanarak
az group createyeni bir kaynak grubu oluşturun.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"Azure Container Apps örneğiniz için benzersiz olarak oluşturulmuş adlarla
API_CONTAINER_NAMEveCONTAINER_ENV_NAMEisimli değişkenler oluşturun. Öğretici boyunca bu değişkenleri kullanırsınız.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"Yeni bir Azure Container Apps ortamı oluşturmak için kullanın
az containerapp env create.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATIONDAB kapsayıcı görüntüsünü ve
mcr.microsoft.com/azure-databases/data-api-builderkomutunu kullanarakaz containerapp createyeni bir kapsayıcı uygulaması oluşturun. Bu kapsayıcı uygulaması başarıyla çalışıyor, ancak herhangi bir veritabanına bağlı değil.az containerapp create \ --resource-group $RESOURCE_GROUP_NAME \ --environment $CONTAINER_ENV_NAME \ --name $API_CONTAINER_NAME \ --image "mcr.microsoft.com/azure-databases/data-api-builder" \ --ingress "external" \ --target-port "5000" \ --system-assignedkullanarak yönetilen kimliğin
az identity showtanımlayıcısını alın ve değerini adlıMANAGED_IDENTITY_PRINCIPAL_IDbir değişkende depolayın.MANAGED_IDENTITY_PRINCIPAL_ID=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "identity.principalId" \ --output "tsv" \ )Tavsiye
Bu komutun çıkışını istediğiniz zaman kontrol edebilirsiniz.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
İzin atama
Şimdi, Azure SQL ve Azure Container Registry'den verileri okumak için sistem tarafından atanan yönetilen kimlik izinlerini atayın. Ayrıca, Azure Container Registry'ye yazmak için kimlik izinlerinizi atayın.
Kaynak grubunun tanımlayıcısını depolamak için adlı
RESOURCE_GROUP_IDbir değişken oluşturun. kullanarakaz group showtanımlayıcıyı alın. Bu öğreticide bu değişkeni birden çok kez kullanırsınız.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )Tavsiye
Bu komutun çıkışını istediğiniz zaman kontrol edebilirsiniz.
echo $RESOURCE_GROUP_IDAzure Container Registry'ye kapsayıcı gönderebilmeniz için
az role assignment createrolünü hesabınıza atamak için kullanın.CURRENT_USER_PRINCIPAL_ID=$( \ az ad signed-in-user show \ --query "id" \ --output "tsv" \ ) # AcrPush az role assignment create \ --assignee $CURRENT_USER_PRINCIPAL_ID \ --role "8311e382-0749-4cb8-b61a-304f252e45ec" \ --scope $RESOURCE_GROUP_ID'yi tekrar kullanarak rolünü yönetilen kimliğinize atayın. Bu atama, yönetilen kimliğin Azure Container Registry'den kapsayıcı görüntüleri çekmesine izin verir. Yönetilen kimlik sonunda bir Azure Container Apps örneğine atanır.
# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Veritabanını dağıtma
Ardından Azure SQL hizmetinde yeni bir sunucu ve veritabanı dağıtın. Veritabanı AdventureWorksLT örnek veri kümesini kullanır.
Azure SQL server örneğiniz için benzersiz olarak oluşturulmuş bir adla adlı
SQL_SERVER_NAMEbir değişken oluşturun. Bu değişkeni bu bölümün ilerleyen bölümlerinde kullanacaksınız.SQL_SERVER_NAME="srvr$SUFFIX"kullanarak yeni bir Azure SQL
az sql server createkaynağı oluşturun. Yönetilen kimliği bu sunucunun yöneticisi olarak yapılandırın.az sql server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $SQL_SERVER_NAME \ --location $LOCATION \ --enable-ad-only-auth \ --external-admin-principal-type "User" \ --external-admin-name $API_CONTAINER_NAME \ --external-admin-sid $MANAGED_IDENTITY_PRINCIPAL_IDAzure hizmetlerinden erişime izin veren bir güvenlik duvarı kuralı oluşturmak için kullanın
az sql server firewall-rule create.az sql server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "AllowAzure" \ --start-ip-address "0.0.0.0" \ --end-ip-address "0.0.0.0"Azure SQL sunucusunda
az sql db createadlı bir veritabanı oluşturmak içinadventureworkskullanın. Veritabanını örnek verileri kullanacak şekildeAdventureWorksLTyapılandırın.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"Azure SQL sunucu örneğinizdeki veritabanının
SQL_CONNECTION_STRINGbağlantı dizesiyle adlıadventureworksbir değişken oluşturun. Bağlantı dizesini, sunucunun tam etki alanı adı ileaz sql server showkullanarak oluşturun. Bu değişkeni bu öğreticide daha sonra kullanacaksınız.SQL_SERVER_ENDPOINT=$( \ az sql server show \ --resource-group $RESOURCE_GROUP_NAME \ --name $SQL_SERVER_NAME \ --query "fullyQualifiedDomainName" \ --output "tsv" \ ) SQL_CONNECTION_STRING="Server=$SQL_SERVER_ENDPOINT;Database=adventureworks;Encrypt=true;Authentication=Active Directory Default;"Tavsiye
Bu komutun çıkışını istediğiniz zaman kontrol edebilirsiniz.
echo $SQL_CONNECTION_STRING
Kapsayıcı görüntüsü oluşturma
Ardından Dockerfile kullanarak bir kapsayıcı görüntüsü oluşturun. Ardından bu kapsayıcı görüntüsünü yeni oluşturulan bir Azure Container Registry örneğine dağıtın.
Azure Container Registry örneğiniz için benzersiz olarak oluşturulmuş bir adla adlı
CONTAINER_REGISTRY_NAMEbir değişken oluşturun. Bu değişkeni bu bölümün ilerleyen bölümlerinde kullanacaksınız.CONTAINER_REGISTRY_NAME="reg$SUFFIX"kullanarak
az acr createyeni bir Azure Container Registry örneği oluşturun.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled falseadlı
Dockerfileçok aşamalı bir Dockerfile oluşturun. dosyasında bu adımları uygulayın.Derleme aşamasının temelinde
mcr.microsoft.com/dotnet/sdkkapsayıcı görüntüsünü kullanın.DAB CLI'yi yükleyin.
Bağlantı dizesi olarak ortam değişkenini
mssqlkullanarak SQL veritabanı bağlantısı (DATABASE_CONNECTION_STRING) için bir yapılandırma dosyası oluşturun.Producttablosuna eşlenenSalesLT.Productadlı bir varlık oluşturun.Yapılandırma dosyasını son
mcr.microsoft.com/azure-databases/data-api-builderkapsayıcı görüntüsüne kopyalayın.
FROM mcr.microsoft.com/dotnet/sdk:8.0-cbl-mariner2.0 AS build WORKDIR /config RUN dotnet new tool-manifest RUN dotnet tool install Microsoft.DataApiBuilder RUN dotnet tool run dab -- init --database-type "mssql" --connection-string "@env('DATABASE_CONNECTION_STRING')" RUN dotnet tool run dab -- add Product --source "SalesLT.Product" --permissions "anonymous:read" FROM mcr.microsoft.com/azure-databases/data-api-builder COPY --from=build /config /AppKullanarak
az acr buildDockerfile'i Azure Container Registry görevi olarak oluştur.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .az acr showkullanarak kapsayıcı kayıt defterinin uç noktasını alın ve bunuCONTAINER_REGISTRY_LOGIN_SERVERadlı bir değişkende saklayın.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )Tavsiye
Bu komutun çıkışını istediğiniz zaman kontrol edebilirsiniz.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Kapsayıcı imajını dağıt
Son olarak Azure Container App'i yeni özel kapsayıcı görüntüsü ve kimlik bilgileriyle güncelleştirin. Veritabanı bağlantısını doğrulamak için çalışan uygulamayı test edin.
Kapsayıcı uygulamasını
az containerapp registry setkullanarak kapsayıcı kayıt defterini kullanacak şekilde yapılandırın.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"Azure SQL bağlantı dizesiyle
az containerapp secret setadlı bir gizli oluşturmak içinconn-stringkullanın.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"Önemli
Bu bağlantı dizesi herhangi bir kullanıcı adı veya parola içermez. Bağlantı dizesi, Azure SQL veritabanına erişmek için yönetilen kimliği kullanır. Bu, bağlantı dizesini sunucuda gizli bilgi olarak kullanılmasını güvenli kılar.
kullanarak
az containerapp updatekapsayıcı uygulamasını yeni özel kapsayıcı görüntünüzle güncelleştirin. Önceden oluşturulanDATABASE_CONNECTION_STRINGgizli bilgiden okumak içinconn-stringortam değişkenini ayarlayın.az containerapp update \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --image "$CONTAINER_REGISTRY_LOGIN_SERVER/adventureworkslt-dab:latest" \ --set-env-vars DATABASE_CONNECTION_STRING=secretref:conn-stringÇalışan kapsayıcı uygulamasındaki en son revizyonun tam etki alanı adını
az containerapp showkullanarak alın. Bu değeri adlıAPPLICATION_URLbir değişkende depolayın.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )Tavsiye
Bu komutun çıkışını istediğiniz zaman kontrol edebilirsiniz.
echo $APPLICATION_URLURL'ye gidin ve REST API'yi test edin
Product.echo "https://$APPLICATION_URL/api/Product"Uyarı
Dağıtım bir dakika kadar sürebilir. Başarılı bir yanıt görmüyorsanız, bekleyin ve tarayıcınızı yenileyin.
Kaynakları temizle
Örnek uygulamaya veya kaynaklara artık ihtiyacınız kalmadığında, ilgili dağıtımı ve tüm kaynakları kaldırın.
az group delete \
--name $RESOURCE_GROUP_NAME