はじめに
前回は、Azuriteを使ってAzureStorageをエミュレートするでは、Azurite
というローカルでBlob Storage
をエミュレートできるソフトを使用した。
今回は、実際にAzure
上のBlob Storage
にアップロードをしてみる。
環境
Windows 11 Professional
Visual Studio 2022 Community
準備
- Microsoftアカウント
Azureのアカウントの作成
Azure
のアカウントは持っていないので作成をする。
https://azure.microsoft.com/ja-jp/free/search/
大体全部必要。
2段階認証を有効にする
Microsoft
アカウントで2段階認証が有効になっていない場合は2段階認証を有効にしておく。
Azure Blob Storageの作成
- Azureサービスから、
ストレージアカウント
を選択する。
ストレージアカウント
はないので、「ストレージアカウントの作成
」を選択する。
※左上にある「+作成」でもOK
↓
「確認と作成」のフェーズでエラー
ストレージアカウント名は一意でないとダメなようだ。
※ストレージアカウント名は適当な文字列に修正した。
確認画面にて作成するリソースに問題がなければ「作成」を選択する。
ストレージアカウントにアクセスすると、先ほど作成した
ストレージアカウント
が作成されていることが確認できる。
↓
コンテナは $logs
というものができていた。
コンテナの作成
- Azure Blob Storage の概要
https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-blobs-introduction
を見ると、
Blob Storage のリソース Blob Storage には、3 種類のリソースがあります。 ・ストレージ アカウント ・ストレージ アカウント内のコンテナー ・コンテナー内の BLOB
とある。
そのため、コンテナの中に、BLOB
を入れるようなのでコンテナを作成する必要がある。
※ただし、コンソールアプリケーション側で、「目的となるコンテナがない場合は作成する」ということをやっているので不要ではある。
- 先ほど作成した
ストレージアカウント
にて、データストレージ
>コンテナー
にアクセスし、「+コンテナー
」を選択する。
sample-container
と名前を入れて「作成」を選択する。
- 作成が完了したら、コンテナーの一覧に表示される。
Visual Studio Installerで Azure開発のコンポーネントをインストールする
コンソールアプリケーションの作成
前回と同じため、以下のリポジトリのプログラムを利用する。
https://github.com/katsuobushiFPGA/AzureStorageSample
ただし、実際のAzure
にアクセスを行うため接続情報を修正する必要がある。
ローカルからAzure Blob Storageへのアクセス
- クイックスタート: .NET 用 Azure Blob Storage クライアント ライブラリ
https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=visual-studio%2Cmanaged-identity%2Croles-azure-portal%2Csign-in-azure-cli%2Cidentity-visual-studio&pivots=blob-storage-quickstart-scratch#authenticate-to-azure-and-authorize-access-to-blob-data
を参考に構築する。
今回は、推奨されている パスワードレス(推奨)
の方法で実践をしてみる。
どうするかについてだが、記事に
たとえば、ローカルで開発するときに、アプリから Visual Studio のサインイン資格情報を使って認証することができます。
とあるので、Visual Studio
のサインイン資格情報が利用できるようだ。
Microsoft Entra ユーザー アカウントにロールを割り当てる
記事に記載の通り実施してみる。
Azure portal
で、メインの検索バーまたは左側のナビゲーションを使ってストレージ アカウントを見つけます。ストレージ アカウントの概要ページで、左側のメニューから [アクセス制御 (IAM)] を選びます。
- 上部のメニューから [+ 追加] を選択し、次に結果のドロップダウン メニューから [ロールの割り当ての追加] を選択します。
- 検索ボックスを使って、結果を目的のロールに絞り込みます。 この例では、ストレージ BLOB データ共同作成者を検索し、一致する結果を選び、[次へ] を選びます。
- [アクセスの割り当て先] で、[ユーザー、グループ、またはサービス プリンシパル] を選び、[+ メンバーの選択] を選びます。
ダイアログで、自分の Microsoft Entra ユーザー名 (通常は user@domain メール アドレス) を検索し、ダイアログの下部にある [選択] を選びます。
[レビューと割り当て] を選んで最終ページに移動し、もう一度 [レビューと割り当て] を行ってプロセスを完了します。
アクセス制御(IAM)で
ストレージ BLOB データ共同作成者
が表示されており、割り当てたアカウントが表示されていることを確認する。
プログラムの修正
Visual Studio
を起動し、サインインをする。DefaultAzureCredential
を使用するために、Azure.Identity
パッケージをアプリケーションに追加する。AzureStorageContext.cs
を修正する
必ず、BlobServiceClient の URI のストレージ アカウント名を更新してください。
ストレージ アカウント名は、Azure portal の概要ページで確認できます。
と記載がある。
<storage-account-name>
は各自のストレージアカウントに置き換えること。
using Azure.Identity;
using Azure.Storage.Blobs;
using Microsoft.Extensions.Configuration;
namespace AzureStorageSample.Context
{
public class AzureStorageContext
{
public BlobServiceClient BlobServiceClient { get; }
public AzureStorageContext(IConfiguration configuration)
{
string connectionString = configuration.GetConnectionString("AzureStorageConnection");
BlobServiceClient = new BlobServiceClient(
new Uri("https://<storage-account-name>.blob.core.windows.net"),
new DefaultAzureCredential()
);
}
public BlobContainerClient GetBlobContainerClient(string containerName)
{
return BlobServiceClient.GetBlobContainerClient(containerName);
}
}
}
せっかく、appsettings.json
で接続文字列を読み込むようにしていたが、今回は動作確認のためにプログラムにベタ書きしている。
次回以降、この辺については勉強して環境ごとに読み込むファイルを変えるように修正する。
実行確認
プログラムの修正は終わったので、やっとこれで動作確認ができる。
「デバッグ」→「デバッグの開始」で起動する。
エラー
実行時に、以下のエラーが出た。
Azure.Identity.CredentialUnavailableException: 'DefaultAzureCredential failed to retrieve a token from the included credentials.
See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/defaultazurecredential/troubleshoot
Azure CLIをインストールする
Visual Studio 2022
にサインインするのみだとうまくできなかった。
色々調べたけど、解決しなかったので Azure CLI
でaz login
をする方法でやってみることとする。
https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli
上記ページのWindowsへのインストール
でインストールが完了後、ターミナルを開き、下記のコマンドを実行する。
az login
> az login
Select the account you want to log in with. For more information on login with Azure CLI, see https://go.microsoft.com/fwlink/?linkid=2271136
Retrieving tenants and subscriptions for the selection...
[Tenant and subscription selection]
No Subscription name Subscription ID Tenant
----- -------------------- ------------------------------------ ------------------
[1] * Azure subscription 1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 既定のディレクトリ
The default is marked with an *; the default tenant is '既定のディレクトリ' and subscription is 'Azure subscription 1' (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX).
Select a subscription and tenant (Type a number or Enter for no changes): 1
Tenant: 既定のディレクトリ
Subscription: Azure subscription 1 (XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)
[Announcements]
With the new Azure CLI login experience, you can select the subscription you want to use more easily. Learn more about it and its configuration at https://go.microsoft.com/fwlink/?linkid=2271236
If you encounter any problem, please open an issue at https://aka.ms/azclibug
[Warning] The login output has been updated. Please be aware that it no longer displays the full list of available subscriptions by default.
既定のディレクトリをテナントとして選択してログインした。
再度実行
コンテナ 'sample-container' を作成しました。
'sample.txt' をアップロードしました。
成功した。
Azure Portal
でも確認してみる。
ちゃんとアップロードできてました。
参考
Azure Blob Storage の概要
https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-blobs-introductionクイックスタート: .NET 用 Azure Blob Storage クライアント ライブラリ
https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=visual-studio%2Cmanaged-identity%2Croles-azure-portal%2Csign-in-azure-cli%2Cidentity-visual-studio&pivots=blob-storage-quickstart-scratch#authenticate-to-azure-and-authorize-access-to-blob-dataDefaultAzureCredential のトラブルシューティング
https://learn.microsoft.com/ja-jp/azure/developer/java/sdk/troubleshooting-authentication-azure-hosted#troubleshoot-defaultazurecredentialAzure CLI をインストールする方法
https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli
おわりに
今回は、Azure
のストレージアカウント
に実際にファイルをアップロードするということを実践した。Azure
の接続について、Visual Studio
にサインインすればできると書いてあったが、できなかったのでこれは何か自分が見落としていそうな可能性が高い。
これは今後解決したいので調べておくことにする。
まあ、Azure Storage Explorer
でサインインしたときに、MicroSoftAccount(ホームテナント)
と既定のディレクトリ
という2つのテナント?があって、VisualStudio
でサインインしたときにはホームテナントが優先して使われた可能性が高そうな気がする。
あとは、環境変数で接続先を変える方法も知っておきたいので、次回以降にそのあたりを調べて備忘録としてまとめておこうと思う。
また、Azure
開発については下記を参考にするのがよさそうだった。
Visual Studio を使用して Azure 用のアプリケーションを開発する
https://learn.microsoft.com/ja-jp/visualstudio/azure/?view=vs-2022Visual Studio の接続済みサービスを使用した Azure Storage の追加
https://learn.microsoft.com/ja-jp/visualstudio/azure/vs-azure-tools-connected-services-storage?view=vs-2022