2017-04-06 6 views
1

azureデータファクトリのカスタムアクティビティに問題があります。 その中の紺碧のデータ湖に接続したいです。 私は次の名前空間を使用しています:Azureデータレークとデータ工場のカスタムアクティビティ

using Microsoft.Azure.Management.DataLake.Store; 
using Microsoft.IdentityModel.Clients.ActiveDirectory 
using Microsoft.Rest.Azure.Authentication; 

そしてここでは私のコードです:

public ConnectDataLakeStore(string applicationId, string applicationSecretKey, string tenantId) 
    { 
     var credentials = new ClientCredential(applicationId, applicationSecretKey); 
     var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, credentials).Result; 
     var fileSystemClient = new DataLakeStoreFileSystemManagementClient(creds); 
    } 

を私は次の例外を取得:私はローカル環境のすべてにカスタムアクティビティを実行すると

Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException: Operation returned an invalid status code 'Forbidden' 
    at Microsoft.Azure.Management.DataLake.Store.FileSystemOperations.<ListFileStatusWithHttpMessagesAsync>d__12.MoveNext() 

を正常に動作します。 azureへの展開後に問題が発生します。広告アプリケーションにすべての権限を与えました。

ヒント

+0

を解決するのに役立ちます。 .NET Frameworkのバージョンは、4.5.2未満である必要があります。 – BRMaster

答えて

0

上記のコメントから、私は既にこれを解決していると思います。しかし、それでも似たような問題を持つ将来の覗きにはもう少し詳細を加える価値があると思っていました。

まず、サービスプリンシパルとドメインの詳細を使用して資格情報を作成します。

方法:

private static ServiceClientCredentials AuthenticateAzure(string domainName, string clientID, string clientSecret) 
    { 
     SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); 

     var clientCredential = new ClientCredential(clientID, clientSecret); 
     return ApplicationTokenProvider.LoginSilentAsync(domainName, clientCredential).Result; 
    } 

たぶん、あなたのライブラリーconfigまたはプロジェクトのプロパティから値を取得します。

var creds = AuthenticateAzure(domainName, appId, appPass); 

次に、必要なものに応じて、データレーキアカウントマネージャーまたはファイルシステムマネージャーのインスタンスを作成します。

private static DataLakeStoreFileSystemManagementClient adlsFileSystemClient; 
    private static DataLakeStoreAccountManagementClient adlsAccountManagementClient; 

    adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds); 
    adlsAccountManagementClient = new DataLakeStoreAccountManagementClient(creds); 

次に、ファイルをデータレイクストアにアップロードするための方法を作成します。

アップローダは、ファイルの作成方法よりも高速に動作します。

private static void UploadFile(string srcFilePath, string destFilePath, string accName, bool force = true) 
    { 
     var parameters = new UploadParameters(srcFilePath, destFilePath, accName, isOverwrite: force); 
     var frontend = new DataLakeStoreFrontEndAdapter(accName, adlsFileSystemClient); 
     var uploader = new DataLakeStoreUploader(parameters, frontend); 
     uploader.Execute(); 
    } 

出典:

ADFカスタム活動 https://www.purplefrogsystems.com/paul/2016/11/creating-azure-data-factory-custom-activities/

ADL認証 https://www.purplefrogsystems.com/paul/2016/12/azure-data-lake-authentication-from-azure-data-factory/

希望これは

関連する問題