Azure Storage BlobがSFTPに対応したとのことで試してみました

Ignite2021で盛り上がってるAzureの更新の中に、しれっとAzure Storage BlobのSFTP対応がパブリックプレビューになっていたので試してみました。他システム連携時のファイル授受でSFTPでというのが多いので、というかSFTP以外で連携ができないパターンが多いので嬉しいアップデートです。

本記事は2021年11月28日時点の情報になります。

SFTPの初期設定

基本的には下記の記事通りに設定すれば動作すると思います。 ここではハマりやすい場所について、備忘も含めて記載したいと思います。

docs.microsoft.com

DataLake Storage Gen2のアップグレード

Blob StorageでSFTPを実現するために、「Blob RESTAPI」と「DataLake Storage Gen2 RESTAPI」を利用しているようです。

f:id:kingkino:20211128210944p:plain

「DataLake Storage Gen2 RESTAPI」を利用するためにアップグレードする必要があるのですが、サポートされていない機能をオフにしておかないとアップグレード時にエラーになります。ここは一つ一つ丁寧にオフにしてあげましょう。

f:id:kingkino:20211128211115p:plain

アップグレードが完了すれば「SFTP」が選択できるようになります。

ホームディレクトリの指定

ホームディレクトリにはSFTPで利用する「コンテナ名」または「コンテナ名/ディレクトリ名」を入力します。 ここで入力しなくてもいいのですが、入力しておかないと接続時に「Home Directory is not accessible」とエラーになります。

f:id:kingkino:20211128213037p:plain

このエラーが出たときはユーザ名の指定で、接続先コンテナ名も含めて設定することで回避することもできます。 ローカルユーザ名は下記のような構成で指定できるので、ホームディレクトリとなるコンテナ名を明示的に入力することで接続することが可能になります。

「Storageアカウント名」.「コンテナ名」.「ローカルユーザ名」@「ストレージドメイン

WinSCPでアクセスしてみる

SFTPの環境が出来たらSFTPクライアントを利用してアクセスを試してみましょう。 ここでは古来よりお世話になっているWinSCPを使って接続を試してみます。

WinSCPは下記よりダウンロードしてください。

forest.watch.impress.co.jp

WinSCPをインストールしたら新しいセッションの作成から作業を始めます。 メニューの「セッション」から「新しいセッション」を選択してします。

転送プロトコルは「SFTP」になっていると思いますので変更は不要です。

f:id:kingkino:20211128213616p:plain

ホスト名にはSFTPで作成したローカルユーザの情報を入力します。 入力すると@を起点に前方がユーザ名に、後方がホスト名に自動で設定されると思います。

ポート番号の変更は不要です。

f:id:kingkino:20211128213727p:plain

パスワードにはローカルユーザ作成時に生成されたパスワードを入力してください。 パスワードの場合は毎回パスワードを聞かれるのでSSHにしたほうが効率は良いかもしれません。

SSH接続を選択した場合は「設定」から「認証」を選択し、生成された秘密鍵を設定します。

入力が完了したら保存してログインします。 設定が問題なければ下図のように表示されると思います。 フル権限つけておけばファイル作成したりディレクトリ作成したりできるのいろいろと試してみましょう。

f:id:kingkino:20211128214340p:plain

もしエラーが出た場合は設定を見直してください。 私が一番ハマったのは先にも記載しましたホームディレクトリの設定です。

もし「Home Directory is not accessible」と出ているのであれば、ユーザ名の構成に変えて試してください。

「Storageアカウント名」.「コンテナ名」.「ローカルユーザ名」

まとめ

人によっては今更?って思うかもしれませんが、他システム連携でまだまだSFTPが活用されていることが多いので、今更ながらでもありがたいアップデートだと思います。またSFTPからファイルがアップロードされたら、Blob Triggerで処理をするとか、EventGridでどこかに通知するとか選択肢が増えるので面白いと思います。

あと6年早く来ていれば、あの時のあれがあれ出来たのにという心の叫びはしまっておこうと思います。