Menyebarkan gateway yang dihost sendiri Azure API Management ke Azure Container Apps

BERLAKU UNTUK: Pengembang | Premium

Artikel ini menyediakan langkah-langkah untuk menyebarkan komponen gateway yang dihost sendiri dari Azure API Management ke Azure Container Apps.

Sebarkan gateway yang dihost sendiri ke aplikasi kontainer untuk mengakses API yang dihosting di lingkungan Azure Container Apps yang sama.

Prasyarat

  • Menyelesaikan mulai cepat berikut: Membuat instans Azure API Management.

  • Untuk Azure CLI:

    Catatan

    Contoh perintah Azure CLI dalam artikel ini memerlukan containerapp ekstensi Azure CLI. Jika Anda belum menggunakan az containerapp perintah, ekstensi diinstal secara dinamis saat Anda menjalankan perintah pertama az containerapp Anda. Pelajari selengkapnya tentang ekstensi Azure CLI.

Memprovisikan gateway di instans API Management Anda

Sebelum menyebarkan gateway yang dihost sendiri, provisikan sumber daya gateway di instans Azure API Management Anda. Untuk langkah-langkahnya, lihat Menyediakan gateway yang dihost sendiri. Dalam contoh dalam artikel ini, gateway diberi nama my-gateway.

Mendapatkan pengaturan penyebaran gateway dari API Management

Untuk menyebarkan gateway, Anda memerlukan nilai titik akhir Token dan Konfigurasi gateway. Anda dapat menemukannya di portal Azure:

  1. Masuk ke portal Microsoft Azure, dan buka instans API Management Anda.
  2. Di menu sebelah kiri, di bawah Penyebaran dan infrastruktur, pilih Gateway.
  3. Pilih sumber daya gateway yang Anda provisikan, dan pilih Penyebaran.
  4. Salin nilai titik akhir Token dan Konfigurasi.

Menyebarkan gateway yang dihost sendiri ke aplikasi kontainer

Anda dapat menyebarkan gambar kontainer gateway yang dihost sendiri ke aplikasi kontainer menggunakan portal Azure, Azure CLI, atau alat lainnya. Artikel ini memperlihatkan langkah-langkah menggunakan Azure CLI.

Membuat lingkungan aplikasi kontainer

Pertama, buat lingkungan aplikasi kontainer menggunakan perintah az containerapp env create :

#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
    --location centralus

Perintah ini membuat:

  • Lingkungan aplikasi kontainer bernama my-environment yang Anda gunakan untuk mengelompokkan aplikasi kontainer.
  • Ruang kerja analitik log

Membuat aplikasi kontainer untuk gateway yang dihost sendiri

Untuk menyebarkan gateway yang dihost sendiri ke aplikasi kontainer di lingkungan, jalankan perintah az containerapp create .

Variabel pertama yang ditetapkan untuk nilai titik akhir Token dan Konfigurasi dari sumber daya gateway API Management.

#!/bin/bash
endpoint="<API Management configuration endpoint>"
token="<API Management gateway token>"

Buat aplikasi kontainer menggunakan az containerapp create perintah :

#!/bin/bash
az containerapp create --name my-gateway \
    --resource-group myResourceGroup --environment 'my-environment' \
    --image "mcr.microsoft.com/azure-api-management/gateway:2.5.0" \
    --target-port 8080 --ingress external \
    --min-replicas 1 --max-replicas 3 \
    --env-vars "config.service.endpoint"="$endpoint" "config.service.auth"="$token" "net.server.http.forwarded.proto.enabled"="true"

Perintah ini membuat:

  • Aplikasi kontainer bernama my-gateway dalam myResourceGroup grup sumber daya. Dalam contoh ini, aplikasi kontainer dibuat menggunakan mcr.microsoft.com/azure-api-management/gateway:2.5.0 gambar. Pelajari selengkapnya tentang gambar kontainer gateway yang dihost sendiri.

  • Dukungan untuk ingress eksternal ke aplikasi kontainer pada port 8080.

  • Minimal 1 dan maksimum 3 replika aplikasi kontainer.

  • Koneksi dari gateway yang dihost sendiri ke instans API Management menggunakan nilai konfigurasi yang diteruskan dalam variabel lingkungan. Untuk detailnya, lihat pengaturan konfigurasi kontainer gateway yang dihost sendiri.

    Catatan

    ingress Azure Container Apps meneruskan permintaan HTTPS ke aplikasi kontainer gateway yang dihost sendiri sebagai HTTP. Di sini, net.server.http.forwarded.proto.enabled variabel lingkungan diatur ke true sehingga gateway yang dihost sendiri menggunakan X-Forwarded-Proto header untuk menentukan protokol asli permintaan.

Konfirmasikan bahwa aplikasi kontainer sedang berjalan

  1. Masuk ke portal Azure, dan navigasikan ke aplikasi kontainer Anda.

  2. Pada halaman Gambaran Umum aplikasi kontainer, periksa apakah Status Sedang Berjalan.

  3. Kirim permintaan pengujian ke titik akhir status di /status-012345678990abcdef. Misalnya, gunakan perintah yang curl mirip dengan yang berikut ini.

    curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
    

    Permintaan yang 200 OK berhasil mengembalikan respons.

Tip

Dengan menggunakan CLI, Anda juga dapat menjalankan perintah az containerapp show untuk memeriksa status aplikasi kontainer.

Konfirmasikan bahwa gateway sehat

  1. Masuk ke portal Microsoft Azure, dan buka instans API Management Anda.

  2. Di menu sebelah kiri, di bawah Penyebaran dan infrastruktur, pilih Gateway.

  3. Pada halaman Gambaran Umum , periksa Status gateway Anda. Jika gateway sehat, gateway melaporkan heartbeat gateway reguler.

    Cuplikan layar status gateway di portal.

Contoh skenario

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan gateway yang dihost sendiri untuk mengakses API yang dihosting di aplikasi kontainer di lingkungan yang sama. Seperti yang ditunjukkan dalam diagram berikut, gateway yang dihost sendiri dapat diakses dari internet, sementara API hanya dapat diakses dalam lingkungan aplikasi kontainer.

Diagram contoh skenario dengan gateway yang dihost sendiri.

  1. Menyebarkan aplikasi kontainer yang menghosting API di lingkungan yang sama dengan gateway yang dihost sendiri
  2. Menambahkan API ke instans API Management Anda
  3. Memanggil API melalui gateway yang dihost sendiri

Menyebarkan aplikasi kontainer yang menghosting API di lingkungan yang sama dengan gateway yang dihost sendiri

Misalnya, sebarkan contoh API album musik ke aplikasi kontainer. Untuk akses nanti ke API menggunakan gateway yang dihost sendiri, sebarkan API di lingkungan yang sama dengan gateway yang dihost sendiri. Untuk langkah-langkah dan informasi terperinci tentang sumber daya yang digunakan dalam contoh ini, lihat Mulai Cepat: Membangun dan menyebarkan dari kode sumber lokal ke Azure Container Apps. Langkah-langkah yang disingkat mengikuti:

  1. Unduh kode sumber Python ke komputer lokal Anda. Jika mau, unduh kode sumber dalam bahasa lain pilihan Anda.

  2. Ekstrak kode sumber ke folder lokal dan ubah ke folder containerapps-albumapi-python-main/src .

  3. Jalankan perintah az containerapp up berikut untuk menyebarkan API ke aplikasi kontainer di lingkungan yang sama dengan gateway yang dihost sendiri. . Perhatikan di akhir perintah, yang menentukan folder saat ini sebagai sumber untuk aplikasi kontainer.

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. Konfirmasikan bahwa aplikasi kontainer berjalan dan dapat diakses secara eksternal di FQDN yang dikembalikan dalam output perintah. Secara default API dapat diakses di /albums titik akhir. Contoh: https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.

Mengonfigurasi API untuk ingress internal

Sekarang perbarui aplikasi kontainer yang menghosting API sampel untuk mengaktifkan masuk hanya di lingkungan kontainer. Pengaturan ini membatasi akses ke API hanya dari gateway yang dihost sendiri yang Anda sebarkan.

  1. Masuk ke portal Azure, dan navigasikan ke aplikasi kontainer Anda.
  2. Di menu sebelah kiri, pilih Ingress.
  3. Atur Ingress ke Diaktifkan.
  4. Di Lalu lintas masuk, pilih Terbatas pada Lingkungan Aplikasi Kontainer.
  5. Tinjau pengaturan yang tersisa dan pilih Simpan.

Menambahkan API ke instans API Management Anda

Berikut ini adalah contoh langkah-langkah untuk menambahkan API ke instans API Management Anda dan mengonfigurasi backend API. Untuk informasi selengkapnya, lihat Menambahkan API ke Azure API Management.

Menambahkan API ke instans API Management Anda

  1. Di portal, navigasikan ke instans API Management tempat Anda mengonfigurasi gateway yang dihost sendiri.
  2. Di menu sebelah kiri, pilih API>+ Tambahkan API.
  3. Pilih HTTP dan pilih Penuh. Masukkan pengaturan berikut:
    1. Nama tampilan: Masukkan nama deskriptif. Contoh: API Album.
    2. URL layanan web: Masukkan FQDN internal aplikasi kontainer yang menghosting API. Contoh: http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io.
    3. Skema URL: Pilih HTTP.
    4. Akhiran URL API: Masukkan akhiran pilihan Anda. Contoh: albumapi.
    5. Gateway: Pilih gateway yang dihost sendiri yang Anda provisikan. Contoh: my-gateway.
  4. Konfigurasikan pengaturan API lainnya sesuai dengan skenario Anda. Pilih Buat.

Menambahkan operasi API

  1. Di menu sebelah kiri, pilih API>Album API API.
  2. Pilih + Tambahkan operasi.
  3. Masukkan pengaturan operasi:
    1. Nama tampilan: Masukkan nama deskriptif untuk operasi. Contoh: Dapatkan album.
    2. URL: Pilih Dapatkan dan masukkan /albums untuk titik akhir.
    3. Pilih Simpan.

Memanggil API melalui gateway yang dihost sendiri

Panggil API menggunakan FQDN gateway yang dihost sendiri yang berjalan di aplikasi kontainer. Temukan FQDN di halaman Gambaran Umum aplikasi kontainer di portal Azure, atau jalankan perintah berikutaz containerapp show.

#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
    --query "properties.configuration.ingress.fqdn" --output tsv

Misalnya, jalankan perintah berikut curl untuk memanggil API di /albumapi/albums titik akhir. Jika API Anda memerlukan kunci langganan, berikan kunci langganan yang valid untuk instans API Management Anda sebagai header dalam permintaan:

curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/albumapi/albums -H "Ocp-Apim-Subscription-Key: <subscription-key>"

Ketika pengujian berhasil, backend merespons dengan kode respons HTTP yang berhasil dan beberapa data.

HTTP/1.1 200 OK
content-length: 751
content-type: application/json
date: Wed, 28 Feb 2024 22:45:09 GMT
[...]

[{"id":1,"title":"You, Me and an App Id","artist":"Daprize","price":10.99,"image_url":"https://aka.ms/albums-daprlogo"},{"id":2,"title":"Seven Revision Army","artist":"The Blue-Green Stripes","price":13.99,"image_url":"https://aka.ms/albums-containerappslogo"},{"id":3,"title":"Scale It Up","artist":"KEDA Club","price":13.99,"image_url":"https://aka.ms/albums-kedalogo"},{"id":4,"title":"Lost in Translation","artist":"MegaDNS","price":12.99,"image_url":"https://aka.ms/albums-envoylogo"},{"id":5,"title":"Lock Down Your Love","artist":"V is for VNET","price":12.99,"image_url":"https://aka.ms/albums-vnetlogo"},{"id":6,"title":"Sweet Container O' Mine","artist":"Guns N Probeses","price":14.99,"image_url":"https://aka.ms/albums-containerappslogo"}]

Tip

Jika Anda telah mengaktifkan pengelogan API ke Application insights, Anda dapat mengkueri log untuk melihat permintaan dan respons.