Compartilhar via


Uso de Bicep programática com JSON-RPC

Observação

O comando jsonrpc foi introduzido pela primeira vez no Bicep versão 0.29.45. Os parâmetros e o formato de resultado são estáveis e compatíveis com versões anteriores. Novos campos podem ser adicionados aos resultados em versões futuras, mas os campos existentes não serão removidos ou renomeados. Os clientes devem ignorar campos desconhecidos para permanecerem compatíveis com versões mais recentes da CLI Bicep.

O comando jsonrpc executa a CLI Bicep com uma interface JSON-RPC. Usando essa interface, você pode interagir programaticamente com a saída estruturada. Você também evita atrasos de início frio ao compilar vários arquivos. Essa configuração dá suporte à criação de bibliotecas para interagir com Bicep programaticamente.

Formato de fio

O formato de fio adere à especificaçãoJSON-RPC 2.0. Cada mensagem é delimitada por cabeçalho, usando a seguinte estrutura, onde \r e \n representam caracteres de retorno de carro e feed de linha:

Content-Length: <length>\r\n\r\n<message>\r\n\r\n
  • <length>é o comprimento da cadeia de <message> caracteres, incluindo o .\r\n\r\n
  • <message> é a mensagem JSON bruta.

Por exemplo, para chamar o bicep/version método:

Content-Length: 72\r\n\r\n{"jsonrpc": "2.0", "id": 0, "method": "bicep/version", "params": {}}\r\n\r\n

O resultado correspondente se parece com:

Content-Length: 64\r\n\r\n{"jsonrpc": "2.0", "id": 0, "result": {"version": "0.38.5"}}\r\n\r\n

Observação

O servidor JSON-RPC é thread-safe, mas como as solicitações são multiplexadas em um único canal, é responsabilidade do cliente garantir que as solicitações sejam serializadas. Isso significa que cada solicitação deve ser enviada na íntegra antes de enviar uma segunda solicitação e uma exclusiva id deve ser enviada para cada solicitação. O cliente não precisa aguardar uma resposta antes de enviar uma nova solicitação.

Methods

Os métodos a seguir estão disponíveis por meio da interface JSON-RPC.

bicep/versão

Retorna a versão da CLI do Bicep.

Params

Esse método não usa parâmetros.

Resultado

Propriedade Tipo Descrição
version cadeia A cadeia de caracteres de versão semântica da CLI do Bicep (por exemplo, "0.38.5").

Exemplo

Params:

{}

Resultado:

{
  "version": "0.24.211"
}

bicep/compile

Compila um arquivo especificado .bicep e retorna o modelo do ARM compilado JSON.

Params

Propriedade Tipo Descrição
path cadeia O caminho do arquivo para o .bicep arquivo a ser compilado.

Resultado

Propriedade Tipo Descrição
success boolean Se a compilação foi concluída sem erros.
diagnostics DiagnosticDefinition[] Diagnóstico produzido durante a compilação.
contents cadeia de caracteres | Null O JSON do modelo arm compilado ou null se a compilação falhou.

Exemplo

Params:

{
  "path": "/path/to/main.bicep"
}

Resultado:

{
  "success": true,
  "diagnostics": [],
  "contents": "{\"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\", ...}"
}

bicep/compileParams

Compila um arquivo especificado .bicepparam . Retorna os parâmetros compilados JSON e o modelo associado.

Params

Propriedade Tipo Descrição
path cadeia O caminho do arquivo para o .bicepparam arquivo a ser compilado.
parameterOverrides objeto Um dicionário de nomes de parâmetro para valores JSON que substituem os padrões especificados no arquivo de parâmetros.

Resultado

Propriedade Tipo Descrição
success boolean Se a compilação foi concluída sem erros.
diagnostics DiagnosticDefinition[] Diagnóstico produzido durante a compilação.
parameters cadeia de caracteres | Null O JSON dos parâmetros ARM compilados ou null se a compilação falhou.
template cadeia de caracteres | Null O JSON do modelo arm compilado referenciado pelo arquivo de parâmetros ou null , se não for resolvível.
templateSpecId cadeia de caracteres | Null O Azure ID do recurso da especificação de modelo se o arquivo de parâmetros fizer referência a um; caso contrário, null.

Exemplo

Params:

{
  "path": "/path/to/main.bicepparam",
  "parameterOverrides": {}
}

Resultado:

{
  "success": true,
  "diagnostics": [],
  "parameters": "{\"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#\", ...}",
  "template": "{\"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\", ...}",
  "templateSpecId": null
}

bicep/getMetadata

Retorna metadados sobre um arquivo especificado .bicep , incluindo parâmetros, saídas, exportações e decoradores de metadados.

Params

Propriedade Tipo Descrição
path cadeia O caminho do arquivo para o .bicep arquivo a ser analisado.

Resultado

Propriedade Tipo Descrição
metadata MetadataDefinition[] Entradas de metadados no nível do arquivo declaradas com a metadata palavra-chave.
parameters SymbolDefinition[] Definições de parâmetro declaradas no arquivo Bicep.
outputs SymbolDefinition[] Definições de saída declaradas no arquivo Bicep.
exports ExportDefinition[] Símbolos exportados declarados com o @export() decorador.

Exemplo

Params:

{
  "path": "/path/to/main.bicep"
}

Resultado:

{
  "metadata": [
    { "name": "description", "value": "My deployment" }
  ],
  "parameters": [
    {
      "range": { "start": { "line": 0, "char": 0 }, "end": { "line": 0, "char": 20 } },
      "name": "location",
      "type": { "range": null, "name": "string" },
      "description": "The Azure region for deployment"
    }
  ],
  "outputs": [
    {
      "range": { "start": { "line": 5, "char": 0 }, "end": { "line": 5, "char": 30 } },
      "name": "endpoint",
      "type": { "range": null, "name": "string" },
      "description": null
    }
  ],
  "exports": []
}

bicep/getDeploymentGraph

Retorna o grafo de implantação de um arquivo especificado .bicep , descrevendo os recursos e suas dependências.

Params

Propriedade Tipo Descrição
path cadeia O caminho do arquivo para o .bicep arquivo a ser analisado.

Resultado

Propriedade Tipo Descrição
nodes node[] Os nós de recurso no grafo de implantação.
edges Borda[] As bordas de dependência entre nós de recurso.

Exemplo

Params:

{
  "path": "/path/to/main.bicep"
}

Resultado:

{
  "nodes": [
    {
      "range": { "start": { "line": 2, "char": 0 }, "end": { "line": 8, "char": 1 } },
      "name": "storageAccount",
      "type": "Microsoft.Storage/storageAccounts",
      "isExisting": false,
      "relativePath": null
    }
  ],
  "edges": [
    { "source": "roleAssignment", "target": "storageAccount" }
  ]
}

bicep/getFileReferences

Obtém a lista completa de caminhos de arquivo referenciados por uma compilação. Útil para determinar um conjunto de arquivos para observar as alterações.

Params

Propriedade Tipo Descrição
path cadeia O caminho do arquivo para o .bicep arquivo a ser analisado.

Resultado

Propriedade Tipo Descrição
filePaths cadeia de caracteres[] Caminhos absolutos de todos os arquivos referenciados durante a compilação, incluindo o próprio arquivo de entrada, quaisquer módulos e arquivos de configuração.

Exemplo

Params:

{
  "path": "/path/to/main.bicep"
}

Resultado:

{
  "filePaths": [
    "/path/to/main.bicep",
    "/path/to/modules/storage.bicep",
    "/path/to/bicepconfig.json"
  ]
}

bicep/getSnapshot

Observação

Esse método requer Bicep CLI versão 0.36.1 ou superior.

Cria um instantâneo de implantação para um determinado .bicepparam arquivo. O instantâneo agrupa todas as informações necessárias para implantação em um único documento JSON independente.

Params

Propriedade Tipo Descrição
path cadeia O caminho do arquivo para o .bicepparam arquivo.
metadata SnapshotMetadata Metadados de implantação que fornecem Azure contexto. Todos os campos são opcionais.
externalInputs ExternalInputValue[] | Null Valores de entrada externos para injetar no instantâneo. Passe null se não for necessário.

Resultado

Propriedade Tipo Descrição
snapshot cadeia O instantâneo de implantação autossuficiente como uma cadeia de caracteres JSON.

Exemplo

Params:

{
  "path": "/path/to/main.bicepparam",
  "metadata": {
    "tenantId": "00000000-0000-0000-0000-000000000000",
    "subscriptionId": "00000000-0000-0000-0000-000000000000",
    "resourceGroup": "myResourceGroup",
    "location": "eastus",
    "deploymentName": "myDeployment"
  },
  "externalInputs": []
}

Resultado:

{
  "snapshot": "{...}"
}

bicep/format

Observação

Esse método requer Bicep CLI versão 0.37.1 ou superior.

Formata um arquivo especificado .bicep .

Params

Propriedade Tipo Descrição
path cadeia O caminho do arquivo para o .bicep arquivo a ser formatado.

Resultado

Propriedade Tipo Descrição
contents cadeia O código-fonte Bicep formatado.

Exemplo

Params:

{
  "path": "/path/to/file.bicep"
}

Resultado:

{
  "contents": "..."
}

Tipos

Os tipos a seguir são usados em entradas e saídas de método.

Posição

Representa uma posição baseada em zero em um arquivo de origem Bicep.

Propriedade Tipo Descrição
line inteiro Número de linha baseado em zero.
char inteiro Deslocamento de caractere baseado em zero dentro da linha.

Intervalo

Representa um intervalo dentro de um arquivo de origem Bicep.

Propriedade Tipo Descrição
start Posição Posição inicial do intervalo (inclusive).
end Posição Posição final do intervalo (exclusivo).

DiagnosticDefinition

Representa uma mensagem de diagnóstico produzida durante a compilação ou análise.

Propriedade Tipo Descrição
source cadeia Origem do diagnóstico (por exemplo, "bicep" para diagnóstico do compilador ou um nome de regra linter).
range Intervalo Intervalo de localização de origem em que o diagnóstico se aplica.
level cadeia Nível de gravidade: "Error", "Warning"ou "Info".
code cadeia Código de diagnóstico que identifica o tipo de diagnóstico (por exemplo, "BCP001").
message cadeia Mensagem de diagnóstico legível por humanos.

MetadadosDefinition

Representa uma entrada de metadados no nível do arquivo declarada com a metadata palavra-chave.

Propriedade Tipo Descrição
name cadeia O nome da chave de metadados (por exemplo, "description").
value cadeia O valor dos metadados.

SymbolDefinition

Representa um parâmetro ou símbolo de saída em um arquivo Bicep.

Propriedade Tipo Descrição
range Intervalo Local de origem da declaração de símbolo.
name cadeia Nome do parâmetro ou saída.
type TypeDefinition | Null Tipo do símbolo ou null , se não for retomável.
description cadeia de caracteres | Null Descrição do @description() decorador ou null se não for especificada.

TypeDefinition

Representa uma referência de tipo para um parâmetro ou saída.

Propriedade Tipo Descrição
range Intervalo | Null Local de origem da referência de tipo ou null para tipos internos.
name cadeia O nome do tipo (por exemplo, "string", ou "int""object"um nome de tipo definido pelo usuário).

ExportDefinição

Representa um símbolo exportado declarado com o @export() decorador.

Propriedade Tipo Descrição
range Intervalo Local de origem da declaração de exportação.
name cadeia Nome do símbolo exportado.
kind cadeia Tipo de exportação: "Type", "Variable"ou "Function".
description cadeia de caracteres | Null Descrição do @description() decorador ou null se não for especificada.

Node

Representa um nó de recurso em um grafo de implantação.

Propriedade Tipo Descrição
range Intervalo Local de origem da declaração de recurso.
name cadeia Nome simbólico do recurso no arquivo Bicep.
type cadeia Tipo de recurso de Azure totalmente qualificado (por exemplo, "Microsoft.Storage/storageAccounts").
isExisting boolean Se o recurso é uma existing referência em vez de uma nova implantação.
relativePath cadeia de caracteres | Null Caminho relativo se o recurso for definido em um módulo; caso contrário null.

Edge

Representa uma borda de dependência direcionada entre dois nós de recurso em um grafo de implantação.

Propriedade Tipo Descrição
source cadeia Nome simbólico do recurso dependente.
target cadeia Nome simbólico do recurso que está sendo dependente.

SnapshotMetadata

Fornece Azure contexto de implantação para geração de instantâneo. Todos os campos são opcionais.

Propriedade Tipo Descrição
tenantId cadeia de caracteres | Null A ID do locatário Azure Active Directory.
subscriptionId cadeia de caracteres | Null A ID da assinatura Azure.
resourceGroup cadeia de caracteres | Null O nome do grupo de recursos de destino.
location cadeia de caracteres | Null A região Azure para a implantação.
deploymentName cadeia de caracteres | Null O nome da implantação.

ExternalInputValue

Representa um valor de entrada externo para injetar em um instantâneo.

Propriedade Tipo Descrição
kind cadeia O tipo de entrada externa (por exemplo, o tipo de provedor de entrada).
config any | Null Configuração JSON opcional para a entrada externa ou null , se não for necessário.
value qualquer O valor JSON para a entrada externa.

Usage

Com transporte de pipe nomeado

Use o argumento --pipe para passar um pipe nomeado para a CLI do Bicep para se conectar. Observe que o processo de chamada já deve ter iniciado o pipe como um servidor e Bicep CLI se conectará como um cliente.

bicep jsonrpc --pipe <named_pipe>

<named_pipe> é um pipe nomeado existente para conectar o cliente JSON-RPC.

Exemplo

Para se conectar a um pipe nomeado no macOS ou linux:

bicep jsonrpc --pipe /tmp/bicep-81375a8084b474fa2eaedda1702a7aa40e2eaa24b3.sock

Para se conectar a um pipe nomeado no Windows:

bicep jsonrpc --pipe \\.\pipe\\bicep-81375a8084b474fa2eaedda1702a7aa40e2eaa24b3.sock

Com o transporte de soquete TCP

Use o argumento --socket para passar uma porta TCP para a CLI Bicep para se conectar. Observe que o processo de chamada já deve estar escutando conexões na porta.

bicep jsonrpc --socket <tcp_socket>

<tcp_socket> é o número do soquete ao qual o cliente JSON-RPC se conecta.

Exemplo

Para se conectar a um soquete TCP:

bicep jsonrpc --socket 12345

Com transporte stdin/stdout

Use a sintaxe a seguir para iniciar o servidor JSON-RPC com dados de solicitação recebidos por meio de stdin e dados de resposta enviados por meio de stdout.

bicep jsonrpc --stdio

biblioteca de clientes .NET

O Azure.Bicep. RpcClient pacote NuGet fornece uma biblioteca de cliente .NET para a interface Bicep JSON-RPC. Ele pode baixar automaticamente a versão especificada da CLI do Bicep e gerenciar seu ciclo de vida, portanto, você não precisa instalá-la separadamente.

Exemplo

O exemplo a seguir baixa Bicep versão da CLI 0.39.26, compila um arquivo Bicep e imprime o modelo do ARM resultante:

using Bicep.RpcClient;

var factory = new BicepClientFactory();
using var bicep = await factory.Initialize(new() {
    BicepVersion = "0.39.26"
});

var version = await bicep.GetVersion();
Console.WriteLine($"Bicep version: {version}");

var tempFile = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.bicep");
File.WriteAllText(tempFile, """
    param foo string
    output foo string = foo
    """);

var result = await bicep.Compile(new(tempFile));
Console.Write(result.Contents);