无法使用python创建azure链接服务

时间:2017-12-08 10:32:10

标签: python azure blob azure-data-factory

我想做的事

我尝试创建一个azure数据工厂管道,将文件从blob复制并粘贴到Blob或blob到数据湖。

我做了什么

我刚刚关注微软网站上的教程,我已经有了ADF和blob,所以我没有再创建它,我现在正在尝试创建一个Azure链接服务,所以我使用此代码:

function convertStringToCamelCase(str_original){
    var str = str_original.toLowerCase();
    return str.split(' ').map(function(item, index){
        return index !== 0 
            ? item.charAt(0).toUpperCase() + item.substr(1) 
            : item.charAt(0).toLowerCase() + item.substr(1);
    }).join('');

但是当我运行它时,我得到了这个错误:

# Create an Azure Storage linked service
ls_name = 'storageLinkedService'

# IMPORTANT: specify the name and key of your Azure Storage account.
storage_string = SecureString('DefaultEndpointsProtocol=https;AccountName=<storageaccountname>;AccountKey=<storageaccountkey>')

ls_azure_storage = AzureStorageLinkedService(connection_string=storage_string)
ls = adf_client.linked_services.create_or_update(rg_name, df_name, ls_name, ls_azure_storage)
print_item(ls)

我不知道为什么会收到此错误。 有没有人有想法?

更新

我尝试跳过此步骤并尝试使用此命令在blob中创建和归档:Traceback (most recent call last): File "<ipython-input-173-cabc65dd11b9>", line 4, in <module> ls = adf_client.linked_services.create_or_update(rg_name, df_name, ls_name, ls_azure_storage) File "C:\ProgramData\Anaconda3\lib\site-packages\azure\mgmt\datafactory\operations\linked_services_operations.py", line 170, in create_or_update raise models.ErrorResponseException(self._deserialize, response) ErrorResponseException: Operation returned an invalid status code 'Not Found'

我得到了同样的错误adf_client.datasets.create_or_update(rg_name, df_name, ds_name, ds_azure_blob),这让我觉得这个问题可能与blob有关。

1 个答案:

答案 0 :(得分:2)

我尝试重现您的问题,但失败了。

我没有ADF所以我按照官方教程创建了数据工厂和链接服务,没有发生错误。

主要功能

def main():

    # Azure subscription ID
    subscription_id = '***'

    # This program creates this resource group. If it's an existing resource group, comment out the code that creates the resource group
    rg_name = '***'

    # The data factory name. It must be globally unique.
    df_name = '***'

    # Specify your Active Directory client ID, client secret, and tenant ID
    credentials = ServicePrincipalCredentials(client_id='***', secret='***', tenant='***')
    resource_client = ResourceManagementClient(credentials, subscription_id)
    adf_client = DataFactoryManagementClient(credentials, subscription_id)

    rg_params = {'location':'eastus'}
    df_params = {'location':'eastus'}

    # create the resource group
    # comment out if the resource group already exits
     resource_client.resource_groups.create_or_update(rg_name, rg_params)

     Create a data factory
     df_resource = Factory(location='eastus')
     df = adf_client.factories.create_or_update(rg_name, df_name, df_resource)
     print_item(df)
     while df.provisioning_state != 'Succeeded':
         df = adf_client.factories.get(rg_name, df_name)
         time.sleep(1)

    # Create an Azure Storage linked service
    ls_name = 'storageLinkedService'

    # IMPORTANT: specify the name and key of your Azure Storage account.
    storage_string = SecureString('DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***')

    ls_azure_storage = AzureStorageLinkedService(connection_string=storage_string)
    ls = adf_client.linked_services.create_or_update(rg_name, df_name, ls_name, ls_azure_storage)
    print_item(ls)
  

ErrorResponseException:操作返回了无效的状态代码&#39;不是   实测值&#39;

我认为你可以检查参数,如果你有错误或服务存在。(df,资源组,存储帐户)

如有任何疑虑,请随时告诉我。

更新答案:

我在门户网站上的Azure AD中创建了自己的应用程序注册。

enter image description here

以下应用ID是您的client_id

enter image description here

创建您的secret并记住将其写下来,因为它会稍后隐藏。

enter image description here

以下目录ID为tenant ID

enter image description here

更新答案2:

我也是一个贡献者角色,所以我认为这不是一个角色问题。 我尝试将参数中的ra_name(资源组)更改为不存在的值,成功复制了您的异常。

请再次检查您的资源组或其他参数是否存在。

enter image description here

仅供参考:

ADF V1和V2似乎目前不支持西欧地区。

enter image description here

enter image description here

但是,此article中的支持的区域章节尚未更新。那么困扰你了。您可以重新创建ADF并按照原始代码创建链接服务。