Bagikan melalui


Tutorial: Menyebarkan penyusun API Data ke Azure Container Apps dengan Azure CLI

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)

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.

  1. Buat variabel universal SUFFIX untuk digunakan untuk beberapa nama sumber daya nanti dalam tutorial ini.

    let SUFFIX=$RANDOM*$RANDOM
    
  2. Buat LOCATION variabel 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-locations

    az account list-locations --query "[].{Name:displayName,Slug:name}" --output table
    

    Untuk informasi selengkapnya, lihat wilayah Azure.

  3. Buat variabel bernama RESOURCE_GROUP_NAME dengan nama grup sumber daya. Untuk tutorial ini, kami sarankan msdocs-dab-*. Anda menggunakan nilai ini beberapa kali dalam tutorial ini.

    RESOURCE_GROUP_NAME="msdocs-dab$SUFFIX"    
    
  4. Buat grup sumber daya baru menggunakan az group create.

    az group create \
      --name $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --tag "source=msdocs-dab-tutorial"
    
  5. Buat variabel bernama API_CONTAINER_NAME dan CONTAINER_ENV_NAME dengan 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"
    
  6. Gunakan az containerapp env create untuk membuat lingkungan Azure Container Apps baru.

    az containerapp env create \ 
      --resource-group $RESOURCE_GROUP_NAME \
      --name $CONTAINER_ENV_NAME \
      --logs-destination none \
      --location $LOCATION
    
  7. Buat aplikasi kontainer baru menggunakan mcr.microsoft.com/azure-databases/data-api-builder gambar kontainer DAB dan az containerapp create perintah . 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-assigned
    
  8. Dapatkan pengidentifikasi utama identitas terkelola menggunakan az identity show dan simpan nilai dalam variabel bernama MANAGED_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.

  1. Buat variabel bernama RESOURCE_GROUP_ID untuk menyimpan pengidentifikasi grup sumber daya. Dapatkan pengidentifikasi menggunakan az 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_ID
    
  2. Gunakan az role assignment create untuk 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_ID
    
  3. Tetapkan peran AcrPull ke identitas terkelola Anda menggunakan az role assignment create lagi. 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 .

  1. Buat variabel bernama SQL_SERVER_NAME dengan nama yang dibuat secara unik untuk instans server Azure SQL Anda. Anda menggunakan variabel ini nanti di bagian ini.

    SQL_SERVER_NAME="srvr$SUFFIX"
    
  2. 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_ID
    
  3. Gunakan az sql server firewall-rule create untuk 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"
    
  4. Gunakan az sql db create untuk membuat database dalam server Azure SQL bernama adventureworks. Konfigurasikan database untuk menggunakan AdventureWorksLT data sampel.

    az sql db create \
      --resource-group $RESOURCE_GROUP_NAME \
      --server $SQL_SERVER_NAME \
      --name "adventureworks" \
      --sample-name "AdventureWorksLT"
    
  5. Buat variabel bernama SQL_CONNECTION_STRING dengan string koneksi untuk adventureworks database di instans server Azure SQL Anda. Buat string koneksi dengan nama domain server yang sepenuhnya memenuhi syarat menggunakan az 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.

  1. Buat variabel bernama CONTAINER_REGISTRY_NAME dengan nama yang dibuat secara unik untuk instans Azure Container Registry Anda. Anda menggunakan variabel ini nanti di bagian ini.

    CONTAINER_REGISTRY_NAME="reg$SUFFIX"
    
  2. 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 false
    
  3. Buat Dockerfile multi-tahap bernama Dockerfile. Dalam file, terapkan langkah-langkah ini.

    • mcr.microsoft.com/dotnet/sdk Gunakan gambar kontainer sebagai dasar tahap build

    • Pasang DAB CLI.

    • Buat file konfigurasi untuk koneksi database SQL (mssql) menggunakan DATABASE_CONNECTION_STRING variabel lingkungan sebagai string koneksi.

    • Buat entitas bernama Product yang dipetakan ke tabel SalesLT.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 /App
    
  4. Buat 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 \
      .
    
  5. Gunakan az acr show untuk mendapatkan titik akhir untuk registri kontainer dan menyimpannya dalam variabel bernama CONTAINER_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.

  1. 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"
    
  2. Gunakan az containerapp secret set untuk membuat rahasia bernama conn-string dengan 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.

  3. Perbarui aplikasi kontainer dengan gambar kontainer kustom baru Anda menggunakan az containerapp update. Atur variabel lingkungan DATABASE_CONNECTION_STRING untuk membaca dari rahasia conn-string yang 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-string
    
  4. Ambil nama domain yang sepenuhnya memenuhi syarat dari revisi terbaru di aplikasi kontainer yang sedang berjalan menggunakan az containerapp show. Simpan nilai tersebut dalam variabel bernama APPLICATION_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_URL
    
  5. Navigasi ke URL dan uji Product REST 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

Langkah selanjutnya