Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

DataLakeを.NETから使う下準備

$
0
0

超ハマったのでメモを残しておきます。

まず、AzureADでアプリ作らないといけないんですよ、アプリ。基本的な手順は以下のページに従ってやればOKです。

azure.microsoft.com

ハマった所としては、このとき使うAzureADのディレクトリってAzureに最初から作られてるディレクトリじゃないといけないってところでした。新しくディレクトリ作ったりしてましたよ…。

アプリケーションを作ったら、クライアントIDとキーとテナントIDを取得しておきます。

以下のページにほぼしたがっていけばOKです。

azure.microsoft.com

ハマった所としては、RBACでリソースグループに対してアプリケーションにアクセス権をOwnerとして与えたのですが、それだと何故かアクセスできなくてData Lakeの画面からフォルダに対してアプリケーションにフルアクセス権限与えたら、フォルダのリストを取得できるようになりました。

とりあえずエラーが出ずに動いたコードを貼っておきます。上記サイトではTenantIdにcommonを使ってますが、私の環境ではエラーになったのでテナントIDはAzureADのアプリケーションから取得したものに差し替えました。

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

namespace ConsoleApplication8
{
    class Program
    {
        privatestaticstring ClientId { get; } = "AzureADで取得したクライアントID";
        privatestaticstring Key { get; } = "AzureADで取得したキー";
        privatestaticstring TenantId { get; } = "AzureADで取得したテナントID";
        privatestaticstring SubscriptionId { get; } = "自分のサブスクリプションID";

        staticvoid Main(string[] args)
        {
            // signin
            var authContext = new AuthenticationContext($"https://login.microsoftonline.com/{TenantId}");
            var credential = new ClientCredential(ClientId, Key);
            var authResult = authContext.AcquireToken("https://management.core.windows.net/", credential);
            var tokenCredentials = new TokenCredentials(authResult.AccessToken);

            // init
            var adlsClient = new DataLakeStoreAccountManagementClient(tokenCredentials)
            {
                SubscriptionId = SubscriptionId
            };
            var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(tokenCredentials)
            {
                SubscriptionId = SubscriptionId
            };
            adlsClient.Account.Create("リソースグループ名", "DataLakeのアカウント名(Data LakeのURLの最初の部分)", new DataLakeStoreAccount(location: "East US 2"));

            foreach(var fs in adlsFileSystemClient.FileSystem.ListFileStatus("/", "dlsampleadls").FileStatuses.FileStatus)
            {
                Console.WriteLine($"{fs.PathSuffix}");
            }
        }
    }
}

Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>