Azure Provisioning core library for JavaScript

@azure/provisioning-corefornece o modelo de autoria partilhada para bibliotecas de recursos de provisionamento do Azure.

Como Começar

Crie uma pilha de implantação e depois anexe recursos à pilha ou a outro componente de provisionamento:

import { Stack, ResourceGroup, fn } from "@azure/provisioning-core";

const stack = new Stack("application");
new ResourceGroup(stack, {
  name: fn.concat("rg-", fn.uniqueString("application")),
  location: "eastus",
});

Use a API principal Resource para anexar um recurso Key Vault diretamente a um grupo de recursos:

import { Stack, ResourceGroup, Resource, fn } from "@azure/provisioning-core";

const stack = new Stack("keyvault-deployment");
const resourceGroup = new ResourceGroup(stack, {
  name: "rg-keyvault",
  location: "eastus",
});
new Resource(resourceGroup, {
  type: "Microsoft.KeyVault/vaults",
  apiVersion: "2024-11-01",
  name: fn.concat("kv-", fn.uniqueString(resourceGroup.id)),
  location: resourceGroup.location,
  properties: {
    tenantId: "00000000-0000-0000-0000-000000000000",
    sku: { family: "A", name: "standard" },
  },
});

Para classes de recursos tipados específicas de serviço, veja o exemplo de provisionamento do Key Vault.

As definições de provisionamento são elaboradas antes da implementação. As propriedades de recursos apenas de leitura permanecem disponíveis como expressões para as saídas de ligação e recursos dependentes, enquanto apenas propriedades graváveis podem ser atribuídas.

Discriminadores de tempo de desdobramento

As propriedades do discriminador usam tipos literais para que o TypeScript possa selecionar o membro da união correto. Quando um discriminador provém de uma expressão de tempo de implantação, usa-se asDiscriminator para selecionar a variante pretendida enquanto se mantém a verificação de tipos para as suas outras propriedades:

import { ParameterCollection, asDiscriminator } from "@azure/provisioning-core";

type Rule =
  | {
      kind: "cache";
      cacheKind: "long" | "short";
      days: number;
    }
  | {
      kind: "redirect";
      url: string;
    };
const ruleKind = new ParameterCollection().add("ruleKind", "string", {
  allowed: ["cache"],
});
const widget: {
  properties: {
    primaryRule?: Rule;
  };
} = {
  properties: {},
};
widget.properties.primaryRule = {
  kind: asDiscriminator(ruleKind),
  cacheKind: "long",
  days: 7,
};

Prefiro discriminadores literais sempre que possível. asDiscriminator não valida o valor do tempo de implementação; restringe o parâmetro ao literal pretendido usando allowed.