はじめに
Azure Storage
に何かしらの操作を行うプログラムを書く際に、ローカル環境でプログラムを試したい場合がある。
今回は、公式で推奨しているAzurite
を利用してみる。
環境
Windows 11 Professional
Visual Studio 2022 Community
.NET 8
Azure.Storage.Blobs 12.22.2
Azurite
については、Visual Studio 2022
であれば、自動的に利用できるようだ。
Azurite は Visual Studio 2022 で自動的に使用できるようになります。 Azurite 実行可能ファイルは、Visual Studio の新しいバージョン リリースの一部として更新されます。 以前のバージョンの Visual Studio を実行している場合は、Node パッケージ マネージャー (npm) か DockerHub のいずれかを使用して、または Azurite GitHub リポジトリを複製して、Azurite をインストールできます。
今回作成したプロジェクトのGitHubリポジトリ
https://github.com/katsuobushiFPGA/AzureStorageSample
準備
Azure.Storage.Blobsをインストールする
- プロジェクトを右クリック、「NuGetパッケージの管理」を選択する
- 「
Azure.Storage.Blobs
」をインストールする - インストール完了後、依存関係に 「
Azure.Storage.Blobs
」が入っていることを確認
Microsoft.Extensions.Configurationをインストールする
- プロジェクトを右クリック、「NuGetパッケージの管理」を選択する
- 「
Microsoft.Extensions.Configuration
」をインストールする - インストール完了後、依存関係に 「
Microsoft.Extensions.Configuration
」が入っていることを確認
Microsoft.Extensions.Configuration.Jsonをインストールする
- プロジェクトを右クリック、「NuGetパッケージの管理」を選択する
- 「
Microsoft.Extensions.Configuration.Json
」をインストールする - インストール完了後、依存関係に 「
Microsoft.Extensions.Configuration.Json
」が入っていることを確認
Microsoft.Extensions.DependencyInjectionをインストールする
- プロジェクトを右クリック、「NuGetパッケージの管理」を選択する
- 「
Microsoft.Extensions.DependencyInjection
」をインストールする - インストール完了後、依存関係に 「
Microsoft.Extensions.DependencyInjection
」が入っていることを確認
Azuriteの実行
下記を参考に、Visual Studio 2022 Community
でエミュレータを実行する。
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azurite?tabs=visual-studio%2Cblob-storage
エミュレータの実行可能ファイルを確認する
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Azure Storage Emulator
にある。
azurite.exe
があることを確認したら次のステップにいく。
コマンド ラインからの Azurite の実行
管理者権限で実行する必要がある。
ターミナルを管理者権限で実行する。
azurite.exe --skipApiVersionCheck
で実行した。
注意
※ユーザ権限で、ターミナルを開いてazurite.exe
を実行するだと、権限が足りなくてエラーになる。
PS C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Azure Storage Emulator> .\azurite.exe
Azurite Blob service is starting at http://127.0.0.1:10000
Exit due to unhandled error: Error: EPERM: operation not permitted, open 'C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Azure Storage Emulator\__azurite_db_blob__.json~'
PS C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Azure Storage Emulator>
通常実行での注意
下記の場合、Azurite
のバージョンが古く、プログラムがエラーになる。
今回は、skipApiVersionCheck
をフラグを付けて回避した。
azurite.exe
を右クリックして、管理者として実行を選択する。
↓
実行されると、このような画面が出てくる。
補足: Azuriteのストレージ情報
項目 | 設定値 |
---|---|
DefaultEndpointsProtocol | http |
アカウント名(AccountName) | devstoreaccount1 |
アカウント キー(AccountKey) | Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw== |
BlobEndpoint | http://127.0.0.1:10000/devstoreaccount1 |
QueueEndpoint | http://127.0.0.1:10001/devstoreaccount1 |
TableEndpoint | http://127.0.0.1:10002/devstoreaccount1 |
既知のストレージ アカウントとキー
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azurite?tabs=visual-studio%2Cblob-storage#well-known-storage-account-and-key
サンプルのコンソールアプリの作成
以前、作成したようにコンソールアプリを作成する。
C#でLinux向けのコンソールアプリケーションを構築する#コンソールアプリケーションの作成 を参照する。
appsettings.jsonを作成
Azurite
に接続するための情報を記載した。
{
"ConnectionStrings": {
"AzureStorageConnection": "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;"
},
"AzureStorage": {
"ContainerName": "sample-container",
"BlobSettings": {
"PublicAccessLevel": "Blob"
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
AzureStorageContext.csの作成
Azure
の接続情報を管理するファイル。Context/AzureStorageContext.cs
のパスで作成した。
using Azure.Storage.Blobs;
using Microsoft.Extensions.Configuration;
namespace AzureStorageSample.Context
{
public class AzureStorageContext
{
public BlobServiceClient BlobServiceClient { get; }
public AzureStorageContext(IConfiguration configuration)
{
// appsettings.jsonから接続文字列を取得
string connectionString = configuration.GetConnectionString("AzureStorageConnection");
BlobServiceClient = new BlobServiceClient(connectionString);
}
public BlobContainerClient GetBlobContainerClient(string containerName)
{
return BlobServiceClient.GetBlobContainerClient(containerName);
}
}
}
Program.csの作成
using AzureStorageSample.Context;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace AzureStorageSample
{
class Program
{
static async Task Main(string[] args)
{
// 設定ファイルの読み込み
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
// サービスプロバイダーの構築
var serviceProvider = new ServiceCollection()
.AddSingleton<IConfiguration>(configuration)
.AddSingleton<AzureStorageContext>()
.BuildServiceProvider();
// サービスの取得
var context = serviceProvider.GetService<AzureStorageContext>();
var containerClient = context.GetBlobContainerClient("sample-container");
// コンテナが存在しない場合は作成
await containerClient.CreateIfNotExistsAsync();
Console.WriteLine("コンテナ 'sample-container' を作成しました。");
// Blob操作のサンプル
string localFilePath = "sample.txt";
await File.WriteAllTextAsync(localFilePath, "Hello, Azure Blob Storage!");
string blobName = Path.GetFileName(localFilePath);
// sample.txtをコンテナにアップロードする
var blobClient = containerClient.GetBlobClient(blobName);
await blobClient.UploadAsync(localFilePath, true);
Console.WriteLine($"'{blobName}' をアップロードしました。");
}
}
}
実行結果の確認
ストレージの確認
- Azure Storage Explorer
https://azure.microsoft.com/ja-jp/products/storage/storage-explorer
Azure Storage Explorer
をインストールし、実行する。
実行後、エミュレータとアタッチ状態
> ストレージアカウント
> (エミュレーター・既定のポート)(Key)
> BLOBコンテナー
を確認する。
下記の3点を確認する。
sample-container
があることsample-container
内に、sample.txt
があることsample.txt
を右クリックでダウンロードし、中身がHello, Azure Blob Storage!
であることを確認する。
問題ないのでOK!
参考
【.NET Core】ConfigurationBuilderを使ってC#で設定ファイルや環境変数を扱う
https://tech-blog.cloud-config.jp/2019-7-11-how-to-configuration-builderConfigurationBuilder を環境変数と設定ファイルで優先順位をつけて設定する
https://qiita.com/TsuyoshiUshio@github/items/3a184d194595da6e515aローカルでの Azure Storage の開発に Azurite エミュレーターを使用する
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azurite?tabs=visual-studio%2Cblob-storage既知のストレージ アカウントとキー
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azurite?tabs=visual-studio%2Cblob-storage#well-known-storage-account-and-keyエミュレーターをストレージ エクスプローラーに接続する
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-explorer-emulators
おわりに
Azure Storage
に何かしらの操作を行うプログラムを書くということを実践した。Azurite
というのを利用すればできることも知れたので良かった。
次回は、実際のAzureのBLOBストレージ
にアップロードすることをやってみたい。