Azure CLI - 无法创建 Azure Synapse 链接服务 - 引用 JSON 文件的问题

Posted

技术标签:

【中文标题】Azure CLI - 无法创建 Azure Synapse 链接服务 - 引用 JSON 文件的问题【英文标题】:Azure CLI - unable to create Azure Synapse linked service - quoting issue with JSON file 【发布时间】:2022-01-14 16:13:28 【问题描述】:

我正在尝试使用 Azure CLI 在 Azure Synapse 上创建链接服务。我有一个带有链接服务代码的 json 文件:


    "name": "LS_dakeyvault",
    "properties": 
        "annotations": [],
        "type": "AzureKeyVault",
        "typeProperties": 
            "baseUrl": "https://edap-d-kv.vault.azure.net/"
        
    

我会在 Windows shell 中运行以下命令:

az synapse linked-service create --name LS_dakeyvault --file "C:\Project\SynGitTest0\linkedService\LS_dakeyvault.json" --workspace-name edap-d-syn

我会收到这个错误:

Failed to parse JSON: C:\Project\SynGitTest0\linkedService\LS_dakeyvault.json
Error detail: Expecting value: line 1 column 1 (char 0)
The JSON may have been parsed by the shell. See https://docs.microsoft.com/cli/azure/use-cli-effectively#quoting-issues

我对其他 shell(powershell、bash)也有同样的问题。

我尝试按照 MS 提供的链接中的说明进行操作。我不确定我是否理解我应该做什么。我尝试将文件名放在单引号中:

az synapse linked-service create --name LS_dakeyvault --file "'C:\Project\SynGitTest0\linkedService\LS_dakeyvault.json'" --workspace-name edap-d-syn

(我不确定这是引用问题的正确解决方案。) 在那种情况下,我会得到一个不同的错误:

string indices must be integers
Traceback (most recent call last):
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 231, in invoke
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 658, in execute
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 721, in _run_jobs_serially   
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 692, in _run_job
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 328, in __call__
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 121, in handler     
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/synapse/manual/operations/artifacts.py", line 
36, in create_or_update_linked_service
TypeError: string indices must be integers

【问题讨论】:

【参考方案1】:

如果您检查 Microsoft 文档的 Azure Key Vault linked service 部分,您会发现链接服务的 JSON 文件是正确的,没有问题,如下所示。


    "name": "AzureKeyVaultLinkedService",
    "properties": 
        "type": "AzureKeyVault",
        "typeProperties": 
            "baseUrl": "https://<azureKeyVaultName>.vault.azure.net"
        
    

所以问题一定出在 您的 az 命令中的文件路径。您能否检查文件路径在您的命令中是否正确。如果您检查az synapse linked-service create CLI 命令的Required Parameters,您会发现 -

- -file 属性可以从 JSON 文件使用@path 语法 或 json 字符串提供。

如果输入正确的路径并在路径开头添加@,则链接服务创建cmdlet 可以正常工作。如果您仍然遇到问题,请尝试移动到存储文件的目录并运行命令。

我建议阅读az synapse linked-service 和Store credential in Azure Key Vault 文档以获取更多信息。

【讨论】:

以上是关于Azure CLI - 无法创建 Azure Synapse 链接服务 - 引用 JSON 文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

Azure CLI:DISK MAX SHARES 2 但无法连接到两个 VM

为啥我无法在 Azure 门户中访问我的 AAD 应用注册,但我可以使用 Azure CLI 查看它?

如何使用 Azure CLI 创建 VM 指定 Azure Linux OS 磁盘类型

使用Azure CLI创建Linux虚拟机

在Global Azure上用Azure CLI创建ARM的VM和面向公网的负载均衡

发布到 Azure 网站后无法加载文件或程序集 System.Web.Http.WebHost