Partilhar via


Utilização programática do Bicep com JSON-RPC

Observação

O comando jsonrpc foi introduzido pela primeira vez na versão Bicep 0.29.45. Os parâmetros e o formato do resultado são estáveis e retrocompatíveis. Novos campos poderão ser adicionados aos resultados em versões futuras, mas os campos existentes não serão removidos nem renomeados. Os clientes devem ignorar campos desconhecidos para se manterem compatíveis com as versões mais recentes da CLI do Bicep.

O comando jsonrpc executa a CLI Bicep com uma interface JSON-RPC. Ao usar esta interface, pode interagir programaticamente com a saída estruturada. Também evita atrasos no arranque a frio ao compilar vários ficheiros. Esta configuração suporta a construção de bibliotecas para interagir programáticamente com o Bicep.

Formato de fios

O formato do fio segue a especificaçãoJSON-RPC 2.0. Cada mensagem é delimitada por cabeçalhos, usando a seguinte estrutura, onde \r e \n representam caracteres de retorno de carro e de avanço de linha:

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

Por exemplo, 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 é o seguinte:

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 é seguro para threads, mas como os pedidos são multiplexados num único canal, é responsabilidade do cliente garantir que os pedidos são serializados. Isto significa que cada pedido deve ser enviado na íntegra antes de enviar um segundo pedido, e um pedido id único deve ser enviado para cada pedido. O cliente não precisa de esperar por uma resposta antes de enviar um novo pedido.

Methods

Os seguintes métodos estão disponíveis através da interface JSON-RPC.

bíceps/versão

Devolve a versão do Bicep CLI.

Params

Este método não aceita parámetros.

Result

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

Exemplo

Parámetros:

{}

Resultado:

{
  "version": "0.24.211"
}

bíceps/compilar

Compila um ficheiro especificado .bicep e devolve o template ARM compilado JSON.

Params

Propriedade Tipo Descrição
path cadeia (de caracteres) O caminho do ficheiro para o .bicep ficheiro a compilar.

Result

Propriedade Tipo Descrição
success Booleano Se a compilação foi concluída sem erros.
diagnostics DiagnósticoDefinição[] Diagnósticos produzidos durante a compilação.
contents string | null O modelo ARM compilado JSON, ou null se a compilação falhasse.

Exemplo

Parámetros:

{
  "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 ficheiro especificado .bicepparam . Devolve os parâmetros compilados JSON e o template associado.

Params

Propriedade Tipo Descrição
path cadeia (de caracteres) O caminho do ficheiro para o .bicepparam ficheiro a compilar.
parameterOverrides objecto Um dicionário de nomes de parâmetros para valores JSON que sobrepõem os valores definidos especificados no ficheiro de parâmetros.

Result

Propriedade Tipo Descrição
success Booleano Se a compilação foi concluída sem erros.
diagnostics DiagnósticoDefinição[] Diagnósticos produzidos durante a compilação.
parameters string | null Os parâmetros ARM compilados JSON, ou null se a compilação falhasse.
template string | null O template ARM compilado em JSON referenciado pelo ficheiro de parâmetros, ou null se não fosse resolvível.
templateSpecId string | null O ID de recurso Azure da especificação do template se o ficheiro de parâmetros referir um; caso contrário, null.

Exemplo

Parámetros:

{
  "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
}

bícep/getMetadata

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

Params

Propriedade Tipo Descrição
path cadeia (de caracteres) O caminho do ficheiro para o .bicep ficheiro a analisar.

Result

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

Exemplo

Parámetros:

{
  "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

Devolve o gráfico de implementação de um ficheiro especificado .bicep , descrevendo os recursos e as suas dependências.

Params

Propriedade Tipo Descrição
path cadeia (de caracteres) O caminho do ficheiro para o .bicep ficheiro a analisar.

Result

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

Exemplo

Parámetros:

{
  "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" }
  ]
}

bíceps/getFileReferences

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

Params

Propriedade Tipo Descrição
path cadeia (de caracteres) O caminho do ficheiro para o .bicep ficheiro a analisar.

Result

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

Exemplo

Parámetros:

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

Resultado:

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

bíceps/getSnapshot

Observação

Este método requer a versão 0.36.1 do Bicep CLI ou superior.

Cria um snapshot de implementação para um determinado .bicepparam ficheiro. O snapshot agrupa toda a informação necessária para a implementação num único documento JSON autónomo.

Params

Propriedade Tipo Descrição
path cadeia (de caracteres) O caminho do ficheiro para o .bicepparam ficheiro.
metadata SnapshotMetadados Metadados de implementação que fornecem contexto Azure. Todos os campos são opcionais.
externalInputs ValorEntradaExterna[] | null Valores de entrada externos para injetar no snapshot. Passe null se não for necessário.

Result

Propriedade Tipo Descrição
snapshot cadeia (de caracteres) O snapshot de implementação autónomo como uma string JSON.

Exemplo

Parámetros:

{
  "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": "{...}"
}

bíceps/formato

Observação

Este método requer a versão 0.37.1 do Bicep CLI ou superior.

Formata um ficheiro especificado .bicep .

Params

Propriedade Tipo Descrição
path cadeia (de caracteres) O caminho do ficheiro para o .bicep ficheiro a formatar.

Result

Propriedade Tipo Descrição
contents cadeia (de caracteres) O código-fonte formatado do Bicep.

Exemplo

Parámetros:

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

Resultado:

{
  "contents": "..."
}

Tipos

Os seguintes tipos são usados nas entradas e saídas dos métodos.

Position

Representa uma posição baseada em zero dentro de um ficheiro-fonte Bicep.

Propriedade Tipo Descrição
line número inteiro Número de linha com base zero.
char número inteiro Deslocamento de caracteres base zero dentro da linha.

Intervalo

Representa um intervalo dentro de um ficheiro-fonte Bicep.

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

Definição de Diagnóstico

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

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

MetadadosDefinição

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

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

SymbolDefinition

Representa um parâmetro ou símbolo de saída num ficheiro Bicep.

Propriedade Tipo Descrição
range Intervalo Localização de origem da declaração do símbolo.
name cadeia (de caracteres) Nome do parâmetro ou saída.
type Definição de Tipo | null Tipo do símbolo, ou null se não resolvível.
description string | null Descrição do @description() decorador, ou null se não especificada.

Definição de Tipo

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

Propriedade Tipo Descrição
range Alcance | null Localização de origem da referência de tipos, ou null para tipos incorporados.
name cadeia (de caracteres) O nome do tipo (por exemplo, "string", "int", "object", ou um nome de tipo definido pelo utilizador).

ExportDefinition

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

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

Node

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

Propriedade Tipo Descrição
range Intervalo Localização de origem da declaração de recurso.
name cadeia (de caracteres) Nome simbólico do recurso no ficheiro Bicep.
type cadeia (de caracteres) Totalmente qualificado Azure tipo de recurso (por exemplo, "Microsoft.Storage/storageAccounts").
isExisting Booleano Se o recurso é uma existing referência e não uma nova implementação.
relativePath string | null Caminho relativo se o recurso estiver definido num módulo; caso contrário null.

Edge

Representa uma aresta de dependência direcionada entre dois nós de recurso num grafo de implementação.

Propriedade Tipo Descrição
source cadeia (de caracteres) Nome simbólico do recurso dependente.
target cadeia (de caracteres) Nome simbólico do recurso em que depende.

SnapshotMetadados

Fornece contexto de implementação no Azure para geração de snapshots. Todos os campos são opcionais.

Propriedade Tipo Descrição
tenantId string | null O ID do inquilino do Azure Active Directory.
subscriptionId string | null O ID de subscrição do Azure.
resourceGroup string | null O nome do grupo de recursos-alvo.
location string | null A região Azure para a implementação.
deploymentName string | null O nome da implantação.

Valor de EntradaExterna

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

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

Usage

Com transporte de tubos nomeado

Use o argumento --pipe para passar um canal nomeado para a Bicep CLI se ligar. Note que o processo de chamada já deve ter iniciado o pipeline como servidor, e a CLI do Bicep irá ligar-se como cliente.

bicep jsonrpc --pipe <named_pipe>

<named_pipe> é um tubo nomeado existente para ligar o cliente JSON-RPC.

Exemplo

Para se ligar a um pipe nomeado no macOS ou Linux:

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

Para ligar a um tubo nomeado no Windows:

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

Com transporte de soquete TCP

Use o argumento --socket para passar uma porta TCP para que a CLI do Bicep se ligue. Note que o processo de chamada já deve estar a ouvir ligações na porta.

bicep jsonrpc --socket <tcp_socket>

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

Exemplo

Para ligar a um soquete TCP:

bicep jsonrpc --socket 12345

Com transporte stdin/stdout

Use a seguinte sintaxe para iniciar o servidor JSON-RPC com dados de pedido recebidos via stdin e dados de resposta enviados via stdout.

bicep jsonrpc --stdio

Biblioteca cliente .NET

O Azure.Bicep. O pacote NuGet RpcClient fornece uma biblioteca cliente .NET para a interface Bicep JSON-RPC. Pode descarregar automaticamente a versão especificada do Bicep CLI e gerir o seu ciclo de vida, por isso não precisa de o instalar separadamente.

Exemplo

O exemplo seguinte descarrega Bicep versão CLI 0.39.26, compila um ficheiro Bicep e imprime o template 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);