次の方法で共有


JSON-RPC でのプログラムによるBicepの使用

jsonrpc コマンドは、Bicep バージョン 0.29.45 で最初に導入されました。 パラメーターと結果形式は安定しており、下位互換性があります。 新しいフィールドは将来のバージョンで結果に追加される可能性がありますが、既存のフィールドは削除または名前変更されません。 クライアントは、新しいバージョンの Bicep CLI との互換性を維持するために、不明なフィールドを無視する必要があります。

jsonrpc コマンドは、JSON-RPC インターフェイスを使用してBicep CLI を実行します。 このインターフェイスを使用すると、構造化された出力をプログラムで操作できます。 また、複数のファイルをコンパイルするときにコールド スタートの遅延を回避することもできます。 このセットアップでは、プログラムでBicepを操作するためのライブラリの構築がサポートされています。

ワイヤ形式

ワイヤ形式は 、JSON-RPC 2.0 仕様に準拠しています。 各メッセージは、次の構造を使用してヘッダーで区切られます。ここで、 \r\n は復帰文字と改行文字を表します。

Content-Length: <length>\r\n\r\n<message>\r\n\r\n
  • <length>は、末尾の<message>を含む、\r\n\r\n文字列の長さです。
  • <message> は生の JSON メッセージです。

たとえば、 bicep/version メソッドを呼び出すには、次のようにします。

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

対応する結果は次のようになります。

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

JSON-RPC サーバーはスレッド セーフですが、要求は 1 つのチャネルで多重化されるため、クライアントは要求をシリアル化する必要があります。 つまり、2 番目の要求を送信する前に各要求を完全に送信し、要求ごとに一意の id を送信する必要があります。 クライアントは、新しい要求を送信する前に応答を待機する必要はありません。

メソッド

JSON-RPC インターフェイスでは、次のメソッドを使用できます。

bicep/version

Bicep CLI のバージョンを返します。

Params

このメソッドはパラメーターを受け取っていません。

結果

財産 タイプ 説明
version 文字列 Bicep CLI のセマンティック バージョン文字列 (例: "0.38.5")。

Params:

{}

結果:

{
  "version": "0.24.211"
}

bicep/compile

指定した .bicep ファイルをコンパイルし、コンパイル済みの ARM テンプレート JSON を返します。

Params

財産 タイプ 説明
path 文字列 コンパイルする .bicep ファイルへのファイル パス。

結果

財産 タイプ 説明
success ブーリアン コンパイルがエラーなしで完了したかどうか。
diagnostics DiagnosticDefinition[] コンパイル中に生成された診断。
contents string |Null コンパイルされた ARM テンプレート JSON。コンパイルに失敗した場合は null

Params:

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

結果:

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

bicep/compileParams

指定した .bicepparam ファイルをコンパイルします。 コンパイル済みのパラメーター JSON と関連するテンプレートを返します。

Params

財産 タイプ 説明
path 文字列 コンパイルする .bicepparam ファイルへのファイル パス。
parameterOverrides オブジェクト パラメーター ファイルで指定された既定値をオーバーライドする JSON 値へのパラメーター名のディクショナリ。

結果

財産 タイプ 説明
success ブーリアン コンパイルがエラーなしで完了したかどうか。
diagnostics DiagnosticDefinition[] コンパイル中に生成された診断。
parameters string |Null コンパイルされた ARM パラメーター JSON。コンパイルに失敗した場合は null
template string |Null パラメーター ファイルによって参照されるコンパイル済みの ARM テンプレート JSON。解決できない場合は null
templateSpecId string |Null パラメーター ファイルが参照する場合はテンプレート スペックのAzure リソース ID。それ以外の場合は null

Params:

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

結果:

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

パラメーター、出力、エクスポート、メタデータ デコレーターなど、指定した .bicep ファイルに関するメタデータを返します。

Params

財産 タイプ 説明
path 文字列 分析する .bicep ファイルへのファイル パス。

結果

財産 タイプ 説明
metadata MetadataDefinition[] metadata キーワードで宣言されたファイル レベルのメタデータ エントリ。
parameters SymbolDefinition[] Bicep ファイルで宣言されたパラメーター定義。
outputs SymbolDefinition[] Bicep ファイルで宣言された出力定義。
exports ExportDefinition[] @export() デコレーターで宣言されたエクスポートされたシンボル。

Params:

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

結果:

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

指定した .bicep ファイルのデプロイ グラフを返します。リソースとその依存関係について説明します。

Params

財産 タイプ 説明
path 文字列 分析する .bicep ファイルへのファイル パス。

結果

財産 タイプ 説明
nodes ノード[] デプロイ グラフ内のリソース ノード。
edges Edge[] リソース ノード間の依存関係エッジ。

Params:

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

結果:

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

コンパイルによって参照されるファイル パスの完全な一覧を取得します。 変更を監視するファイルのセットを決定するのに役立ちます。

Params

財産 タイプ 説明
path 文字列 分析する .bicep ファイルへのファイル パス。

結果

財産 タイプ 説明
filePaths string[] 入力ファイル自体、モジュール、構成ファイルなど、コンパイル時に参照されるすべてのファイルの絶対パス。

Params:

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

結果:

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

bicep/getSnapshot

この方法では、CLI バージョン 0.36.1 以降Bicep必要です。

特定の .bicepparam ファイルのデプロイ スナップショットを作成します。 スナップショットは、デプロイに必要なすべての情報を 1 つの自己完結型 JSON ドキュメントにバンドルします。

Params

財産 タイプ 説明
path 文字列 .bicepparam ファイルへのファイル パス。
metadata SnapshotMetadata コンテキストを提供するデプロイ メタデータAzure。 すべてのフィールドは省略可能です。
externalInputs ExternalInputValue[] |Null スナップショットに挿入する外部入力値。 必要ない場合は null を渡します。

結果

財産 タイプ 説明
snapshot 文字列 JSON 文字列としての自己完結型デプロイ スナップショット。

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

結果:

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

bicep/format

この方法では、CLI バージョン 0.37.1 以降Bicep必要です。

指定した .bicep ファイルの書式を設定します。

Params

財産 タイプ 説明
path 文字列 書式設定する .bicep ファイルへのファイル パス。

結果

財産 タイプ 説明
contents 文字列 書式設定されたBicepソース コード。

Params:

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

結果:

{
  "contents": "..."
}

種類

メソッドの入力と出力では、次の型が使用されます。

職位

Bicep ソース ファイル内の 0 から始まる位置を表します。

財産 タイプ 説明
line 整数 0 から始まる行番号。
char 整数 行内の 0 から始まる文字オフセット。

範囲

Bicep ソース ファイル内の範囲を表します。

財産 タイプ 説明
start 立場 範囲の開始位置 (両端を含む)。
end 立場 範囲の終了位置 (排他)。

DiagnosticDefinition

コンパイルまたは分析中に生成された診断メッセージを表します。

財産 タイプ 説明
source 文字列 診断のソース (コンパイラ診断の "bicep" 、リンター ルール名など)。
range 範囲 診断が適用されるソースの場所の範囲。
level 文字列 重大度レベル: "Error""Warning"、または "Info"
code 文字列 診断の種類を識別する診断コード (例: "BCP001")。
message 文字列 人間が判読できる診断メッセージ。

MetadataDefinition

metadata キーワードで宣言されたファイル レベルのメタデータ エントリを表します。

財産 タイプ 説明
name 文字列 メタデータ キー名 (例: "description")。
value 文字列 メタデータ値。

SymbolDefinition

Bicep ファイル内のパラメーターまたは出力シンボルを表します。

財産 タイプ 説明
range 範囲 シンボル宣言のソースの場所。
name 文字列 パラメーターまたは出力の名前。
type TypeDefinition |Null シンボルの種類。解決できない場合は null
description string |Null @description()デコレーターからの説明。指定されていない場合はnull

TypeDefinition

パラメーターまたは出力の型参照を表します。

財産 タイプ 説明
range 範囲 |Null 型参照のソースの場所、または組み込み型の null
name 文字列 型名 ( "string""int""object"、ユーザー定義型名など)。

エクスポート定義

@export() デコレーターで宣言されたエクスポートされたシンボルを表します。

財産 タイプ 説明
range 範囲 エクスポート宣言のソースの場所。
name 文字列 エクスポートされたシンボルの名前。
kind 文字列 エクスポートの種類: "Type""Variable"、または "Function"
description string |Null @description()デコレーターからの説明。指定されていない場合はnull

Node

デプロイ グラフ内のリソース ノードを表します。

財産 タイプ 説明
range 範囲 リソース宣言のソースの場所。
name 文字列 Bicep ファイル内のリソースのシンボリック名。
type 文字列 完全修飾Azureリソースの種類 (例: "Microsoft.Storage/storageAccounts")。
isExisting ブーリアン リソースが新しいデプロイではなく existing 参照であるかどうか。
relativePath string |Null リソースがモジュールで定義されている場合の相対パス。それ以外の場合は null

Edge

デプロイ グラフ内の 2 つのリソース ノード間の有向依存関係エッジを表します。

財産 タイプ 説明
source 文字列 依存リソースのシンボリック名。
target 文字列 依存しているリソースのシンボリック名。

SnapshotMetadata

スナップショット生成Azureデプロイ コンテキストを提供します。 すべてのフィールドは省略可能です。

財産 タイプ 説明
tenantId string |Null Azure Active Directory テナント ID。
subscriptionId string |Null Azure サブスクリプション ID。
resourceGroup string |Null ターゲット リソース グループ名。
location string |Null デプロイのAzureリージョン。
deploymentName string |Null デプロイメントの名前。

ExternalInputValue

スナップショットに挿入する外部入力値を表します。

財産 タイプ 説明
kind 文字列 外部入力の種類 (入力プロバイダーの種類など)。
config any |Null 外部入力の省略可能な JSON 構成。必要ない場合は null
value いかなる/どれでも/任意の 外部入力の JSON 値。

使用方法

名前付きパイプ トランスポートを使用する

--pipe 引数を使用して、接続する Bicep CLI の名前付きパイプを渡します。 呼び出し元のプロセスは既にサーバーとしてパイプを開始している必要があり、Bicep CLI はクライアントとして接続されることに注意してください。

bicep jsonrpc --pipe <named_pipe>

<named_pipe> は、JSON-RPC クライアントを接続する既存の名前付きパイプです。

macOS または Linux 上の名前付きパイプに接続するには:

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

Windowsの名前付きパイプに接続するには:

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

TCP ソケット トランスポートを使用する場合

Bicep CLI の接続先の TCP ポートを渡すには、--socket 引数を使用します。 呼び出し元プロセスは、ポートでの接続を既にリッスンしている必要があることに注意してください。

bicep jsonrpc --socket <tcp_socket>

<tcp_socket> は、JSON-RPC クライアントが接続するソケット番号です。

TCP ソケットに接続するには:

bicep jsonrpc --socket 12345

stdin/stdout トランスポートを使用する

stdin 経由で受信した要求データと stdout 経由で送信された応答データを使用して、JSON-RPC サーバーを起動するには、次の構文を使用します。

bicep jsonrpc --stdio

.NET クライアント ライブラリ

Azure.Bicep。RpcClient NuGet パッケージは、Bicep JSON-RPC インターフェイス用の.NET クライアント ライブラリを提供します。 指定したバージョンの Bicep CLI を自動的にダウンロードし、そのライフサイクルを管理できるため、個別にインストールする必要はありません。

次の例では、CLI バージョン 0.39.26Bicepダウンロードし、Bicep ファイルをコンパイルして、結果の ARM テンプレートを出力します。

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