Configuração de Aplicativos do Azure para IA: Python, rótulos, sinalizadores e Cofre de Chaves
Voltar para a trilha AI-200
AI-200Capítulo 22

Estudo para a Certificação Microsoft AI-200

Configuração de Aplicativos do Azure para IA: Python, rótulos, sinalizadores e Cofre de Chaves

Externalize configurações de aplicações de IA, componha substituições por ambiente, altere comportamentos com sinalizadores de recursos, atualize valores com consistência e exponha segredos do Cofre de Chaves por um único caminho.

Tempo de estudo sugerido: 120 minutos • Nível intermediário • Reescrita autoral completa com versão resumida de cada tópico, avaliação comentada e laboratório Python guiado

Escudo neon Microsoft Certified AI-200 para Configuração de Aplicativos do Azure, rótulos, sinalizadores e referências do Cofre de Chaves

1. Cenário e objetivos de aprendizagem

Um de documentos com IA usa o para extração, para documentos e para entrada. Desenvolvimento, homologação e produção têm de modelo, tamanhos de lote, intervalos de repetição e detalhes de conexão diferentes. Quando esses valores ficam espalhados por , variáveis de ambiente e scripts, uma alteração pode exigir commit, nova imagem e reimplantação — e uma substituição esquecida pode interromper a versão.

  • Conectar código Python à do com .
  • Organizar padrões e variantes de ambiente com chaves, rótulos, seletores e prefixos.
  • Controlar modelos ou etapas com sinalizadores de recursos sem reimplantar.
  • Resolver segredos do pelo mesmo provedor semelhante a dicionário.
  • Classificar cada valor por sensibilidade, ciclo de vida e necessidade de acesso.

Resumo rápido

O objetivo é manter um plano de configuração centralizado fora do código, permitir mudanças controladas em execução e reservar outra fronteira de segurança para credenciais.

2. Por que a atende cargas de IA

A do é um armazenamento gerenciado de pares chave-valor para configurações e sinalizadores de recursos. Ela separa decisões operacionais do binário: lotes, repetições, tempos limite, implantações de modelo e rotas mudam sem reconstruir o contêiner. Rótulos criam variantes, o gerenciamento de recursos controla ativação, instantâneos preservam um ponto no tempo e referências do mantêm um caminho único sem retirar o segredo do cofre.

Isso ajuda a reduzir desvio de configuração e a atender atualizações sem indisponibilidade, mas não elimina o risco. Validação, publicação atômica por sentinela, observabilidade e reversão continuam obrigatórias.

Resumo rápido

O serviço centraliza configurações não confidenciais e estado de recursos; operações seguras ainda exigem validação, atualização coordenada e reversão.

3. Modelo de dados de uma configuração

Propriedades de uma configuração
PropriedadeSignificado e uso
ChaveIdentificador Unicode sensível a maiúsculas. Use : ou / para hierarquia, como DocPipeline:OpenAI:.
ValorTexto Unicode, ou referência. Chave e valor juntos não podem ultrapassar 10 KB.
RótuloVariante opcional de ambiente, região ou versão. A ausência é o rótulo nulo, normalmente usado como padrão.
Tipo de conteúdoIndica como interpretar o valor, por exemplo application/ ou o tipo de referência do .
Marcas opcionais para filtrar e organizar; não substituem rótulos nem controles de acesso.

válido com tipo application/ é desserializado pelo provedor Python atual. Como o serviço não impõe uma hierarquia, a convenção de nomes é um contrato arquitetural da equipe.

Resumo rápido

Uma configuração inclui chave, valor, rótulo, tipo de conteúdo e marcas; essas propriedades definem variante, interpretação e descoberta.

4. Instalação do provedor Python e carregamento

-appconfiguration-provider oferece load() sobre o do e devolve AzureAppConfigurationProvider, que se comporta como um mapeamento Python. -identity fornece credenciais sem senha e featuremanagement avalia sinalizadores. Carregar o conjunto selecionado de uma vez reduz chamadas em comparação com buscas individuais.

pip install azure-appconfiguration-provider azure-identity featuremanagement

from azure.appconfiguration.provider import load, SettingSelector
from azure.identity import DefaultAzureCredential
import os

endpoint = os.environ["AZURE_APPCONFIG_ENDPOINT"]
credential = DefaultAzureCredential()

config = load(
    endpoint=endpoint,
    credential=credential,
    selects=[SettingSelector(key_filter="DocPipeline:*", label_filter="\0")],
    trim_prefixes=["DocPipeline:"],
)

model_endpoint = config["OpenAI:Endpoint"]
batch_size = config.get("Pipeline:BatchSize", "25")

Por padrão, load() lê todos os pares sem rótulo. O segue ://<nome-do-armazenamento>.azconfig.io. Guarde apenas esse em configuração comum; não coloque a cadeia de conexão no código-fonte.

Resumo rápido

Instale provedor e identidade, conecte ao e use o resultado com operações normais de dicionário.

5. Autenticação com e do

DefaultAzureCredential pode usar CLI do ou localmente e no , , ou . A autenticação do é recomendada porque a aplicação implantada não precisa armazenar cadeia de conexão.

Atribuições com privilégio mínimo
ChamadorFunçãoFinalidade
Aplicação em execução Data ReaderLer pares, sinalizadores e de referências.
Operador ou CI/CD controlado Criar e alterar configurações; não conceder ao runtime somente leitura.
Runtime que resolve referências Secrets User em cada cofreLer o segredo apontado pela referência.

Uma cadeia de conexão é uma credencial. Se inevitável, proteja-a no ; caso contrário, prefira , e funções limitadas ao armazenamento e ao cofre necessários.

Resumo rápido

A autenticação identifica a carga; o concede leitura à e, quando preciso, leitura de segredos no .

6. Seleção de chaves e remoção de prefixos

SettingSelector restringe o carregamento. key_filter aceita chave exata ou padrão como DocPipeline:*, e label_filter seleciona uma variante. O filtro impede que uma aplicação leia configurações alheias de um armazenamento compartilhado ou sofra colisões.

trim_prefixes remove o depois da leitura. Assim, DocPipeline:OpenAI: vira OpenAI: no código. Preserve o prefixo exclusivo no armazenamento e retire-o somente na fronteira da aplicação.

O provedor Python seleciona o prefixo da aplicação e compõe rótulos padrão e de ambiente na Configuração de Aplicativos do Azure
Os seletores definem e rótulo; seletores posteriores substituem valores anteriores da mesma chave já sem prefixo.

Resumo rápido

Filtre na origem e remova apenas o da aplicação para manter o armazenamento organizado e o código legível.

7. Composição de padrões e substituições por rótulo

A mesma chave pode ter rótulos Development, Staging e Production. A variante sem rótulo fornece o padrão. Carregue primeiro o rótulo nulo e depois o ambiente atual: se ambos retornarem a mesma chave, o último vence; chaves sem substituição mantêm o padrão.

environment = os.getenv("APP_ENVIRONMENT", "Development")

config = load(
    endpoint=endpoint,
    credential=credential,
    selects=[
        SettingSelector(key_filter="DocPipeline:*", label_filter="\0"),
        SettingSelector(key_filter="DocPipeline:*", label_filter=environment),
    ],
    trim_prefixes=["DocPipeline:"],
)

# The environment-labeled value wins when both selectors return the same key.
batch_size = int(config["Pipeline:BatchSize"])

A ordem dos seletores faz parte da correção. O código sempre lê :BatchSize, sem nomes de variáveis por ambiente nem condicionais. Rótulos também podem representar região ou versão, mas várias dimensões independentes em um único esquema geram ambiguidade.

Resumo rápido

Rótulo nulo primeiro e ambiente depois produzem uma configuração completa com apenas as diferenças intencionais substituindo os padrões.

8. de chaves autoexplicativo

Adote um delimitador e agrupe por componente: OpenAI:, OpenAI:DeploymentName, OpenAI:MaxTokens, CosmosDB:DatabaseName, CosmosDB:ContainerName, :BatchSize, :RetryCount e :TimeoutSeconds. Um serviço que precisa apenas do modelo seleciona OpenAI:* depois do prefixo da aplicação.

  • Use nomes semânticos estáveis, sem Prod ou Dev na chave.
  • Use rótulos para ambiente e prefixos para propriedade da aplicação ou componente.
  • Mantenha , implantações, dimensões, nomes de fila, contêiner e banco e regras de rota como configurações não confidenciais.
  • Use marcas para inventário; composição em execução depende de seletores e rótulos.

Resumo rápido

Nomes hierárquicos consistentes facilitam navegação e seleção e deixam a identificação do ambiente fora das chaves.

9. Atualização consistente com chave sentinela

A atualização dinâmica é por consulta e orientada à atividade, não um envio automático ao processo. Configure WatchKey e chame config.refresh() em requisição, loop de trabalho ou retorno agendado. refresh_interval é o intervalo mínimo; uma chamada antecipada retorna sem consultar o serviço.

from azure.appconfiguration.provider import WatchKey

config = load(
    endpoint=endpoint,
    credential=credential,
    selects=selects,
    refresh_on=[WatchKey("DocPipeline:Sentinel", label=environment)],
    refresh_interval=60,
)

# Call from an active request, worker loop, or scheduled callback.
# Before the interval elapses, this returns without contacting the store.
config.refresh()

A sentinela permite alterar vários valores e atualizá-la por último. Quando seu muda, o provedor recarrega o conjunto selecionado e evita uma configuração parcial. Se a atualização falhar, o conhecido continua em uso e outra tentativa ocorre depois do intervalo.

Resumo rápido

Publique as configurações primeiro e a sentinela por último; a atividade da aplicação chama refresh e recarrega o conjunto quando o intervalo permite.

10. Sinalizadores de recursos e seu armazenamento

Um sinalizador tem nome, estado habilitado e filtros ou variantes opcionais. A o armazena sob o prefixo reservado .appconfig.featureflag/ e o tipo application/vnd.microsoft.appconfig.ff+;charset=, mas o provedor e a biblioteca abstraem essa representação.

Sinalizadores separam o ciclo do recurso do ciclo de implantação. Eles podem liberar um novo modelo de embeddings, ignorar classificação defeituosa, ativar etapas progressivamente ou dividir um experimento. São controle operacional, não autorização, portanto não constituem fronteira de segurança.

Resumo rápido

Sinalizadores expõem ou ocultam comportamentos já implantados; identidade e controle de acesso continuam responsáveis pela segurança.

11. Avaliação e atualização com FeatureManager

No provedor Python atual, feature_flag_enabled=True carrega e feature_flag_refresh_enabled=True atualiza os sinalizadores. O nome singular do primeiro parâmetro corresponde à referência vigente da Microsoft. FeatureManager recebe o provedor e is_enabled() avalia o sinalizador no caminho protegido.

from featuremanagement import FeatureManager

config = load(
    endpoint=endpoint,
    credential=credential,
    selects=selects,
    feature_flag_enabled=True,
    feature_flag_refresh_enabled=True,
    refresh_on=[WatchKey("DocPipeline:Sentinel", label=environment)],
    refresh_interval=30,
)

features = FeatureManager(config)
config.refresh()

if features.is_enabled("UseNewEmbeddingsModel"):
    process_with_new_model(document)
else:
    process_with_current_model(document)

A atualização de sinalizadores é independente da atualização comum: mudança em um sinalizador não força recarga dos pares e vice-versa. Uma chamada a config.refresh() avança cada ciclo habilitado que estiver elegível.

Resumo rápido

FeatureManager avalia sinalizadores do provedor; carregamento e atualização são explícitos e usam um ciclo separado das configurações comuns.

12. Padrões de liberação controlada para IA

Padrão em execução
PadrãoUso em IAProteção operacional
Liberação progressiva de modeloDirecionar parte do tráfego a nova implantação de embeddings ou inferência.Começar internamente, medir qualidade e latência e só então ampliar.
Interruptor de emergênciaIgnorar uma etapa que produz classificação ou saída incorreta.Testar e observar o caminho alternativo antes do incidente.
Experimento A/BDividir solicitações entre processamento atual e experimental.Registrar atribuição, entradas, saídas, custo e qualidade.
Ativação por etapasHabilitar extração, enriquecimento, indexação e disponibilização uma a uma.Validar cada etapa e preservar reversão.
FeatureManager avalia um sinalizador antes de enviar o documento ao modelo de IA atual ou novo
O mesmo artefato contém os dois caminhos; o operador muda a exposição e observa o resultado.

Resumo rápido

Sinalizadores funcionam melhor com liberação mensurada, alternativa testada e telemetria que comprova a segurança do novo caminho.

13. Criação e resolução de referências do

Uma referência do é um par cujo valor contém o do segredo e cujo tipo é application/vnd.microsoft.appconfig.keyvaultref+;charset=. A guarda do cofre, nome, versão opcional e , não uma cópia criptografada. A chave ainda aceita rótulos, seletores e composição.

sem versão resolve a versão mais recente e normalmente adota rotação sem mudar a referência; versionado fixa deliberadamente uma versão. O provedor resolve quando recebe keyvault_credential, configurações de cliente por cofre ou um resolvedor de segredos.

az appconfig kv set-keyvault   --name <app-config-store>   --key "DocPipeline:OpenAI:ApiKey"   --secret-identifier "https://<vault>.vault.azure.net/secrets/openai-api-key"   --label Production

credential = DefaultAzureCredential()
config = load(
    endpoint=endpoint,
    credential=credential,
    selects=selects,
    keyvault_credential=credential,
    secret_refresh_interval=7200,
)

endpoint_value = config["OpenAI:Endpoint"]       # App Configuration
api_key = config["OpenAI:ApiKey"]                # Resolved from Key Vault
A identidade gerenciada lê a referência na Configuração de Aplicativos e depois recupera o segredo no Cofre de Chaves
A aplicação vê um mapeamento único, enquanto armazenamento e cofre mantêm funções e responsabilidades separadas.

Resumo rápido

Guarde apenas o na , resolva com identidade autorizada e omita a versão quando a adoção automática da rotação for desejada.

14. Autorização dupla e atualização de segredos rotacionados

A identidade precisa de Data Reader no armazenamento e Secrets User em cada cofre referenciado. Acesso a apenas um serviço não basta. keyvault_client_configs permite credenciais diferentes por quando uma única identidade não deve alcançar todos os cofres.

secret_refresh_interval determina com que frequência chamadas elegíveis a config.refresh() resolvem novamente os segredos, mesmo que o não tenha mudado. É independente do intervalo comum. Defina-o pela rotação e defasagem tolerada e calcule o volume total de solicitações para muitas referências e réplicas.

Resumo rápido

A resolução atravessa duas autorizações; a atualização do segredo tem intervalo e orçamento de requisições próprios.

15. Escolha do serviço para cada valor

Regra de posicionamento
Tipo de valorServiço e representaçãoExemplos
Comportamento não confidencial, chave-valor direta, implantação, dimensões, lote, repetição, tempo limite, , nomes de fila, contêiner ou banco.
Ativação de recurso, sinalizadorUseNewEmbeddingsModel, EnableBatchProcessing.
Credencial ou valor que concede acessoSegredo no via referênciaChave de , , senha, cadeia com credencial, chave de conta, segredo de .
Material criptográficoChave ou certificado no , geralmente com específicoChave de criptografia, certificado e chave privada.

A sensibilidade é o teste principal: se o valor isolado concede acesso ou permite operação indevida, ele vai para o . Ele acrescenta criptografia apoiada por , auditoria de cada acesso em de diagnóstico, expiração, rotação automatizada, exclusão reversível e proteção contra limpeza. A usa no nível do armazenamento e oferece rótulos, sinalizadores, instantâneos e maior taxa para valores de comportamento.

Resumo rápido

Comportamento fica na ; credenciais e material criptográfico ficam no , unidos por referências quando útil.

16. Arquitetura complementar e antipadrões

Use a como ponto de entrada e o como back-end seguro dos valores confidenciais. Operadores gerenciam chaves e referências juntos, rótulos compõem ambos e a aplicação recebe um mapeamento, mas o segredo permanece protegido e auditado no cofre.

  • Não armazene segredos diretamente na : faltam os controles de ciclo, auditoria e criptografia próprios do cofre.
  • Não coloque toda configuração comum no : perdem-se rótulos, sinalizadores, instantâneos e throughput próprio de configuração.
  • Não duplique o valor nos dois serviços: as cópias divergem; mantenha uma fonte de verdade e uma referência.
  • Não mantenha valores fixos no código depois da adoção: isso contorna atualização e governança.
  • Não use intervalos agressivos sem medir volume, limitação e custo.

Resumo rápido

Um ponto de entrada e uma fonte segura evitam duplicação, controles inadequados e reimplantação desnecessária.

17. Exercício guiado com Flask

O exercício de origem provisiona uma e um com dados de exemplo e completa um aplicativo Flask em Python que compõe rótulos, resolve referências, lista propriedades e e aciona atualização por sentinela. Reserve cerca de 30 minutos e use assinatura do , , Python 3.12 ou superior e a CLI do mais recente.

  1. Baixe o projeto inicial e crie um ambiente virtual.
  2. Crie os serviços com valores padrão e rotulados e uma referência de segredo.
  3. Conceda às identidades as funções necessárias nos dois recursos.
  4. Complete seletores, remoção de prefixo, DefaultAzureCredential, resolução e atualização.
  5. Execute o Flask, inspecione valores e sem imprimir credenciais e confirme substituições.
  6. Altere vários valores, publique a sentinela por último, atualize e confirme o novo conjunto consistente.
  7. Rotacione o segredo sem versão, aguarde ou acione a atualização elegível e confirme a mudança sem alterar a referência.
  8. Exclua recursos e atribuições temporárias.
# Required environment
export AZURE_APPCONFIG_ENDPOINT="https://<store>.azconfig.io"
export APP_ENVIRONMENT="Development"

# Authenticate the developer identity locally.
az login

# Start the completed Python 3.12+ Flask starter.
python -m flask --app app run

# In another terminal, change one or more settings, then update Sentinel.
# Return to the app and trigger its refresh operation to observe the new set.

Resumo rápido

O laboratório comprova provisionamento, autorização, leitura, composição, resolução, inspeção, atualização, rotação, verificação e limpeza.

18. Revisão da avaliação, checklist e referências

Decisões da avaliação
PerguntaMelhor respostaMotivo
Padrão e Production retornam :BatchSizeValor de ProductionO seletor posterior substitui o anterior.
O que a referência armazena?, e tipo de conteúdoO valor permanece no cofre.
Onde guardar gpt-4o como implantação?Chave-valor comum na Controla comportamento e não concede acesso.
Quais funções resolvem uma referência? Data Reader e Secrets UserÉ necessário ler o ponteiro e depois o segredo.
Como efetivar atualização por sentinela?A aplicação chama refresh após a mudança e quando o intervalo permiteA atualização é orientada à atividade.

Checklist final de projeto

  • Use hierarquia estável e rótulos em vez de ambiente nas chaves.
  • Carregue somente o prefixo necessário e aplique padrões antes das substituições.
  • Use , e menor privilégio.
  • Publique o conjunto antes da sentinela.
  • Trate sinalizadores como controles operacionais com telemetria e alternativa.
  • Use referência sem versão quando desejar adoção automática da rotação.
  • Defina separadamente os intervalos de configuração, sinalizadores e segredos.
  • Monitore falhas de atualização, estado obsoleto, exposição, erros do cofre, limitação e reversão.
  1. geral da do
  2. Referência do provedor Python
  3. Início rápido do provedor Python
  4. Gerenciamento de recursos com Python
  5. Sinalizadores de recursos em aplicativo Python
  6. Práticas recomendadas da
  7. Proteção da implantação
  8. geral do do

Resumo rápido

O projeto completo alinha modelo, , rótulos, sinalizadores, três ciclos de atualização, em dois serviços, classificação, operação e reversão.