😎

Azure Data FactoryでAzure Filesにコピーを使わずファイルを作成する

2023/07/11に公開

はじめに

おそらくもっと合理的な方法があると思いますが、のっぴきならない理由でAzure Files上にADFでファイルを作成しなけらばならないときのために手順を残しました。Blob上にファイルを置きたい場合はこちらの記事もあります。
https://zenn.dev/cannoteat/articles/7ef3e16f8f6630

やること

ADFからREST APIを利用してAzure Files上にファイルを作成します。
REST APIを叩くためにアプリ登録を事前にしておきます。当然ですが、アプリ登録したあとはストレージアカウントなどに対して書き込み権限を付与する必要があります。
https://learn.microsoft.com/ja-jp/graph/toolkit/get-started/add-aad-app-registration

また、Microsoft.Storage/storageAccounts/fileServices/readFileBackupSemantics/actionもしくはMicrosoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/actionが必要となるのでStorage File Data Privileged Contributorなども付与しておきます。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles#storage-file-data-privileged-contributor

Azure Filesのファイルを作成する

パイプライン

今回はWebアクティビティを2つ使用してファイルを作成します。
最初のアクティビティでTokenをゲットし、それを使ってファイルを作成します。

変数設定

変数としては次のものを用意しました。環境に応じて変更してください。
ここではSecretも変数としていますが本番利用の際はくれぐれも埋め込まないようにしてください。

Token取得

URL
@concat('https://login.microsoftonline.com/',
 variables('vTenantID'),
 '/oauth2/token'
)
Body
@concat('grant_type=client_credentials&client_id=',
 variables('vClientID'),
 '&client_secret=',
 variables('vClientSecret'),
 '&resource=https://storage.azure.com/'
)

ヘッダには以下を設定。

Content-Type: application/x-www-form-urlencoded

ファイル作成

URL
@concat('https://',
 variables('vStorageAccountName'), '.file.core.windows.net/',
 variables('vContainerName'), '/',
 variables('vDirectoryName'), '/',
 'createfile01-', utcNow('yyyyMMdd_hhmmss'),'.txt'
)

ヘッダには以下の値を設定します。Authorizationには、GetTokenの出力からaccess_tokenを利用します。

x-ms-version: 2022-11-02
x-ms-date: @utcNow('R')
Authorization: @concat('Bearer ', activity('GetToken').output.access_token)
x-ms-type: file
x-ms-content-length: 1024
x-ms-file-request-intent: backup

設定可能なヘッダなど詳細はこちらです。
https://learn.microsoft.com/en-us/rest/api/storageservices/create-file

結果

こんな感じでファイルが作成されます。

Discussion