我想做简单的事!!!
通过 Azure Functions 中的 c# 代码,将SourceContainer
位于 dataLake gen 2 ( ) 中的容器 () 中的 blob 复制SourceDataLake
到第二个 DatLake ( )。TargetDataLake
我的 Azure Function 和之间的连接SourceDataLake
通过 Private Link 和 Private Endpoint 得到保护。
DataLakeDirectoryClient sourcedirectoryClient2 = sourceDataLakeFileSystemClient.GetDirectoryClient(myPath);
DataLakeFileClient sourcefileClient = sourcedirectoryClient2.GetFileClient(myBlobName);
Response<FileDownloadInfo> downloadResponse = await sourcefileClient.ReadAsync(); //I get the error in this line
Stream reader = downloadResponse.Value.Content;
DataLakeDirectoryClient targetdirectoryClient = taregetDataLakeFileSystemClient.GetDirectoryClient(TargetDirectory);
DataLakeFileClient targetfileClient = await targetdirectoryClient.CreateFileAsync(myBlobName);
await targetfileClient.UploadAsync(reader, true);
对于 DataLake 的身份验证,我使用此功能:
public static DataLakeFileSystemClient GetDataLakeFileSystemClient(string containerName, string dataLakeName, string dataLakeAccessKey)
{
StorageSharedKeyCredential storageSharedKeyCredential = new StorageSharedKeyCredential(dataLakeName, dataLakeAccessKey);
DataLakeClientOptions options = new DataLakeClientOptions(DataLakeClientOptions.ServiceVersion.V2019_07_07);
DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient(
new Uri(string.Concat("https://", dataLakeName, ".dfs.core.windows.net")),
storageSharedKeyCredential,
options);
DataLakeFileSystemClient dataLakeFileSystemClient = dataLakeServiceClient.GetFileSystemClient(containerName);
return dataLakeFileSystemClient;
}
这段代码对我不起作用。如果我从中删除 Priavet Link Private Endpoint,SourceDataLake
它将起作用。不知何故 Private Link 和 Private Endpoint 不适用于这行代码:
Response<FileDownloadInfo> downloadResponse = await sourcefileClient.ReadAsync();
你有什么想法我该如何解决这个问题?还是从 DataLake gen2 复制 blob 的更好方法?