3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Storage ServiceでSFTPができるようになったのでAzure Data Factoryと連携してみた

Last updated at Posted at 2023-10-09

前回の記事から随分間が開いてしまいましたが、その間転職したり入院したりと忙しかったです。
特に入院は前回の入院から1年もあかずに入院したので驚きました。

私は記事が書けませんでしたがその間に新しい会社でたまたま私が少しだけ教育を担当した若いメンバーが記事を書いてくれました。
いや、ホントに若くて仕事ができる人って羨ましいですね。
私が同年代のときは彼ほど仕事ができませんでした。

やってみた記事では面白くないので連携までしてみよう

新しい機能がリリースされたんでやってみました。
だけでは面白みに欠けるので、もうちょっと踏み込んで連携までやってみました。
この記事を書きだした時点ではまだ連携できていないので、実際できるかどうかわわかりません。
たぶんできますけど。

構成図

いつもの構成図ですね。
いつもはパワーポイントで書いて貼り付けてたんですが、今回はVisual Studio CodeのDraw.io Integrationという拡張機能で描きました。

構成図.png

オンプレミスのPCからADLSにsftpでデータを配置し、Azure Data Factory v2(以下、ADF)でそのデータが参照できるかどうか、という連携です。
本記事ではADLSと記述しますが、構成図の通り正確にはADLS Gen2です。
Gen1はほぼ使われないので、現在ADLSといえばGen2です。
本来的にはADFの背後に更にSQL DBなどのデータの格納先があるのですが、そこまでの連携は本記事では行いません。
ADFで連携できればSQL DBまでは連携できるのは確実ですからね。

ADLSにSFTPサーバを構築

これはもう瞬殺ですね。
敢えてポイントを挙げるとしたらStorage AccountにADLSの設定を施すのはStorage Account構築時のみ、という点くらいでしょうか。
Azure PortalにログインしてStorage Account作成を行い、サブスクリプション、リソースグループを選択し、ストレージアカウント名を入力します。
ストレージカウント名はアルファベット小文字と数字のみ、記号が使えませんので命名には注意が必要です。
地域(リージョン)も指定しましょう。
image.png

今回は検証なのでパフォーマンス(IO)もStandardで構いませんし、冗長性もLRSで十分です。
ここまで入力して[次へ:詳細設定>]

image.png

ここが唯一の注意点ですね。
[詳細設定]の項目で階層型名前空間を有効にするのチェックボックスがデフォルトだと外れているのでチェックを入れます。
この階層型名前空間というのがADLSを有効にするという設定です。
この設定はStorage Accountデプロイ後は有効化、無効化、ともにできなくなる取り返しのつかない設定です。
次にSFPTを有効にするため、SFTPを有効にするにチェックを入れます。
この設定値は階層型名前空間を有効にするにチェックを入れる前はグレーアウトしていて設定できないのですが、階層型名前空間を有効にする=ADLSを有効にすることによりアクティブになるオプションです。
このオプションはStorage Accountをデプロイ後も変更可能です。
ここまで設定出来たらあとの設定はデフォルトのままで大丈夫なので[レビュー]を押しましょう。
image.png

設定した各種パラメーターを確認して、[作成]をクリックします。
image.png

サクッとStorage Accountの作成は終わります。
SFTPは有効にしているとその分通常のStorage Accountの従量課金と別で課金されますのでご注意ください。
下記の画像の上段赤枠内にその注意が記載されています。
SFTPの設定は下記の画像中段左側の[SFTP]をクリックして行います。
image.png

SFTP用のユーザ作成を行います。
[+ ローカルユーザーを追加する]をクリックします。
image.png

まずはSFTPのユーザ名と認証方法をパスワードかキーかを選択します。
無難にキーでいっちゃいましょう。
Data Factoryで連携する際もキーの方が面白いので。
image.png

次にSFTPユーザのホームディレクトリ設定です。
まずはADLSなのでコンテナを作成します。
image.png

次にSFTPユーザのアクセス権設定です。
今回どこまで検証するかわからなのでフルアクセス権を振っておきます。
image.png

次にSFTPユーザのホームディレクトリ設定の続きです。
実際にSFTPユーザがログインした後に配置されるディレクトリのパス指定です。
コンテナ名/のあとに恐らくユーザ名ごとにディレクトリを切ると管理しやすいのではないでしょうか?
今回は1ユーザでの検証なのでそこまでは行いません。
ここまで設定して[追加]をクリックします。
image.png

SFPTユーザとホームディレクトリの設定やアクセス権の付与も無事終わりました。
これも瞬殺です。
image.png

SSHキーを新規で作成した場合はダウンロード画面が1回だけ出てきますので忘れずにダウンロードして保存しておきましょう。

アクセス確認

では実際にアクセス確認を行います。
先ほどのADLSのSFTP設定画面の赤枠内をクリックして接続情報をコピーします。
image.png

先ほどダウンロードしたキーを指定して、はい、見事にアクセスできましたね。
image.png

まぁなんてことはない、ただのSFTPサーバです。

試しに何かファイルを置いてみましょう。
まぁこんな簡単なファイルを作成してみて、putしてみましょう。

image.png

はい。
普通にputできますね。
image.png

ではオリジナルのファイルを削除してみてこのADLS内のファイルをダウンロードしてみます。

はい。
普通にダウンロードできます。
image.png

続いてAzure Portal上からもファイルがあるか確認してみましょう。
Azure Portalから該当のStorage Accountを開き[コンテナー]をクリックして先ほど作成したコンテナ名をクリックします。
image.png

はい、バッチリですね。
image.png

ADFとADLSを連携

はい。
もう最後の項目です。
今回はあっけなく終わりそうですね。

Azure PotalからADFの画面を開き、[スタジオの起動]をクリックします。
image.png

画面左ペインの[管理]をクリックし[リンクサービス]をクリック、[新規]をクリックし、[データストア]の項目で[Azure]をクリックし、[Azure Data Lake Storage Gen2]をクリックし[続行]をクリックします。
image.png

[名前]の項目でこの接続の名前を付けます。
[統合ランタイム経由で接続]は[AutoResolvedIntegrationRuntime]とします。
[認証の種類]は[システム割り当てマネージドID]とします。
デフォルトだと[アカウントキー]ですが、これを選択するとADFがStorage Accountのキーを持ってしまうことになるのでセキュリティ的に良くありませんので、Azureのリソース間同士の認証を有効にする[システム割り当てマネージド]を選択するのは正しいです。
[アカウントの選択方法]は[From Azure subscriotion]を選択し、[Azureサブスクリプション]は自身のサブスクリプションを選択し、[ストレージアカウント名]は接続対象のストレージアカウントを選択します。
ここまで入力すると必要項目が満たされますので[テスト接続]を行えるようになるのですが、画像のように失敗します。
image.png

被疑箇所特定

まぁ簡単ですね。
賢明な読者の皆様なら既にお気づきだと思いますが、[認証の種類]を[システム割り当てマネージドID]にしたため、ADFがADLS側で認証されずにアクセスされていない、ということです。

解消方法

ADLSのアクセス制御にて接続元であるADFに権限を付与します。
対象のADLS、Storage AccountにAzure Portalからアクセスし、[アクセス制御]をクリックし、[ロールの割り当て]を確認すると、当然ADFは含まれていません。
image.png

同じ画面の[追加]をクリックし、[ロールの割り当ての追加]をクリックします。
image.png

やいのやいのロールが存在しますが、今回は最小権限付与の原則にのっとって[ストレージ BLOB データ閲覧者]の権限をクリックし、[次へ]をクリックします。
image.png

[マネージドID]を選択し[メンバーを選択する]をクリックします。
[サブスクリプション]はご自身のサブスクリプションを選択し、[マネージドID]の項目には、そのものズバリ[Data Factory (V2)]が存在しますので、これをクリックします。
image.png

先ほど作業していたADFが出てきますので、クリックして[選択]をクリックします。
image.png

権限付与対象を確認して[レビューと割り当て]をクリックします。
image.png

最後にもう一度権限付与対象と付与する権限を確認して[レビューと割り当て]をクリックします。
image.png

権限が正しく付与されたことを確認します。
image.png

エラー解消の確認

ADFスタジオ画面に戻り、再度[テスト接続]をクリックします。
image.png

[接続成功]になります。
image.png

これでエラーは解消されました。

気を取り直して再度ADLSとADFを連携する

接続成功になっていることを確認し、[作成]をクリックします。

image.png

画面上段にある[すべて発行]をクリックします。
恐らくPublish行為なんだと思います。
image.png

やっぱり[発行]なんですね。
クリックしましょう。
image.png

実際にADFからADLSにデータを見に行く

リンクサービスが無事Publishされたことを確認してから、ADFスタジオの左ペインの[作成]をクリックし、[データセット]をクリックし、[新しいデータセット]をクリックします。
image.png

ここでもリンクサービスと同じく[Azure]を選択し、[ADLS]をクリックし[続行]をクリックします。
image.png

ここからはリンクサービスとは違い、ADLSから連携されるファイル形式を聞いてきます。
今回はCSVを選択して続行をクリックします。
image.png

検証用にADLSにsftpで適当なcsvファイルを配置しておきます。
今回は国勢調査の男女別人口-全国,都道府県(大正9年~平成27年)にしました。
実際のリンクはこちら
image.png
実際のデータはこんな感じです。
image.png

データセット作成を行うとデータセット名を[名前]に、リンクサービスの選択を求められるので先ほど作成したリンクサービスを選択しフォルダボタンをクリックします。
image.png

ADLS内に構築したコンテナ名をクリックし、先ほどの国勢調査のサンプルファイル名をクリックし、[OK]をクリックします。
image.png

[スキーマのインポート]は[接続またはストアから]を選択し、[OK]をクリックします。
image.png

[エンコード]を[SHIFT-JIS]を選択し、[データのプレビュー]をクリックします。
image.png

完璧ですね!
image.png

国勢調査のサンプルファイルが無事取得できました。

後はこれをパブリッシュすればデータセットは完成です。
この後はパイプラインを作成して後続のSQL DBに流し込んであげればOKです。
その際にデータフローでETLを実施することも可能です。
この辺りはまた別の記事で書こうと思います。

本日はここまで。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?