0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AzureBlobServiceにローカルのバイナリファイルを転送する

Posted at

はじめに

ローカルのExcel、PDF、画像などのバイナリデータをクラウドに保存したい場合、Azure Blob Storageを使うのは非常に便利です。
ですが、毎回Azureのコンソール画面で手動によるファイルをアップロードするのは手間がかかります。
そこで、ローカルにファイルが置かれたら自動的にクラウドへ転送する仕組みをPowerShellとAzCopyを使って構築できるかどうかを検証しました。

本記事の対象者

・Azureの基本的なサービス(Blob StorageやSASキーなど)や仕組みを理解している方
・Azure StorageアカウントとBlobコンテナが既に作成されていること
・PowerShellやバッチスクリプトの実行に慣れている方

準備

Azureアカウントがあり、サービスを利用できる方

検証

Auzre Blobの作成

まずは、AzureポータルからBlobストレージを作成します。
これはファイルを保管する領域になります。

手順

1.Azureポータルにログインし、"Storage account"を選択。
2.新しいストレージアカウントを作成し、Blobストレージを有効化します。
3.作成したストレージアカウント内に、新しいBlobコンテナを作成して、ファイルを保存する場所を確保します。

SASキーの発行

手順

AzureポータルのBlobコンテナページに移動。
「Shared access signature」をクリックし、必要なアクセス権限を設定。
「Generate SAS and connection string」をクリックし、SASトークンをコピーします。

・SASキーのアクセス権限と有効期限を決めて発行
image.png

PowerShellでAzCopyをインストール

ファイル転送に使うツールとして、AzCopyを使用します。
AzCopyはMicrosoftが提供しているコマンドラインツールで、簡単にファイルをAzure Storageへコピーできます。
インストールするのに時間がかかります。
インストール対象をAzCopyモジュールの一部に絞れば早く終わるかも。

・PowerShellにAzモジュールをインストールするコマンド

Install-Module -Name Az -AllowClobber -Scope CurrentUser

・Azモジュールをロードするコマンド

Import-Module Az

・コマンド実行後、フォルダにモジュールファイルがダウンロードされる
image.png

PowerShellスクリプトの作成と実行

PowerShellスクリプトを実行すると、ローカルの指定したフォルダに新しいファイルが追加された際に、AzCopyが自動でAzure Blobにアップロードします。

$context = New-AzStorageContext -StorageAccountName "ChangeYourAzureStrageAccount" -SasToken "ChangeYourSasToken"

$directory = "ChangeYourLocalDirectory"
$filter = "*.pdf"

Write-Host "ディレクトリ内のファイルをアップロード中..."

# 指定したディレクトリ内の既存のPDFファイルをすべてアップロード
Get-ChildItem -Path $directory -Filter $filter -Recurse | ForEach-Object {
    $file = $_.FullName
    Write-Host "アップロード中: $file"
    try {
        Set-AzStorageBlobContent -File $file -Container "bunpaidoc" -Context $context
        Write-Host "ファイルをアップロードしました: $file"
    } catch {
        Write-Host "エラーが発生しました: $_"
    }
}

Write-Host "既存のファイルのアップロードが完了しました。"

# ファイルシステム監視を開始
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $directory
$watcher.Filter = $filter
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true

Write-Host "ファイルシステム監視を開始しました。"

$action = {
    $file = $Event.SourceEventArgs.FullPath
    Write-Host "新しいPDFが検出されました: $file"

    try {
        Set-AzStorageBlobContent -File $file -Container "bunpaidoc" -Context $context
        Write-Host "ファイルをアップロードしました: $file"
    } catch {
        Write-Host "エラーが発生しました: $_"
    }
}

Register-ObjectEvent $watcher 'Created' -Action $action

Write-Host "イベントが登録されました。"

結果

ローカルの指定したフォルダにファイルを新規で登録するとBlobにアップロードされた。
20240905_1.png

感想

この方法を使用することで、社内文書や他のファイルをクラウドへ簡単にアップロードできるだけでなく、
クラウドからローカルへのダウンロードもAzCopyを使用して同様に簡単に実行できます。
ファイルの転送を自動化することで、手作業の時間を削減し、効率化が期待できます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?