Sdílet prostřednictvím


Kurz: Vytvoření a publikování produktu

PLATÍ PRO: Všechny úrovně služby API Management

Ve službě Azure API Management obsahuje produkt jedno nebo více rozhraní API, kvótu využití a podmínky použití. Po publikování produktu se můžou vývojáři přihlásit k odběru produktu a začít používat rozhraní API produktu.

V tomto kurzu se naučíte:

  • Vytvoření a publikování produktu
  • Přidání rozhraní API do produktu
  • Přístup k rozhraním API produktů

Produkty API Management na portálu

Požadavky

Vytvoření a publikování produktu

  1. Přihlaste se k webu Azure Portal a přejděte k vaší instanci služby API Management.

  2. V levém navigačním podokně vyberte Products+ Add (Produkty>+ Přidat).

    Přidání produktu na webu Azure Portal

  3. V okně Přidat produkt zadejte hodnoty popsané v následující tabulce a vytvořte produkt.

    Okno Přidat produkt

    Název Popis
    Zobrazovaný název Název, jak chcete, aby se zobrazoval na portálu pro vývojáře.
    Popis Zadejte informace o produktu, jako je jeho účel, rozhraní API, ke které poskytuje přístup, a další podrobnosti.
    State Vyberte Publikováno , pokud chcete produkt publikovat na portálu pro vývojáře. Než vývojáři můžou zjistit rozhraní API v produktu, musí být produkt publikovaný. Ve výchozím nastavení se nové produkty nepublikují.
    Vyžaduje předplatné Vyberte, jestli se uživatel vyžaduje k přihlášení k odběru produktu (produkt je chráněný) a klíč předplatného se musí použít pro přístup k rozhraním API produktu. Pokud se předplatné nevyžaduje (produkt je otevřený), klíč předplatného se pro přístup k rozhraním API produktu nevyžaduje. Viz Přístup k rozhraním API produktů dále v tomto článku.
    Vyžaduje schválení Vyberte, jestli má správce zkontrolovat a přijmout nebo odmítnout pokusy o předplatné pro tento produkt. Pokud není vybraná, pokusy o předplatné se automaticky schválí.
    Omezení počtu předplatných Volitelně můžete omezit počet více souběžných předplatných.
    Právní podmínky Pro produkt můžete zahrnout podmínky použití, které musí předplatitelé přijmout, aby mohli produkt využívat.
    Rozhraní API Vyberte jedno nebo více rozhraní API. Po vytvoření produktu můžete také přidat rozhraní API. Další informace najdete v tématu Přidání rozhraní API do produktu dále v tomto článku.

    Pokud je produkt otevřený (nevyžaduje předplatné), můžete přidat jenom rozhraní API, které není přidružené k jinému otevřenému produktu.
  4. Vyberte Vytvořit a vytvořte nový produkt.

Upozornění

Při konfiguraci produktu, který nevyžaduje předplatné, používejte péči. Tato konfigurace může být příliš přesvědčivá a může usnadnit rozhraní API produktu vůči určitým hrozbám zabezpečení rozhraní API.

Přidání více konfigurací

Po uložení produktu pokračujte v konfiguraci. V instanci služby API Management vyberte produkt v okně Produkty . Přidání nebo aktualizace:

Položka Popis
Nastavení Metadata a stav produktu
Rozhraní API Rozhraní API přidružená k produktu
Zásady Zásady použité na rozhraní API produktů
Řízení přístupu Viditelnost produktů pro vývojáře nebo hosty
Předplatná Předplatitelé produktů

Přidání rozhraní API do produktu

Produkty jsou sdruženími jednoho nebo více rozhraní API. Můžete zahrnout mnoho rozhraní API a nabídnout je vývojářům prostřednictvím portálu pro vývojáře. Během vytváření produktu můžete přidat jedno nebo více existujících rozhraní API. Rozhraní API můžete do produktu přidat také později, a to buď ze stránky Nastavení produktů, nebo při vytváření rozhraní API.

Přidání rozhraní API do existujícího produktu

  1. V levém navigačním panelu vaší instance služby API Management vyberte Produkty.
  2. Vyberte produkt a pak vyberte rozhraní API.
  3. Vyberte + Přidat rozhraní API.
  4. Vyberte jedno nebo více rozhraní API a pak vyberte.

Přidání rozhraní API do existujícího produktu

Přístup k rozhraním API produktů

Po publikování produktu můžou vývojáři přistupovat k rozhraním API. V závislosti na tom, jak je produkt nakonfigurovaný, může být potřeba přihlásit se k odběru produktu pro přístup.

  • Chráněný produkt – Vývojáři se musí nejdřív přihlásit k odběru chráněného produktu, aby získali přístup k rozhraním API produktu. Když se přihlásí k odběru, získá klíč předplatného, který má přístup k libovolnému rozhraní API v daném produktu. Pokud jste vytvořili instanci služby API Management, jste již správcem, takže jste přihlášeni k odběru všech produktů ve výchozím nastavení. Další informace najdete v tématu Předplatná ve službě Azure API Management.

    Když klient vytvoří požadavek rozhraní API s platným kódem Product Subscription Key, služba API Management žádost zpracuje a povolí přístup v kontextu produktu. Můžete použít zásady a pravidla řízení přístupu nakonfigurovaná pro produkt.

    Tip

    Předplatné uživatele můžete vytvořit nebo aktualizovat na produkt pomocí vlastních klíčů předplatného prostřednictvím rozhraní REST API nebo příkazu PowerShellu.

  • Otevřený produkt – Vývojáři mají přístup k rozhraním API otevřeného produktu bez klíče předplatného. Můžete ale nakonfigurovat další mechanismy pro zabezpečení přístupu klientů k rozhraním API, včetně OAuth 2.0, klientských certifikátů a omezení IP adres volajícího.

    Poznámka:

    Otevřené produkty nejsou uvedené na portálu pro vývojáře, aby se o něm vývojáři dozvěděli nebo se přihlásili k jejich odběru. Jsou viditelné jenom skupině Administrators . K informování vývojářů o rozhraních API, ke kterým mají přístup bez klíče předplatného, budete muset použít jiný mechanismus.

    Když klient vytvoří požadavek rozhraní API bez klíče předplatného:

    • SLUŽBA API Management zkontroluje, jestli je rozhraní API přidružené k otevřenému produktu. Rozhraní API může být přidružené maximálně k jednomu otevřenému produktu.

    • Pokud otevřený produkt existuje, zpracuje požadavek v kontextu tohoto otevřeného produktu. Můžete použít zásady a pravidla řízení přístupu nakonfigurovaná pro otevřený produkt.

Další informace najdete v tématu Jak služba API Management zpracovává požadavky s klíči předplatného nebo bez.

Další kroky

V tomto kurzu jste se naučili, jak:

  • Vytvoření a publikování produktu
  • Přidání rozhraní API do produktu
  • Přístup k rozhraním API produktů

Přejděte k dalšímu kurzu:

V tomto článku pomocí Terraformu vytvoříte instanci služby Azure API Management, rozhraní API, produkt, skupinu a přidružení mezi produktem a rozhraním API a produktem a skupinou.

Terraform umožňuje definici, verzi Preview a nasazení cloudové infrastruktury. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu , například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění, který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.

  • Zadejte požadovanou verzi Terraformu a požadované zprostředkovatele.
  • Definujte proměnné pro předponu názvu skupiny prostředků, umístění skupiny prostředků a formát a hodnotu obsahu pro import definice rozhraní API.
  • Vytvořte skupinu prostředků s náhodným názvem.
  • Vytvořte službu API Management s náhodným názvem.
  • Vytvořte rozhraní API s náhodným názvem.
  • Vytvořte produkt s náhodným názvem ve službě API Management.
  • Vytvořte skupinu s náhodným názvem.
  • Přidružte rozhraní API k produktu.
  • Přidružte skupinu k produktu.
  • Vypíše randomizované hodnoty, jako jsou názvy skupiny prostředků, služby API Management, rozhraní API, produktu a skupiny.

Požadavky

Implementace kódu Terraformu

Poznámka:

Vzorový kód pro tento článek se nachází v úložišti GitHubu Azure Terraformu. Můžete zobrazit soubor protokolu obsahující výsledky testu z aktuálních a předchozích verzí Terraformu.

Podívejte se na další články a ukázkový kód ukazující, jak používat Terraform ke správě prostředků Azure.

  1. Vytvořte adresář, ve kterém chcete otestovat a spustit ukázkový kód Terraformu a nastavit ho jako aktuální adresář.

  2. Vytvořte soubor s názvem main.tfa vložte následující kód:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    resource "random_string" "apim_service_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_api_management" "apim_service" {
      name                = "${random_string.apim_service_name.result}-apim-service"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      publisher_name      = "Example Publisher"
      publisher_email     = "publisher@example.com"
      sku_name            = "Developer_1"
      tags = {
        Environment = "Example"
      }
      policy {
        xml_content = <<XML
        <policies>
          <inbound />
          <backend />
          <outbound />
          <on-error />
        </policies>
    XML
      }
    }
    
    resource "random_string" "api_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "random_string" "content_value" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_api_management_api" "api" {
      name                = "${random_string.api_name.result}-api"
      resource_group_name = azurerm_resource_group.rg.name
      api_management_name = azurerm_api_management.apim_service.name
      revision            = "1"
      display_name        = "${random_string.api_name.result}-api"
      path                = "example"
      protocols           = ["https", "http"]
      description         = "An example API"
      import {
        content_format = var.open_api_spec_content_format
        content_value  = var.open_api_spec_content_value
      }
    }
    
    resource "random_string" "product_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_api_management_product" "product" {
      product_id            = "${random_string.product_name.result}-product"
      resource_group_name   = azurerm_resource_group.rg.name
      api_management_name   = azurerm_api_management.apim_service.name
      display_name          = "${random_string.product_name.result}-product"
      subscription_required = true
      approval_required     = false
      published             = true
      description           = "An example Product"
    }
    
    resource "random_string" "group_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_api_management_group" "group" {
      name                = "${random_string.group_name.result}-group"
      resource_group_name = azurerm_resource_group.rg.name
      api_management_name = azurerm_api_management.apim_service.name
      display_name        = "${random_string.group_name.result}-group"
      description         = "An example group"
    }
    
    resource "azurerm_api_management_product_api" "product_api" {
      resource_group_name = azurerm_resource_group.rg.name
      api_management_name = azurerm_api_management.apim_service.name
      product_id          = azurerm_api_management_product.product.product_id
      api_name            = azurerm_api_management_api.api.name
    }
    
    resource "azurerm_api_management_product_group" "product_group" {
      resource_group_name = azurerm_resource_group.rg.name
      api_management_name = azurerm_api_management.apim_service.name
      product_id          = azurerm_api_management_product.product.product_id
      group_name          = azurerm_api_management_group.group.name
    }
    
  3. Vytvořte soubor s názvem outputs.tfa vložte následující kód:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "apim_service_name" {
      value = azurerm_api_management.apim_service.name
    }
    
    output "api_name" {
      value = azurerm_api_management_api.api.name
    }
    
    output "product_name" {
      value = azurerm_api_management_product.product.product_id
    }
    
    output "group_name" {
      value = azurerm_api_management_group.group.name
    }
    
    output "service_id" {
      description = "The ID of the API Management Service created"
      value       = azurerm_api_management.apim_service.id
    }
    
    output "gateway_url" {
      description = "The URL of the Gateway for the API Management Service"
      value       = azurerm_api_management.apim_service.gateway_url
    }
    
    output "service_public_ip_addresses" {
      description = "The Public IP addresses of the API Management Service"
      value       = azurerm_api_management.apim_service.public_ip_addresses
    }
    
    output "api_outputs" {
      description = "The IDs, state, and version outputs of the APIs created"
      value = {
        id             = azurerm_api_management_api.api.id
        is_current     = azurerm_api_management_api.api.is_current
        is_online      = azurerm_api_management_api.api.is_online
        version        = azurerm_api_management_api.api.version
        version_set_id = azurerm_api_management_api.api.version_set_id
      }
    }
    
    output "product_id" {
      description = "The ID of the Product created"
      value       = azurerm_api_management_product.product.id
    }
    
    output "product_api_id" {
      description = "The ID of the Product/API association created"
      value       = azurerm_api_management_product_api.product_api.id
    }
    
    output "product_group_id" {
      description = "The ID of the Product/Group association created"
      value       = azurerm_api_management_product_group.product_group.id
    }
    
  4. Vytvořte soubor s názvem providers.tfa vložte následující kód:

    terraform {
      required_version = ">=1.0"
      
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  5. Vytvořte soubor s názvem variables.tfa vložte následující kód:

    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "open_api_spec_content_format" {
      type        = string
      default     = "swagger-link-json"
      description = "The format of the content from which the API Definition should be imported. Possible values are: openapi, openapi+json, openapi+json-link, openapi-link, swagger-json, swagger-link-json, wadl-link-json, wadl-xml, wsdl and wsdl-link."
      validation {
        condition     = contains(["openapi", "openapi+json", "openapi+json-link", "openapi-link", "swagger-json", "swagger-link-json", "wadl-link-json", "wadl-xml", "wsdl", "wsdl-link"], var.open_api_spec_content_format)
        error_message = "open_api_spec_content_format must be one of the following: openapi, openapi+json, openapi+json-link, openapi-link, swagger-json, swagger-link-json, wadl-link-json, wadl-xml, wsdl and wsdl-link."
      }
    }
    
    variable "open_api_spec_content_value" {
      type        = string
      default     = "https://petstore3.swagger.io/api/v3/openapi.json"
      description = "The Content from which the API Definition should be imported. When a content_format of *-link-* is specified this must be a URL, otherwise this must be defined inline."
    }
    

Inicializace Terraformu

Spuštěním inicializace nasazení Terraformu spusťte inicializaci terraformu. Tento příkaz stáhne poskytovatele Azure potřebného ke správě prostředků Azure.

terraform init -upgrade

Klíčové body:

  • Parametr -upgrade upgraduje potřebné moduly plug-in zprostředkovatele na nejnovější verzi, která splňuje omezení verzí konfigurace.

Vytvoření plánu provádění Terraformu

Spuštěním plánu terraformu vytvořte plán provádění.

terraform plan -out main.tfplan

Klíčové body:

  • Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.
  • Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že plán, který jste zkontrolovali, je přesně to, co se použije.

Použití plánu provádění Terraformu

Spuštění terraformu platí pro použití plánu provádění na cloudovou infrastrukturu.

terraform apply main.tfplan

Klíčové body:

  • terraform apply Ukázkový příkaz předpokládá, že jste dříve spustili terraform plan -out main.tfplan.
  • Pokud jste pro -out parametr zadali jiný název souboru, použijte stejný název souboru při volání terraform apply.
  • Pokud jste parametr nepoužíli -out , zavolejte terraform apply bez parametrů.

Ověření výsledků

Spuštěním zobrazíte az apim show Azure API Management:


az apim show --<apim_service_name> --<resource_group_name>

Vyčištění prostředků

Pokud už prostředky vytvořené přes Terraform nepotřebujete, proveďte následující kroky:

  1. Spusťte plán terraformu destroy a zadejte příznak.

    terraform plan -destroy -out main.destroy.tfplan
    

    Klíčové body:

    • Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.
    • Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že plán, který jste zkontrolovali, je přesně to, co se použije.
  2. Spuštění terraformu platí pro použití plánu provádění.

    terraform apply main.destroy.tfplan
    

Řešení potíží s Terraformem v Azure

Řešení běžných problémů při používání Terraformu v Azure

Další kroky