Freigeben über


Programmgesteuerte Bicep Verwendung mit JSON-RPC

Hinweis

Der Befehl jsonrpc wurde erstmals in Bicep Version 0.29.45 eingeführt. Das Params- und Ergebnisformat ist stabil und abwärtskompatibel. Neue Felder können zu Ergebnissen in zukünftigen Versionen hinzugefügt werden, vorhandene Felder werden jedoch nicht entfernt oder umbenannt. Clients sollten unbekannte Felder ignorieren, um mit neueren Versionen der Bicep CLI kompatibel zu bleiben.

Der Befehl jsonrpc führt die Bicep CLI mit einer JSON-RPC Schnittstelle aus. Mithilfe dieser Schnittstelle können Sie programmgesteuert mit strukturierter Ausgabe interagieren. Sie vermeiden auch Verzögerungen beim Kaltstart beim Kompilieren mehrerer Dateien. Dieses Setup unterstützt das Erstellen von Bibliotheken für die programmgesteuerte Interaktion mit Bicep.

Drahtformat

Das Drahtformat entspricht der JSON-RPC 2.0-Spezifikation. Jede Nachricht ist durch Kopfzeilen getrennt, wobei die folgende Struktur verwendet wird, wobei \r Wagenrücklauf- und Zeilenvorschubzeichen dargestellt werden \n :

Content-Length: <length>\r\n\r\n<message>\r\n\r\n
  • <length> ist die Länge der <message> Zeichenfolge, einschließlich des nachgestellten \r\n\r\n.
  • <message> ist die unformatierte JSON-Nachricht.

So rufen Sie beispielsweise die bicep/version Methode auf:

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

Das entsprechende Ergebnis sieht wie folgt aus:

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

Hinweis

Der JSON-RPC-Server ist threadsicher, da Anforderungen jedoch über einen einzelnen Kanal multixiert werden, liegt es in der Verantwortung des Clients, sicherzustellen, dass Anforderungen serialisiert werden. Dies bedeutet, dass jede Anforderung vollständig gesendet werden muss, bevor eine zweite Anforderung gesendet wird, und eine eindeutige id Anforderung muss für jede Anforderung gesendet werden. Der Client muss nicht auf eine Antwort warten, bevor eine neue Anforderung gesendet wird.

Methodik

Die folgenden Methoden sind über die JSON-RPC Schnittstelle verfügbar.

bicep/version

Gibt die Version der Bicep CLI zurück.

Params

Diese Methode verwendet keine Params.

Ergebnis

Eigentum Typ Beschreibung
version Schnur Die semantische Versionszeichenfolge der Bicep CLI (z. B. "0.38.5").

Beispiel

Params:

{}

Ergebnis:

{
  "version": "0.24.211"
}

bicep/compile

Kompiliert eine angegebene .bicep Datei und gibt die kompilierte ARM-Vorlagen-JSON zurück.

Params

Eigentum Typ Beschreibung
path Schnur Der Dateipfad zur .bicep zu kompilierten Datei.

Ergebnis

Eigentum Typ Beschreibung
success boolean Gibt an, ob die Kompilierung ohne Fehler abgeschlossen wurde.
diagnostics DiagnosticDefinition[] Während der Kompilierung produzierte Diagnose.
contents Zeichenfolge | Null Die kompilierte ARM-Vorlagen-JSON oder null wenn die Kompilierung fehlgeschlagen ist.

Beispiel

Params:

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

Ergebnis:

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

bicep/compileParams

Kompiliert eine angegebene .bicepparam Datei. Gibt die kompilierten Parameter JSON und die zugeordnete Vorlage zurück.

Params

Eigentum Typ Beschreibung
path Schnur Der Dateipfad zur .bicepparam zu kompilierten Datei.
parameterOverrides Objekt Ein Wörterbuch mit Parameternamen zu JSON-Werten, die die in der Parameterdatei angegebenen Standardwerte überschreiben.

Ergebnis

Eigentum Typ Beschreibung
success boolean Gibt an, ob die Kompilierung ohne Fehler abgeschlossen wurde.
diagnostics DiagnosticDefinition[] Während der Kompilierung produzierte Diagnose.
parameters Zeichenfolge | Null Die kompilierten ARM-Parameter JSON oder null wenn die Kompilierung fehlgeschlagen ist.
template Zeichenfolge | Null Die kompilierte ARM-Vorlage JSON, auf die von der Parameterdatei verwiesen wird oder null nicht aufgelöst werden kann.
templateSpecId Zeichenfolge | Null Die Azure Ressourcen-ID der Vorlagenspezifikation, wenn die Parameterdatei auf eine verweist; andernfalls null.

Beispiel

Params:

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

Ergebnis:

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

Gibt Metadaten zu einer angegebenen .bicep Datei zurück, einschließlich Parametern, Ausgaben, Exporten und Metadatendekortoren.

Params

Eigentum Typ Beschreibung
path Schnur Der Dateipfad zur .bicep zu analysierenden Datei.

Ergebnis

Eigentum Typ Beschreibung
metadata MetadataDefinition[] Metadateneinträge auf Dateiebene, die mit dem metadata Schlüsselwort deklariert wurden.
parameters SymbolDefinition[] Parameterdefinitionen, die in der datei Bicep deklariert sind.
outputs SymbolDefinition[] In der datei Bicep deklarierte Ausgabedefinitionen.
exports ExportDefinition[] Exportierte Symbole, die mit dem @export() Dekorierer deklariert wurden.

Beispiel

Params:

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

Ergebnis:

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

Gibt das Bereitstellungsdiagramm für eine angegebene .bicep Datei zurück, das die Ressourcen und deren Abhängigkeiten beschreibt.

Params

Eigentum Typ Beschreibung
path Schnur Der Dateipfad zur .bicep zu analysierenden Datei.

Ergebnis

Eigentum Typ Beschreibung
nodes Knoten[] Die Ressourcenknoten im Bereitstellungsdiagramm.
edges Edge[] Die Abhängigkeitsränder zwischen Ressourcenknoten.

Beispiel

Params:

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

Ergebnis:

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

Ruft die vollständige Liste der Dateipfade ab, auf die von einer Kompilierung verwiesen wird. Nützlich, um eine Reihe von Dateien zu bestimmen, die auf Änderungen überwacht werden sollen.

Params

Eigentum Typ Beschreibung
path Schnur Der Dateipfad zur .bicep zu analysierenden Datei.

Ergebnis

Eigentum Typ Beschreibung
filePaths string[] Absolute Pfade aller Dateien, auf die während der Kompilierung verwiesen wird, einschließlich der Eingabedatei selbst, aller Module und Konfigurationsdateien.

Beispiel

Params:

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

Ergebnis:

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

bicep/getSnapshot

Hinweis

Diese Methode erfordert Bicep CLI Version 0.36.1 oder höher.

Erstellt eine Bereitstellungsmomentaufnahme für eine bestimmte .bicepparam Datei. Die Momentaufnahme bündelt alle Informationen, die für die Bereitstellung in einem einzigen eigenständigen JSON-Dokument erforderlich sind.

Params

Eigentum Typ Beschreibung
path Schnur Der Dateipfad zur .bicepparam Datei.
metadata SnapshotMetadata Bereitstellungsmetadaten, die Azure Kontext bereitstellen. Alle Felder sind optional.
externalInputs ExternalInputValue[] | Null Externe Eingabewerte, die in die Momentaufnahme eingefügt werden sollen. Pass, null falls nicht erforderlich.

Ergebnis

Eigentum Typ Beschreibung
snapshot Schnur Die eigenständige Bereitstellungsmomentaufnahme als JSON-Zeichenfolge.

Beispiel

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": []
}

Ergebnis:

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

bicep/format

Hinweis

Diese Methode erfordert Bicep CLI Version 0.37.1 oder höher.

Formatiert eine angegebene .bicep Datei.

Params

Eigentum Typ Beschreibung
path Schnur Der Dateipfad zur .bicep zu formatierenden Datei.

Ergebnis

Eigentum Typ Beschreibung
contents Schnur Der formatierte Bicep Quellcode.

Beispiel

Params:

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

Ergebnis:

{
  "contents": "..."
}

Typen

Die folgenden Typen werden in Methodeneingaben und -ausgaben verwendet.

Position

Stellt eine nullbasierte Position innerhalb einer Bicep Quelldatei dar.

Eigentum Typ Beschreibung
line Integer Nullbasierte Zeilennummer.
char Integer Nullbasierter Zeichenabstand innerhalb der Zeile.

Bereich

Stellt einen Bereich in einer Bicep Quelldatei dar.

Eigentum Typ Beschreibung
start Position Startposition des Bereichs (einschließlich).
end Position Endposition des Bereichs (exklusiv).

DiagnosticDefinition

Stellt eine Diagnosenachricht dar, die während der Kompilierung oder Analyse erstellt wurde.

Eigentum Typ Beschreibung
source Schnur Quelle der Diagnose (z. B. "bicep" für compilerdiagnose oder linter-Regelname).
range Bereich Quellspeicherortbereich, in dem die Diagnose angewendet wird.
level Schnur Schweregrad: "Error", "Warning", oder "Info".
code Schnur Diagnosecode, der den Diagnosetyp identifiziert (z. B. "BCP001").
message Schnur Lesbare Diagnosenachricht.

MetadataDefinition

Stellt einen Metadateneintrag auf Dateiebene dar, der mit dem metadata Schlüsselwort deklariert ist.

Eigentum Typ Beschreibung
name Schnur Der Name des Metadatenschlüssels (z. B. "description").
value Schnur Der Metadatenwert.

SymbolDefinition

Stellt einen Parameter oder ein Ausgabesymbol in einer Bicep Datei dar.

Eigentum Typ Beschreibung
range Bereich Quellspeicherort der Symboldeklaration.
name Schnur Name des Parameters oder der Ausgabe.
type TypeDefinition | Null Typ des Symbols oder null wenn nicht aufgelöst werden kann.
description Zeichenfolge | Null Beschreibung vom @description() Dekorateur oder null falls nicht angegeben.

TypeDefinition

Stellt einen Typverweis für einen Parameter oder eine Ausgabe dar.

Eigentum Typ Beschreibung
range Bereich | Null Quellspeicherort des Typverweises oder null für integrierte Typen.
name Schnur Der Typname (z. B. , "string", "int", oder "object"ein benutzerdefinierter Typname).

ExportDefinition

Stellt ein exportiertes Symbol dar, das mit dem @export() Dekorateur deklariert ist.

Eigentum Typ Beschreibung
range Bereich Quellspeicherort der Exportdeklaration.
name Schnur Name des exportierten Symbols.
kind Schnur Art des Exports: "Type", , "Variable"oder "Function".
description Zeichenfolge | Null Beschreibung vom @description() Dekorateur oder null falls nicht angegeben.

Node

Stellt einen Ressourcenknoten in einem Bereitstellungsdiagramm dar.

Eigentum Typ Beschreibung
range Bereich Quellspeicherort der Ressourcendeklaration.
name Schnur Symbolischer Name der Ressource in der datei Bicep.
type Schnur Vollqualifizierter Azure Ressourcentyp (z. B. "Microsoft.Storage/storageAccounts").
isExisting boolean Gibt an, ob es sich bei der Ressource um einen existing Verweis und nicht um eine neue Bereitstellung handelt.
relativePath Zeichenfolge | Null Relativer Pfad, wenn die Ressource in einem Modul definiert ist; andernfalls null.

Microsoft Edge

Stellt einen gerichteten Abhängigkeitsrand zwischen zwei Ressourcenknoten in einem Bereitstellungsdiagramm dar.

Eigentum Typ Beschreibung
source Schnur Symbolischer Name der abhängigen Ressource.
target Schnur Symbolischer Name der Ressource, von der abhängig ist.

SnapshotMetadata

Stellt Azure Bereitstellungskontext für die Momentaufnahmegenerierung bereit. Alle Felder sind optional.

Eigentum Typ Beschreibung
tenantId Zeichenfolge | Null Die Azure Active Directory Mandanten-ID.
subscriptionId Zeichenfolge | Null Die Azure Abonnement-ID.
resourceGroup Zeichenfolge | Null Der Name der Zielressourcengruppe.
location Zeichenfolge | Null Die region Azure für die Bereitstellung.
deploymentName Zeichenfolge | Null Der Name des Einsatzes.

ExternalInputValue

Stellt einen externen Eingabewert dar, der in eine Momentaufnahme eingefügt werden soll.

Eigentum Typ Beschreibung
kind Schnur Die Art der externen Eingabe (z. B. der Eingabeanbietertyp).
config any | Null Optionale JSON-Konfiguration für die externe Eingabe oder null bei Bedarf.
value Beliebig Der JSON-Wert für die externe Eingabe.

Verwendung

Mit benannten Rohrtransporten

Verwenden Sie das Argument --pipe, um eine benannte Pipe für die Bicep CLI zur Verbindung zu übergeben. Beachten Sie, dass der Aufrufvorgang die Pipe bereits als Server initiiert haben muss, und Bicep CLI eine Verbindung als Client herstellt.

bicep jsonrpc --pipe <named_pipe>

<named_pipe> ist eine vorhandene benannte Pipe, mit der der JSON-RPC Client verbunden werden soll.

Beispiel

So stellen Sie eine Verbindung mit einer benannten Pipe unter macOS oder Linux her:

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

So stellen Sie eine Verbindung mit einer benannten Pipe auf Windows her:

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

Mit TCP-Sockettransport

Verwenden Sie das Argument --socket, um einen TCP-Port für die Bicep CLI zur Verbindung zu übergeben. Beachten Sie, dass der Aufrufvorgang bereits auf Verbindungen am Port lauschen muss.

bicep jsonrpc --socket <tcp_socket>

<tcp_socket> ist die Socketnummer, mit der der JSON-RPC Client eine Verbindung herstellt.

Beispiel

So stellen Sie eine Verbindung mit einem TCP-Socket her:

bicep jsonrpc --socket 12345

Mit Stdin/Stdout-Transport

Verwenden Sie die folgende Syntax, um den JSON-RPC-Server mit Anforderungsdaten zu starten, die über Stdin empfangen wurden, und Antwortdaten, die über stdout gesendet werden.

bicep jsonrpc --stdio

.NET-Clientbibliothek

Die Azure.Bicep. RpcClient NuGet-Paket stellt eine .NET Clientbibliothek für die Bicep JSON-RPC Schnittstelle bereit. Sie kann die angegebene Version der Bicep CLI automatisch herunterladen und den Lebenszyklus verwalten, sodass Sie sie nicht separat installieren müssen.

Beispiel

Im folgenden Beispiel werden Bicep CLI-Version 0.39.26 heruntergeladen, eine Bicep Datei kompiliert und die resultierende ARM-Vorlage gedruckt:

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);