📌
Azure Data FactoryでBlobにコピーを使わずファイルを作成する
はじめに
ADFやSynapse Pipelineでファイルの加工をやっていると単純にファイルだけBlob上に作成したくなることはないでしょうか。
目的は色々あるかと思いますが、多くの場合他の手段の方が合理的なのだろうと思いながらもどうしてもファイルを作成したいときにのために手順を残します。
やること
ADFからREST APIを利用してBlob上にファイルを作成します。
REST APIを叩くためにアプリ登録を事前にしておきます。当然ですが、アプリ登録したあとはストレージアカウントなどに対して書き込み権限を付与する必要があります。
Blobにファイルを作成する
パイプライン
今回は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
Token取得はこの辺を参考に。
ファイル作成
URL
@concat('https://',
variables('vStorageAccountName'), '.blob.core.windows.net/',
variables('vContainerName'), '/',
variables('vDirectoryName'), '/',
'putblob01-', utcNow('yyyyMMdd_hhmmss'),'.txt'
)
ヘッダには以下の値を設定します。Authorizationには、GetTokenの出力からaccess_tokenを利用します。
x-ms-version: 2020-10-02
x-ms-date: @utcNow('R')
x-ms-blob-type: BlockBlob
Authorization: @concat('Bearer ', activity('GetToken').output.access_token)
詳細はこちらを参考に。
結果
こんな感じでBlob上にファイルが出来上がります。
Discussion