Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penyusun API Data dapat dengan cepat disebarkan ke layanan Azure seperti Azure Container Apps sebagai bagian dari tumpukan aplikasi Anda. Dalam tutorial ini, Anda menggunakan Azure CLI untuk mengotomatiskan tugas umum saat menyebarkan penyusun API Data ke Azure. Pertama, Anda membuat gambar kontainer dengan penyusun API Data dan menyimpannya di Azure Container Registry. Anda kemudian menyebarkan gambar kontainer ke Azure Container Apps dengan database Azure SQL yang mendukung. Seluruh tutorial mengautentikasi ke setiap komponen menggunakan identitas terkelola.
Di tutorial ini, Anda akan:
- Membuat identitas terkelola dengan izin kontrol akses berbasis peran
- Menyebarkan Azure SQL dengan sampel himpunan data AdventureWorksLT
- Tahapkan gambar kontainer di Azure Container Registry
- Menyebarkan Aplikasi Kontainer Azure dengan gambar kontainer penyusun API Data
Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.
Prasyarat
- Langganan Azure
- Azure Cloud Shell
- Azure Cloud Shell adalah lingkungan shell interaktif yang dapat Anda gunakan melalui browser Anda. Gunakan shell ini dan perintah yang telah diinstal sebelumnya untuk menjalankan kode dalam artikel ini, tanpa harus menginstal apa pun di lingkungan lokal Anda. Untuk memulai Azure Cloud Shell:
- Pilih Coba dalam kode atau blok perintah dalam artikel ini. Memilih Coba tidak secara otomatis menyalin kode atau perintah ke Cloud Shell.
- Buka https://shell.azure.com, atau pilih Luncurkan Cloud Shell.
- Pilih Cloud Shell di bilah menu portal Microsoft Azure (https://portal.azure.com)
- Azure Cloud Shell adalah lingkungan shell interaktif yang dapat Anda gunakan melalui browser Anda. Gunakan shell ini dan perintah yang telah diinstal sebelumnya untuk menjalankan kode dalam artikel ini, tanpa harus menginstal apa pun di lingkungan lokal Anda. Untuk memulai Azure Cloud Shell:
Membuat aplikasi kontainer
Pertama, buat instans Azure Container Apps dengan identitas terkelola yang ditetapkan sistem. Identitas ini akhirnya diberikan izin kontrol akses berbasis peran untuk mengakses Azure SQL dan Azure Container Registry.
Buat variabel universal
SUFFIXuntuk digunakan untuk beberapa nama sumber daya nanti dalam tutorial ini.let SUFFIX=$RANDOM*$RANDOMBuat
LOCATIONvariabel dengan wilayah Azure yang Anda pilih untuk digunakan dalam tutorial ini.LOCATION="<azure-region>"Nota
Misalnya, jika Anda ingin menyebarkan ke wilayah US Barat , Anda akan menggunakan skrip ini.
LOCATION="westus"Untuk daftar wilayah yang didukung untuk langganan saat ini, gunakan
az account list-locationsaz account list-locations --query "[].{Name:displayName,Slug:name}" --output tableUntuk informasi selengkapnya, lihat wilayah Azure.
Buat variabel bernama
RESOURCE_GROUP_NAMEdengan nama grup sumber daya. Untuk tutorial ini, kami sarankanmsdocs-dab-*. Anda menggunakan nilai ini beberapa kali dalam tutorial ini.RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"Buat grup sumber daya baru menggunakan
az group create.az group create \ --name $RESOURCE_GROUP_NAME \ --location $LOCATION \ --tag "source=msdocs-dab-tutorial"Buat variabel bernama
API_CONTAINER_NAMEdanCONTAINER_ENV_NAMEdengan nama yang dihasilkan secara unik untuk instans Azure Container Apps Anda. Anda menggunakan variabel ini di seluruh tutorial.API_CONTAINER_NAME="api$SUFFIX" CONTAINER_ENV_NAME="env$SUFFIX"Gunakan
az containerapp env createuntuk membuat lingkungan Azure Container Apps baru.az containerapp env create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_ENV_NAME \ --logs-destination none \ --location $LOCATIONBuat aplikasi kontainer baru menggunakan
mcr.microsoft.com/azure-databases/data-api-buildergambar kontainer DAB danaz containerapp createperintah . Aplikasi kontainer ini berhasil berjalan, tetapi tidak tersambung ke database apa pun.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-assignedDapatkan pengidentifikasi utama identitas terkelola menggunakan
az identity showdan simpan nilai dalam variabel bernamaMANAGED_IDENTITY_PRINCIPAL_ID.MANAGED_IDENTITY_PRINCIPAL_ID=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "identity.principalId" \ --output "tsv" \ )Petunjuk / Saran
Anda selalu dapat memeriksa output perintah ini.
echo $MANAGED_IDENTITY_PRINCIPAL_ID
Tetapkan izin
Sekarang, tetapkan izin identitas terkelola yang ditetapkan sistem untuk membaca data dari Azure SQL dan Azure Container Registry. Selain itu, tetapkan izin identitas Anda untuk menulis ke Azure Container Registry.
Buat variabel bernama
RESOURCE_GROUP_IDuntuk menyimpan pengidentifikasi grup sumber daya. Dapatkan pengidentifikasi menggunakanaz group show. Anda menggunakan variabel ini beberapa kali dalam tutorial ini.RESOURCE_GROUP_ID=$( \ az group show \ --name $RESOURCE_GROUP_NAME \ --query "id" \ --output "tsv" \ )Petunjuk / Saran
Anda selalu dapat memeriksa output perintah ini.
echo $RESOURCE_GROUP_IDGunakan
az role assignment createuntuk menetapkan peran AcrPush ke akun Anda sehingga Anda dapat mendorong kontainer ke Azure Container Registry.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_IDTetapkan peran AcrPull ke identitas terkelola Anda menggunakan
az role assignment createlagi. Penugasan ini memungkinkan identitas terkelola untuk menarik gambar kontainer dari Azure Container Registry. Identitas terkelola pada akhirnya akan ditetapkan ke instans Azure Container Apps.# AcrPull az role assignment create \ --assignee $MANAGED_IDENTITY_PRINCIPAL_ID \ --role "7f951dda-4ed3-4680-a7ca-43fe172d538d" \ --scope $RESOURCE_GROUP_ID
Menyebarkan database
Selanjutnya, sebarkan server dan database baru di layanan Azure SQL. Database menggunakan himpunan data sampel AdventureWorksLT .
Buat variabel bernama
SQL_SERVER_NAMEdengan nama yang dibuat secara unik untuk instans server Azure SQL Anda. Anda menggunakan variabel ini nanti di bagian ini.SQL_SERVER_NAME="srvr$SUFFIX"Buat sumber daya server Azure SQL baru menggunakan
az sql server create. Konfigurasikan identitas terkelola sebagai admin server ini.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_IDGunakan
az sql server firewall-rule createuntuk membuat aturan firewall untuk mengizinkan akses dari layanan Azure.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"Gunakan
az sql db createuntuk membuat database dalam server Azure SQL bernamaadventureworks. Konfigurasikan database untuk menggunakanAdventureWorksLTdata sampel.az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --name "adventureworks" \ --sample-name "AdventureWorksLT"Buat variabel bernama
SQL_CONNECTION_STRINGdengan string koneksi untukadventureworksdatabase di instans server Azure SQL Anda. Buat string koneksi dengan nama domain server yang sepenuhnya memenuhi syarat menggunakanaz sql server show. Anda menggunakan variabel ini nanti dalam tutorial ini.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;"Petunjuk / Saran
Anda selalu dapat memeriksa output perintah ini.
echo $SQL_CONNECTION_STRING
Buat gambar kontainer
Selanjutnya, buat gambar kontainer menggunakan Dockerfile. Kemudian sebarkan gambar kontainer tersebut ke instans Azure Container Registry yang baru dibuat.
Buat variabel bernama
CONTAINER_REGISTRY_NAMEdengan nama yang dibuat secara unik untuk instans Azure Container Registry Anda. Anda menggunakan variabel ini nanti di bagian ini.CONTAINER_REGISTRY_NAME="reg$SUFFIX"Buat instans Azure Container Registry baru menggunakan
az acr create.az acr create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --sku "Standard" \ --location $LOCATION \ --admin-enabled falseBuat Dockerfile multi-tahap bernama
Dockerfile. Dalam file, terapkan langkah-langkah ini.mcr.microsoft.com/dotnet/sdkGunakan gambar kontainer sebagai dasar tahap buildPasang DAB CLI.
Buat file konfigurasi untuk koneksi database SQL (
mssql) menggunakanDATABASE_CONNECTION_STRINGvariabel lingkungan sebagai string koneksi.Buat entitas bernama
Productyang dipetakan ke tabelSalesLT.Product.Salin file konfigurasi ke gambar kontainer akhir
mcr.microsoft.com/azure-databases/data-api-builder.
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 /AppBuat Dockerfile sebagai tugas Azure Container Registry menggunakan
az acr build.az acr build \ --registry $CONTAINER_REGISTRY_NAME \ --image adventureworkslt-dab:latest \ --image adventureworkslt-dab:{{.Run.ID}} \ --file Dockerfile \ .Gunakan
az acr showuntuk mendapatkan titik akhir untuk registri kontainer dan menyimpannya dalam variabel bernamaCONTAINER_REGISTRY_LOGIN_SERVER.CONTAINER_REGISTRY_LOGIN_SERVER=$( \ az acr show \ --resource-group $RESOURCE_GROUP_NAME \ --name $CONTAINER_REGISTRY_NAME \ --query "loginServer" \ --output "tsv" \ )Petunjuk / Saran
Anda selalu dapat memeriksa output perintah ini.
echo $CONTAINER_REGISTRY_LOGIN_SERVER
Menyebarkan gambar kontainer
Terakhir, perbarui Aplikasi Kontainer Azure dengan gambar dan kredensial kontainer kustom baru. Uji aplikasi yang sedang berjalan untuk memvalidasi konektivitasnya ke database.
Konfigurasikan aplikasi kontainer untuk menggunakan registri kontainer menggunakan
az containerapp registry set.az containerapp registry set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --server $CONTAINER_REGISTRY_LOGIN_SERVER \ --identity "system"Gunakan
az containerapp secret setuntuk membuat rahasia bernamaconn-stringdengan string koneksi Azure SQL.az containerapp secret set \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --secrets conn-string="$SQL_CONNECTION_STRING"Penting
String koneksi ini tidak menyertakan nama pengguna atau kata sandi apa pun. String koneksi menggunakan identitas terkelola untuk mengakses database Azure SQL. Ini membuatnya aman untuk menggunakan string koneksi sebagai rahasia di host.
Perbarui aplikasi kontainer dengan gambar kontainer kustom baru Anda menggunakan
az containerapp update. Atur variabel lingkunganDATABASE_CONNECTION_STRINGuntuk membaca dari rahasiaconn-stringyang dibuat sebelumnya.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-stringAmbil nama domain yang sepenuhnya memenuhi syarat dari revisi terbaru di aplikasi kontainer yang sedang berjalan menggunakan
az containerapp show. Simpan nilai tersebut dalam variabel bernamaAPPLICATION_URL.APPLICATION_URL=$( \ az containerapp show \ --resource-group $RESOURCE_GROUP_NAME \ --name $API_CONTAINER_NAME \ --query "properties.latestRevisionFqdn" \ --output "tsv" \ )Petunjuk / Saran
Anda selalu dapat memeriksa output perintah ini.
echo $APPLICATION_URLNavigasi ke URL dan uji
ProductREST API.echo "https://$APPLICATION_URL/api/Product"Peringatan
Proses penyebaran dapat memerlukan waktu hingga satu menit. Jika Anda tidak melihat respons yang berhasil, tunggu dan refresh browser Anda.
Membersihkan sumber daya
Saat Anda tidak lagi memerlukan aplikasi contoh atau sumber daya, hapus penerapan dan semua sumber daya yang terkait.
az group delete \
--name $RESOURCE_GROUP_NAME