Можно ли прочитать параметр во время выполнения из связанной службы функций Azure в фабрике данных? - PullRequest
0 голосов
/ 06 ноября 2019

Мне нужно динамически вызывать функцию Azure из моего конвейера ADF.

В настоящее время я могу параметризовать имя-функции через действие-функцию Azure, но не могу ни параметризовать, ни functionKey, ниURL.

URL не является проблемой, так как я могу хранить все функции ниже одного и того же URL, но функция functionKey действительно необходима для этого.

Есть ли у вас какой-либо вариант сделать это?

Что я пробовал

Параметр внутри json как с DataStoreLinkedServices:

{
    "properties": {
        "type": "AzureFunction",
        "annotations": [],
        "parameters": {
            "functionSecret": {
                "type": "String"
            }
        },
        "typeProperties": {
            "functionAppUrl": "https://<myurl>.azurewebsites.net",
            "functionKey": {
                "type": "AzureKeyVaultSecret",
                "store": {
                    "referenceName": "KeyVaultLinkedService",
                    "type": "LinkedServiceReference"
                },
                "secretName": "@{linkedService().functionSecret}"
            }
        }
    }
}

ErrorMsg:

"code":"BadRequest","message":"No value provided for Parameter 'functionSecret'"

Есть ли способдостичь этого? Кажется, это не очевидно, и я не нашел ничего в Интернете. Самым похожим был этот

1 Ответ

0 голосов
/ 14 ноября 2019

Я отвечу сам на всякий случай, если у кого-то возникнет такая же проблема, то, что мы делаем для решения этой проблемы, - параметризацию необходимой информации из самого конвейера.

Итак, у нас есть конвейер, который просто вызывает универсальную функцию Azure. В конвейере вызывающего абонента есть процесс для получения требуемых параметров из KeyVault и передачи их в конвейер AF.

LS остаются следующими:

{
    "properties": {
        "annotations": [],
        "type": "AzureFunction",
        "typeProperties": {
            "functionAppUrl": "https://@{linkedService().functionAppUrl}.azurewebsites.net",
            "functionKey": {
                "type": "AzureKeyVaultSecret",
                "store": {
                    "referenceName": "KeyVaultLinkedService",
                    "type": "LinkedServiceReference"
                },
                "secretName": "@{linkedService().functionKey}"
            }
        },
        "parameters": {
            "functionAppUrl": {
                "type": "String",
                "defaultValue": "@pipeline().parameters.functionAppUrl"
            },
            "functionKey": {
                "type": "String",
                "defaultValue": "@pipeline().parameters.functionKey"
            }
        }
    }
}
...