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