Closed6
【Azure Functions / C#】REST APIでBlobStorage内のファイルを読み込みたい(AzurePortalでの開発)
はじめに
- Blobに保存したファイルを読み込むAPIを作成したく、表題の開発を進める
もともとAzurePortalでの開発経験があったので、あえてAzurePortalのみでの開発とした
参考URL
- Microsoft公式 | NuGet パッケージを使用する
- Microsoft公式 | 関数クラス ライブラリ プロジェクト
- Unable to install nuget package into azure function
- Azure Functions で Azure Storage への接続情報
- How read all files from azure blob storage in C# Core
- Azure.Storage.Blobs
- [C#] Azure.Storage.Blobsでファイル操作
- Azure Functions(Httpトリガー)のパラメーター渡し方
- C# binary data conversion to string
- Adding NuGet packages to Azure Functions
- How can I use NuGet packages in my Azure Functions?
- Azure-Samples / batch-functions-tutorial
- Azure function: how to upload a function.proj file
関数アプリ作成時の注意点
AzurePortal上でのC#スクリプト(.csx)開発を行いたい場合、
ランタイムスタックは「インプロセスモデル」を選択する必要がある。
参考URL
関数の作成手順
1、[関数の作成] ボタンを選択(既に他の関数が存在する場合は、 [+]ボタン から作成進める)
2、[HTTP trigger] を選択 > [次へ] を選択
3、任意の関数名とAuthorization Levelを選択 > [作成] を選択
4、関数作成完了
以下の [コードとテスト]メニュー内の処理を修正することで、APIの実装を進めていく。
Azure.Storage.Blobsパッケージの追加
Blobの操作をするには、上記パッケージを追加する必要がある。
そのためパッケージの追加を進める。
1、空の「function.proj」ファイルを作成してアップロード
依存関係を定義するためのファイルをアップロード。
2、依存関係を定義し、ファイルを保存
定義内容は、公式ドキュメントの構成と、Azure.Storege.Blobsのパッケージ参照方法を参考にした。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Azure.Storage.Blobs" Version="12.19.1" />
</ItemGroup>
</Project>
参考URL
ストレージアカウントから接続情報の取得
Functions側からBLOB内のファイルを参照するには、ストレージアカウントの接続情報が必要。
以下の情報を取得する。
1、ストレージアカウントの、コンテナーの接続文字列を取得
ファイルが格納されているストレージアカウントを選択 > [アクセスキー] > [接続文字列] から文字列を取得しておく
2、コンテナー名の取得
ファイルが格納されているコンテナー名を取得しておく
run.csxファイルの編集
最終的に、以下の処理でストレージアカウント内のファイル読み込み&内容取得が行えた。
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System.Text;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
BlobServiceClient blobServiceClient = new BlobServiceClient("BLOB_CONNECT_STRING"); // ストレージ接続文字列を入力
BlobContainerClient blobContainerClient = blobServiceClient.GetBlobContainerClient("BLOB_CONTAINER_NAME"); // コンテナー名を入力
BlobClient blobClient = blobContainerClient.GetBlobClient("BLOB_OBJECT_PATH"); // BLOBオブジェクト名 or パスを入力(コンテナー配下でディレクトリを作成している場合))
// BLOBオブジェクト読み込み
string jsonString = "";
try {
// オブジェクト存在チェック
Azure.Response<bool> isBlobExists = await blobClient.ExistsAsync();
if (!isBlobExists.Value) {
log.LogInformation("ファイルなし時のエラー処理記載");
}
// BLOBオブジェクト読み込み
Azure.Response<BlobDownloadResult> response = await blobClient.DownloadContentAsync();
jsonString = Encoding.UTF8.GetString(response.Value.Content);
} catch(Exception ex) {
log.LogInformation("オブジェクト読み込みエラー時の処理記載");
}
return new OkObjectResult(jsonString);
}
Functionsのテスト実行
以下手順でFunctions実行し、正常にBLOB内のファイル内容が取得できることを確認する
[テストと実行] > [入力](クエリなどがあれば適宜設定) > [実行] を選択
参考URL
このスクラップは2024/04/07にクローズされました