메모
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 서버는 스레드로부터 안전하지만 요청이 단일 채널을 통해 멀티플렉싱되므로 요청이 직렬화되도록 하는 것은 클라이언트의 책임입니다. 즉, 각 요청은 두 번째 요청을 보내기 전에 전체로 전송되어야 하며 각 요청에 대해 고유한 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 | 매개 변수 파일 null 에서 참조하거나 확인할 수 없는 경우 컴파일된 ARM 템플릿 JSON입니다. |
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 |
문자열[] | 입력 파일 자체, 모듈 및 구성 파일을 포함하여 컴파일 중에 참조되는 모든 파일의 절대 경로입니다. |
예시
Params:
{
"path": "/path/to/main.bicep"
}
결과:
{
"filePaths": [
"/path/to/main.bicep",
"/path/to/modules/storage.bicep",
"/path/to/bicepconfig.json"
]
}
bicep/getSnapshot
메모
이 메서드를 사용하려면 BICEP CLI 버전 0.36.1 이상이 필요합니다.
지정된 .bicepparam 파일에 대한 배포 스냅샷을 만듭니다. 스냅샷은 배포에 필요한 모든 정보를 단일 자체 포함 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
메모
이 메서드를 사용하려면 BICEP CLI 버전 0.37.1 이상이 필요합니다.
지정된 파일의 서식을 .bicep 지정합니다.
Params
| 재산 | 유형 | 설명 |
|---|---|---|
path |
문자열 | 서식을 지정할 파일의 .bicep 파일 경로입니다. |
결과
| 재산 | 유형 | 설명 |
|---|---|---|
contents |
문자열 | 서식이 지정된 Bicep 소스 코드입니다. |
예시
Params:
{
"path": "/path/to/file.bicep"
}
결과:
{
"contents": "..."
}
유형
다음 형식은 메서드 입력 및 출력에 사용됩니다.
위치
Bicep 소스 파일 내의 0부터 시작하는 위치를 나타냅니다.
| 재산 | 유형 | 설명 |
|---|---|---|
line |
정수 (integer) | 0부터 시작하는 줄 번호입니다. |
char |
정수 (integer) | 줄 내의 0부터 시작하는 문자 오프셋입니다. |
범위
Bicep 소스 파일 내의 범위를 나타냅니다.
| 재산 | 유형 | 설명 |
|---|---|---|
start |
위치 | 범위의 시작 위치(포함)입니다. |
end |
위치 | 범위의 끝 위치(배타적)입니다. |
DiagnosticDefinition
컴파일 또는 분석 중에 생성된 진단 메시지를 나타냅니다.
| 재산 | 유형 | 설명 |
|---|---|---|
source |
문자열 | 진단 원본(예: "bicep" 컴파일러 진단 또는 linter 규칙 이름). |
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. |
Microsoft Edge
배포 그래프의 두 리소스 노드 간에 전달되는 종속성 에지를 나타냅니다.
| 재산 | 유형 | 설명 |
|---|---|---|
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 소켓 전송 사용
--socket 인수를 사용하여 연결할 Bicep CLI에 대한 TCP 포트를 전달합니다. 호출 프로세스는 이미 포트에서 연결을 수신 대기해야 합니다.
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를 자동으로 다운로드하고 수명 주기를 관리할 수 있으므로 별도로 설치할 필요가 없습니다.
예시
다음 예제에서는 Bicep CLI 버전 0.39.26 다운로드하고, 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);