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 서버는 스레드로부터 안전하지만 요청이 단일 채널을 통해 멀티플렉싱되므로 요청이 직렬화되도록 하는 것은 클라이언트의 책임입니다. 즉, 각 요청은 두 번째 요청을 보내기 전에 전체로 전송되어야 하며 각 요청에 대해 고유한 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);