ラボ 07: サービス間でリソース シークレットにより安全にアクセスする

Microsoft Azure ユーザー インターフェイス

Microsoft クラウド ツールの動的な特性のために、このトレーニング コンテンツの開発後に Azure UI が変更される可能性があります。 その結果、ラボの指示とラボの手順が正しく整合しなくなる可能性があります。

Microsoft では、コミュニティから必要な変更が通知されたときに、このトレーニング コースを更新しています。 ただし、クラウドの更新は頻繁に発生するため、このトレーニングの内容が更新される前に UI が変更されている場合があります。 その場合は、その変更に適応し、ラボでは必要に応じてそれらに対処してください。

Instructions

開始する前に

ラボ環境にサインインする

次の資格情報を使用して Windows 11 仮想マシン (VM) にサインインします。

  • ユーザー名: Admin
  • パスワード: Pa55w.rd

: 仮想ラボ環境に接続するための手順は、インストラクターから提供されます。

インストールされているアプリケーションを確認する

Windows 11 デスクトップでタスク バーを探します。 タスク バーには、このラボで使用する次のようなアプリケーションのアイコンが含まれています。

  • Microsoft Edge
  • エクスプローラー
  • ターミナル
  • Visual Studio Code

課題シナリオ

このラボでは、ストレージ アカウントと、そのストレージ アカウントにアクセスする Azure Function アプリを作成します。 接続文字列情報のセキュリティで保護されたストレージを示すために、Key Vault リソースをプロビジョニングし、接続文字列情報を格納するために適切なシークレットを管理します。 また、サービス ID を管理して、ストレージ アカウントの接続文字列情報に安全にアクセスできるようにします。

アーキテクチャの図

ユーザーがサービス間でリソース シークレットにより安全にアクセスする方法を示すアーキテクチャ図。

演習 1: Azure リソースを作成する

タスク 1: Azure portal を開く

  1. タスク バーで、Microsoft Edge アイコンを選択します。

  2. 開いたブラウザー ウィンドウで、Azure portal (https://portal.azure.com) に移動してから、このラボで使用するアカウントでサインインします。

    :初めて Azure portal にサインインする場合は、このポータルのツアーが表示されます。 [はじめに] を選択してツアーをスキップし、ポータルの使用を開始します。

タスク 2: ストレージ アカウントを作成する

  1. Azure portal で、 [リソース、サービス、ドキュメントの検索] テキスト ボックスを使用してストレージ アカウントを検索してから、結果のリストで [ストレージ アカウント] を選択します。

  2.  [ストレージ アカウント]  ブレードで [+ 作成] を選択します。

  3. [ストレージ アカウントを作成する] ブレードの [基本] タブで、次のアクションを実行し、 [確認] を選択します。

    設定 アクション
    [サブスクリプション] ドロップダウン リスト 既定値のままにします
    [リソース グループ] セクション [新規作成] を選択し、「ConfidentialStack」と入力してから、[OK] を選択します
    [ストレージ アカウント名]  テキスト ボックス securestor[ご自分の名前]」と入力します
    [リージョン] ドロップダウン リスト [(米国) 米国東部] を選択します
    [パフォーマンス] セクション [Standard] オプションを選択します
    [冗長性] ドロップダウン リスト [ローカル冗長ストレージ (LRS)] を選択します

    次のスクリーンショットは、 [ストレージ アカウントの作成] ブレード上の構成済みの設定を示しています。

    [ストレージ アカウントの作成] ブレード上の構成済みの設定を示すスクリーンショット

  4. [確認] タブで、前の手順で選択したオプションを確認します。

  5. [作成] を選択して、指定した構成を使用してストレージ アカウントを作成します。

    : 作成タスクが完了するまで待ってから、このラボを続行してください。

  6. [デプロイ概要] ブレードで、 [リソースに移動] を選択します。

  7.  [ストレージ アカウント]  ブレードの [セキュリティとネットワーク]  セクションで、 [アクセス キー]  リンクを選択します。

  8.  [アクセス キー]  セクションで、 [キーの表示] を選択します。

  9.  [アクセス キー] ブレードで、接続文字列のいずれかを確認し ([表示] ボタンを使用)、[接続文字列]  ボックスの値をメモ帳に記録します。 キーはプラットフォームで管理される暗号化キーであり、このラボでは使用しません

    : どの接続文字列を選択しても問題ありません。 これらは交換可能です。

タスク 3: Azure Key Vault を作成する

  1. Azure portal で、 [リソース、サービス、ドキュメントの検索] テキスト ボックスを使用して、キー コンテナーを検索してから、結果のリストで [キー コンテナー] を選択します。

  2. [キー コンテナー] ブレードで、 [作成] を選択します。

  3. [キー コンテナーの作成] ブレードの [基本] タブで、次のアクションを実行してから、[次へ] を選択し、[アクセス構成] タブに移動します。

    設定 アクション
    [サブスクリプション] ドロップダウン リスト 既定値のままにします
    [リソース グループ] ドロップダウン リスト リストで [ConfidentialStack] を選択します。
    [キー コンテナー名]  テキスト ボックス securevault [ご自分の名前] 」と入力します。
    [リージョン] ドロップダウン リスト [米国東部] を選択します。
    [価格レベル] ドロップダウン リスト [Standard] を選択します。

    次のスクリーンショットは、 [キー コンテナーの作成] ブレード上の構成済みの設定を示しています。

    [キー コンテナーの作成] ブレード上の構成済みの設定を示すスクリーンショット

  4. [アクセス構成] タブで、アクセス許可モデルを [コンテナーのアクセス ポリシー] に変更し、[確認と作成] を選択します。

  5. [確認と作成] タブで、前の手順で選択したオプションを確認します。

  6. [作成] を選択し、指定した構成を使用してキー コンテナーを作成します。

    : 作成タスクが完了するまで待ってから、このラボを続行してください。

タスク 4: 関数アプリを作成する

  1. Azure portal で、 [リソース、サービス、ドキュメントの検索] テキスト ボックスを使用して、関数アプリを検索してから、結果のリストで [関数アプリ] を選択します。

  2. [関数アプリ] ブレードで、 [作成] を選択します。

  3. [関数アプリの作成] ブレードの [基本] タブで、次のアクションを実行してから、 [次へ: ストレージ] を選択します。

    設定 アクション
    [サブスクリプション] ドロップダウン リスト 既定値のままにします
    [リソース グループ] ドロップダウン リスト [ConfidentialStack] を選択します
    [関数アプリ名]  テキスト ボックス securefunc[ご自分の名前]」と入力します
    [公開] セクション [コード] を選択します
    [ランタイム スタック] ドロップダウン リスト [.NET] を選択します
    [バージョン] ドロップダウン リスト [8 (LTS)、分離ワーカー モデル] を選択します
    [リージョン] ドロップダウン リスト [米国東部] リージョンを選択します
    [オペレーティング システム] セクション [Linux] を選択します
    [ホスティング] ドロップダウン リスト [従量課金 (サーバーレス)] を選択します

    次のスクリーンショットには、 [関数アプリの作成] ブレードで構成された設定が表示されています。

    [関数アプリの作成] ブレードで構成された設定を表示しているスクリーンショット

  4. [ストレージ] タブで、次のアクションを実行してから、 [確認と作成] を選択します。

    設定 アクション
    [ストレージ アカウント] ドロップダウン リスト securestor [yourname] ストレージ アカウントを選択します
  5. [確認と作成] タブで、前の手順で選択したオプションを確認します。

  6. [作成] を選択して、指定した構成を使用して関数アプリを作成します。

    : 作成タスクが完了するまで待ってから、このラボを続行してください。

確認

この演習では、このラボで使用するすべてのリソースを作成しました。

演習 2: シークレットと ID を構成する

タスク 1: システム割り当てマネージド サービス ID を構成する

  1. Azure portal のナビゲーション ウィンドウで [リソース グループ] リンクを選択します。

  2. [リソース グループ] ブレードで、ConfidentialStack リソース グループを選択します。

  3. [ConfidentialStack] ブレードで、securefunc [yourname] 関数アプリを選択します。

    : 同じ名前の 2 つのリソース (関数アプリ リソースとアプリケーション分析情報リソース) が存在します。 関数アプリ リソースを選択していることを確認してください。

  4. [関数アプリ] ブレードで、 [設定] セクションから [ID] オプションを選択します。

  5. [ID] ペインの [システム割り当て] タブで、 [状態][オン] に設定してから、 [保存] を選択します。

  6. [はい] を選択して、設定を確定します。

    : システム割り当てマネージド ID が作成されるまで待ってから、このラボを続行してください。

タスク 2: Key Vault シークレットを作成する

  1. Azure portal の [ナビゲーション] ペインで、 [リソース グループ] リンクを選択します。

  2. [リソース グループ] ブレードで、ConfidentialStack リソース グループを選択します。

  3. [ConfidentialStack] ブレードで、securevault [yourname] キー コンテナーを選択します。

  4. [キー コンテナー] ブレードの [オブジェクト] セクションで、 [シークレット] リンクを選択します。

  5. [シークレット] ペインで、 [+ 生成/インポート] を選択します。

  6. [シークレットの作成] ブレードで、次のアクションを実行してから、 [作成] を選択します。

    設定 アクション
    [アップロード オプション] ドロップダウン リスト [手動] を選択します
    [名前] テキスト ボックス storagecredentials」と入力します
    [シークレット値] テキスト ボックス このラボで前に記録したストレージ アカウント接続文字列を入力します
    [コンテンツ タイプ] テキスト ボックス 空白のままにします
    [アクティブ化する日を設定する] チェック ボックス オフ
    [有効期限を設定する] チェック ボックス オフ
    [有効] オプション [はい] を選択します

    次のスクリーンショットは、 [シークレットの作成] ブレード上の構成済みの設定を示しています。

    [シークレットの作成] ブレード上の構成済みの設定を示すスクリーンショット

    : シークレットが作成されるまで待ってから、このラボを続行してください。

  7. [シークレット] ペインに戻ってから、リストの [storagecredentials] 項目を選択します。

  8. [バージョン] ペインで、storagecredentials シークレットの最新バージョンを選択します。

  9. [シークレットのバージョン] ペインで、次のアクションを実行します。

    1. シークレットの値を確認するには、 [シークレット値の表示] を選択します。

    2. この値は、ラボの後半で使用するため、 [シークレット識別子] テキスト ボックスの値を記録します。

    : [シークレット値] テキスト ボックスではなく [シークレット識別子] テキスト ボックスの値を記録しています。

タスク 3: Key Vault アクセス ポリシーを構成する

  1. Azure portal のナビゲーション ウィンドウで [リソース グループ] リンクを選択します。

  2. [リソース グループ] ブレードで、ConfidentialStack リソース グループを選択します。

  3. [ConfidentialStack] ブレードで、securevault[yourname] キー コンテナーを選択します。

  4. [キー コンテナー] ブレードの [概要] セクションで、 [アクセス ポリシー] リンクを選択します。

  5. [アクセス ポリシー] ウィンドウで、 [+ 作成] を選択します。

  6. [アクセス ポリシーの作成] ブレードの [アクセス許可] セクションで、次のように選択します。

    設定 アクション
    [テンプレートからの構成] ドロップダウン リスト 空白のままにします
    [キーのアクセス許可] チェック ボックス 0 件選択済み
    [シークレットのアクセス許可] チェック ボックス [GET] アクセス許可を選択します
    [証明書のアクセス許可] チェック ボックス 0 件選択済み
  7. [プリンシパル] セクションを選択し、次の選択を行います。

    設定 アクション
    [プリンシパルの選択] リンク securefunc [yourname] という名前のサービス プリンシパルを検索して選択します。 このラボで前に作成したシステム割り当てマネージド ID は、Azure Function リソースと同じ名前になります
  8. [確認および作成] を選択し、[作成] を選択します。

    : アクセス ポリシーへの変更が保存されるのを待ってから、このラボを続行してください。

タスク 4: Key Vault 派生アプリケーション設定を作成する

  1. Azure portal のナビゲーション ウィンドウで [リソース グループ] リンクを選択します。

  2. [リソース グループ] ブレードで、ConfidentialStack リソース グループを選択します。

  3. [ConfidentialStack] ブレードで、securefunc[yourname] 関数アプリを選択します。

  4. [関数アプリ] ブレードの [設定] セクションで、[環境変数] リンクを選択します。

  5. [アプリ設定] タブで [+ 追加] を選択します。 [アプリケーション設定の追加/編集] ポップアップ ダイアログに次の情報を入力します。

    設定 アクション
    [名前] テキスト ボックス StorageConnectionString」と入力します
    [値] テキスト ボックス 次の構文を使用して値を構築します: @Microsoft.KeyVault(SecretUri=<Secret Identifier>)。ここでプレースホルダー <Secret Identifier> は、この演習の前の方で記録したシークレット識別子を表します。
    [デプロイ スロットの設定] チェック ボックス 既定値のままにします

    : たとえば、シークレット識別子が https://securevaultstudent.vault.azure.net/secrets/storagecredentials/17b41386df3e4191b92f089f5efb4cbf の場合、結果の値は @Microsoft.KeyVault(SecretUri=https://securevaultstudent.vault.azure.net/secrets/storagecredentials/17b41386df3e4191b92f089f5efb4cbf) になります。

  6. [適用] を選択してポップアップ ダイアログを閉じ、[アプリ設定] セクションに戻ります。

  7. [アプリ設定] セクションの下部にある [適用] を選択します。

    注: アプリ設定を更新すると、アプリが再起動される可能性があるという警告が表示される場合があります。 確認 を選択します。 アプリケーション設定が保存されるまで待ってから、このラボを続行してください。

確認

この演習では、関数アプリのシステム割り当てマネージド サービス ID を作成してから、その ID に、キー コンテナー内のシークレットの値を取得するための適切なアクセス許可を付与しました。 最後に、関数アプリの構成設定内で参照するシークレットを作成しました。

演習 3: Azure Functions アプリをビルドする

タスク 1: 関数プロジェクトを初期化する

  1. タスク バーで、[ターミナル] アイコンを選択します。

  2. 次のコマンドを実行して、現在のディレクトリを Allfiles (F):\Allfiles\Labs\07\Starter\func の空のディレクトリに変更します。

    cd F:\Allfiles\Labs\07\Starter\func
    

    : Windows エクスプローラーで、F:\Allfiles\Labs\07\Starter\func. gitignore ファイルから読み取り専用属性を削除します。

  3. 次のコマンドを実行して、Azure Functions Core Toolsdotnet ランタイムを使用して、現在のディレクトリ内に新しいローカルの Azure Functions プロジェクトを作成します。

    func init --worker-runtime dotnet-isolated --target-framework net8.0 --force
    

    : Azure Functions Core Tools を使用して [新しいプロジェクトを作成するための] ドキュメント [azure-functions-core-tools-new-project] を確認できます。

  4. 次のコマンドを実行して、.NET 8 プロジェクトをビルドします。

    dotnet build
    

タスク 2: HTTP トリガー関数を作成する

  1. 次のコマンドを実行して、Azure Functions Core ToolsHTTP トリガー テンプレートを使用して、FileParser という名前の新しい関数を作成します。

    func new --template "HTTP trigger" --name "FileParser"
    

    : Azure Functions Core Tools を使用して [新しい関数を作成する] ためのドキュメント [azure-functions-core-tools-new-function] を確認できます。

  2. 現在実行中のターミナル アプリケーションを閉じます。

タスク 3: アプリケーション設定を構成して読み取る

  1. [スタート] 画面で、 [Visual Studio Code] タイルを選択します。

  2. [ファイル] メニューの [フォルダーを開く] を選択します。

  3. 開いたエクスプローラー ウィンドウで、Allfiles (F):\Allfiles\Labs\07\Starter\func を参照してから、 [フォルダーの選択] を選択します。

  4. [Visual Studio Code] ウィンドウの [エクスプローラー] ペインで、local.settings.json ファイルを開きます。

  5. Values オブジェクトの現在の値に注目します。

    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
    }
    
  6. StorageConnectionString という名前の新しい設定を追加してから、 [TEST VALUE] という文字列値を割り当てることによって、Values オブジェクトの値を更新します。

    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "StorageConnectionString": "[TEST VALUE]"
    }
    
  7. local.settings.json ファイルには次のものが含まれているはずです。

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "StorageConnectionString": "[TEST VALUE]"
      }
    }
    
  8. [保存] を選択して、変更を local.settings.json ファイルに保存します。

  9. [Visual Studio Code] ウィンドウの [エクスプローラー] ペインで、FileParser.cs ファイルを開きます。

  10. コード エディターで、18 行目から始まる関数 FileParser の自動生成コードの内容を次のコードに置き換えます。

            [Function("FileParser")]
             public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
             {
                 _logger.LogInformation("C# HTTP trigger function processed a request.");
    
                 var response = req.CreateResponse(HttpStatusCode.OK);
                 response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
    
                 string connectionString = Environment.GetEnvironmentVariable("StorageConnectionString");
                 response.WriteString(connectionString);
    
                 return response;
             }
    
  11. null 値に関する警告は無視します。

  12. 結果コードが次の内容となっていることを確認します (このコードは StorageConnectionString 環境変数の値を返します)。

    using System.Net;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Azure.Functions.Worker.Http;
    using Microsoft.Extensions.Logging;
    
    namespace func
    {
        public class FileParser
        {
            private readonly ILogger _logger;
    
            public FileParser(ILoggerFactory loggerFactory)
            {
                _logger = loggerFactory.CreateLogger<FileParser>();
            }
    
            [Function("FileParser")]
            public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
            {
                _logger.LogInformation("C# HTTP trigger function processed a request.");
    
                var response = req.CreateResponse(HttpStatusCode.OK);
                response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
    
                string connectionString = Environment.GetEnvironmentVariable("StorageConnectionString");
                response.WriteString(connectionString);
    
                return response;
            }
        }
    }
    
  13. [保存] を選択して、変更内容を FileParser.cs ファイルに保存します。

タスク 4: ローカル関数を検証する

  1. タスク バーで、[ターミナル] アイコンを選択します。

  2. 次のコマンドを実行して、現在のディレクトリを Allfiles (F):\Allfiles\Labs\07\Starter\func の空のディレクトリに変更します。

    cd F:\Allfiles\Labs\07\Starter\func
    
  3. 次のコマンドを実行して、関数アプリ プロジェクトを実行します。

    func start --build
    

    : Azure Functions Core Tools を使用して [関数アプリ プロジェクトをローカルで開始する] ためのドキュメント [azure-functions-core-tools-start-function] を確認できます。

  4. ラボのコンピューターで、コマンド プロンプトを起動します。

  5. 次のコマンドを実行して、http://localhost:7071/api/FileParser に対する GET REST API 呼び出しのテストを実行します。

    curl -X GET -i http://localhost:7071/api/FileParser
    
  6. HTTP 要求の結果として返される StorageConnectionString[TEST VALUE] 値を確認します。

    HTTP/1.1 200 OK
    Content-Type: text/plain; charset=utf-8
    Date: Tue, 01 Sep 2020 23:35:39 GMT
    Server: Kestrel
    Transfer-Encoding: chunked
    
    [TEST VALUE]
    
  7. ターミナル アプリケーションの現在実行中のすべてのインスタンスとコマンド プロンプト アプリケーションを閉じます。

タスク 5: Azure Functions Core Tools を使用して関数をデプロイする

  1. タスク バーで、[ターミナル] アイコンを選択します。

  2. 次のコマンドを実行して、現在のディレクトリを Allfiles (F):\Allfiles\Labs\07\Starter\func の空のディレクトリに変更します。

    cd F:\Allfiles\Labs\07\Starter\func
    
  3. 次のコマンドを実行して、Azure コマンド ライン インターフェイス (CLI) にサインインします。

    az login
    
  4. Microsoft Edge のブラウザー ウィンドウで、Azure サブスクリプションへのアクセスに使用するアカウントの資格情報を入力してから、[サインイン] を選択します。

  5. 現在開いているターミナル ウィンドウに戻ります。 サインイン プロセスが完了するまで待ちます。

  6. 次のコマンドを実行して関数アプリ プロジェクトを発行します (<function-app-name> プレースホルダー を、このラボで前に作成した関数アプリの名前に置き換えます)。

    func azure functionapp publish <function-app-name> --dotnet-version 8.0
    

    : 例として、 [関数アプリ名]securefuncstudent の場合、コマンドは func azure functionapp publish securefuncstudent --force のようになります。 Azure Functions Core Tools を使用して [ローカル関数アプリ プロジェクトを公開する] ためのドキュメント [azure-functions-core-tools-publish-azure] を確認できます。

  7. デプロイが完了するまで待ってから、このラボを続行してください。

  8. 現在実行中のターミナル アプリケーションを閉じます。

タスク 6: Key Vault 派生アプリケーション設定をテストする

  1. タスク バーで、 [Microsoft Edge] アイコンを選択してから、Azure portal が含まれているタブを選びます。

  2. Azure portal のナビゲーション ウィンドウで [リソース グループ] リンクを選択します。

  3. [リソース グループ] ブレードで、ConfidentialStack リソース グループを選択します。

  4. [ConfidentialStack] ブレードで、securefunc[yourname] 関数アプリを選択します。

  5. [関数アプリ] ブレードで、[概要] オプションを選択します。

  6. [概要] ページの下部にある [関数] タブで、既存の FileParser 関数を選択します。

  7. [関数] ブレードで、 [開発者] セクションの [コードとテスト] オプションを選択します。

  8. 関数エディターで、 [テストと実行] を選択します。

  9. 自動的に表示されるペインの [HTTP メソッド] リストで、 [GET] を選択します。

  10. [実行] を選択して、関数をテストします。

  11. テストの実行結果を確認します。 結果は、Azure Storage 接続文字列になっているはずです。

確認

この演習では、サービス ID を使用してキー コンテナーに格納されているシークレットの値を読み取り、関数アプリの結果としてその値を返しました。

演習 4: Azure Blob Storage データにアクセスする

タスク 1: サンプル ストレージ BLOB をアップロードする

  1. Azure portal のナビゲーション ウィンドウで [リソース グループ] リンクを選択します。

  2. [リソース グループ] ブレードで、ConfidentialStack リソース グループを選択します。

  3. [ConfidentialStack] ブレードで、securestor [yourname] ストレージ アカウントを選択します。

  4. [ストレージ アカウント] ブレードで、 [データ ストレージ] セクションの [コンテナー] リンクを選択します。

  5. [コンテナー] セクションで、 [+ コンテナー] を選択します。

  6. [新しいコンテナー] ポップアップ ウィンドウで、次のアクションを実行し、 [作成] を選択します。

    設定 アクション
    [名前] テキスト ボックス drop」と入力します
  7. [コンテナー] セクションに戻り、新しく作成した drop コンテナーに移動します。

  8. [コンテナー] ブレードで、 [アップロード] を選択します。

  9. [BLOB のアップロード] ウィンドウで、次のアクションを実行し、 [アップロード] を選択します。

    設定 アクション
    [ファイル] セクション [ファイルの参照] を選択するか、ドラッグ アンド ドロップ機能を使用します
    [エクスプローラー] ウィンドウ Allfiles (F):\Allfiles\Labs\07\Starter を参照し、records.json ファイルを選択してから [開く] を選択します
    [ファイルが既に存在する場合は上書きする] チェック ボックス このチェック ボックスがオンになっていることを確認します

    : BLOB がアップロードされるまで待ってから、このラボを続行してください。

  10. [コンテナー] ブレードに戻ってから、BLOB のリストで records.json BLOB を選択します。

  11. [BLOB] ブレードで、BLOB メタデータを探してから、その BLOB の URL をコピーします。

  12. タスク バーで、 [Microsoft Edge] アイコンのショートカット メニューをアクティブにしてから、 [新しいウィンドウ] を選択します。

  13. 新しいブラウザーウィンドウで、コピーした BLOB の URL を参照します。

  14. リソースが見つからなかったことを示すエラー メッセージが表示されるはずです。

    :これは、BLOB の匿名アクセスが有効になっていないことが想定されています。

タスク 2: Azure SDK for .NET をプルして構成する

  1. タスク バーで、[ターミナル] アイコンを選択します。

  2. 次のコマンドを実行して、現在のディレクトリを Allfiles (F):\Allfiles\Labs\07\Starter\func の空のディレクトリに変更します。

    cd F:\Allfiles\Labs\07\Starter\func
    
  3. 次のコマンドを実行して、NuGet から Azure.Storage.Blobs パッケージのバージョン 12.18.0 を追加します。

    dotnet add package Azure.Storage.Blobs --version 12.18.0
    

    : Azure.Storage.Blobs NuGet パッケージは、Azure Blob Storage のコードを記述するために必要な Azure SDK for .NET のサブセットを参照します。

  4. 現在実行中のターミナル アプリケーションを閉じます。

  5. [スタート] 画面で、 [Visual Studio Code] タイルを選択します。

  6. [ファイル] メニューの [フォルダーを開く] を選択します。

  7. 開いたエクスプローラー ウィンドウで、Allfiles (F):\Allfiles\Labs\07\Starter\func を参照してから、 [フォルダーの選択] を選択します。

  8. [Visual Studio Code] ウィンドウの [エクスプローラー] ペインで、FileParser.cs ファイルを開きます。

  9. Azure.Storage.BlobsAzure.Storage.Blobs.Models の名前空間に using ディレクティブを追加します。

    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  10. 19 行目から始まる現在の FileParser メソッドの内容を次のコードに置き換えます。

             [Function("FileParser")]
             public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
             {
                 _logger.LogInformation("C# HTTP trigger function processed a request.");
    
                 var response = req.CreateResponse(HttpStatusCode.OK);
    
                 string connectionString = Environment.GetEnvironmentVariable("StorageConnectionString");
    
                 /* Create a new instance of the BlobClient class by passing in your
                    connectionString variable, a  "drop" string value, and a
                    "records.json" string value to the constructor */
                 BlobClient blob = new BlobClient(connectionString, "drop", "records.json");
    
                 // Download the content of the referenced blob 
                 BlobDownloadResult downloadResult = blob.DownloadContent();
    
                  // Retrieve the value of the downloaded blob and convert it to string
                 response.WriteString(downloadResult.Content.ToString());
                
                 //return the response
                 return response;
             }
    
  11. null 値に関する警告は無視します。

  12. 結果コードが次の内容となっていることを確認します (このコードは、StorageConnectionString 環境変数が指定したストレージ アカウントからダウンロードされた BLOB のコンテンツを返します)。

    namespace func
    {
        public class FileParser
        {
            private readonly ILogger _logger;
    
            public FileParser(ILoggerFactory loggerFactory)
            {
                _logger = loggerFactory.CreateLogger<FileParser>();
            }
    
            [Function("FileParser")]
            public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
            {
                _logger.LogInformation("C# HTTP trigger function processed a request.");
    
                var response = req.CreateResponse(HttpStatusCode.OK);
    
                string connectionString = Environment.GetEnvironmentVariable("StorageConnectionString");
    
                /* Create a new instance of the BlobClient class by passing in your
                   connectionString variable, a  "drop" string value, and a
                   "records.json" string value to the constructor */
                BlobClient blob = new BlobClient(connectionString, "drop", "records.json");
    
                // Download the content of the referenced blob 
                BlobDownloadResult downloadResult = blob.DownloadContent();
    
                 // Retrieve the value of the downloaded blob and convert it to string
                response.WriteString(downloadResult.Content.ToString());
                
                //return the response
                return response;
            }
        }
    }
    
  13. [保存] を選択して、変更内容を FileParser.cs ファイルに保存します。

タスク 3:Azure Functions アプリをデプロイし検証する

  1. タスク バーで、[ターミナル] アイコンを選択します。

  2. 次のコマンドを実行して、現在のディレクトリを Allfiles (F):\Allfiles\Labs\07\Starter\func の空のディレクトリに変更します。

    cd F:\Allfiles\Labs\07\Starter\func
    
  3. 次のコマンドを実行して、Azure CLI にサインインします。

    az login
    
  4. [Microsoft Edge] ブラウザー ウィンドウで、Microsoft アカウントの電子メール アドレスとパスワードを入力してから、 [サインイン] を選択します。

  5. 現在開いているターミナル ウィンドウに戻ります。 サインイン プロセスが完了するまで待ちます。

  6. 次のコマンドを実行して関数アプリ プロジェクトを発行します (<function-app-name> プレースホルダー を、このラボで前に使用した関数アプリの名前に置き換えます)。

    func azure functionapp publish <function-app-name> --dotnet-version 8.0
    

    : 例として、 [関数アプリ名]securefuncstudent の場合、コマンドは func azure functionapp publish securefuncstudent のようになります。 Azure Functions Core Tools を使用して [ローカル関数アプリ プロジェクトを公開する] ためのドキュメント [azure-functions-core-tools-publish-azure] を確認できます。

  7. デプロイが完了するまで待ってから、このラボを続行してください。

  8. 現在実行中のターミナル アプリケーションを閉じます。

  9. タスク バーで、 [Microsoft Edge] アイコンを選択してから、Azure portal を参照します。

  10. Azure portal のナビゲーション ウィンドウで [リソース グループ] リンクを選択します。

  11. [リソース グループ] ブレードで、ConfidentialStack リソース グループを選択します。

  12. [ConfidentialStack] ブレードで、securefunc[yourname] 関数アプリを選択します。

  13. [関数アプリ] ブレードで、[概要] オプションを選択します。

  14. [概要] ページの [関数] タブで、既存の FileParser 関数を選択します。

  15. [関数] ブレードで、 [開発者] セクションの [コードとテスト] オプションを選択します。

  16. 関数エディターで、 [テストと実行] を選択します。

  17. 自動的に表示されるペインの [HTTP メソッド] リストで、 [GET] を選択します。

  18. [実行] を選択して、関数をテストします。

  19. テストの実行結果を確認します。 出力には、Azure Storage アカウントに格納されている $/drop/json BLOB の内容が含まれています。

確認

この演習では、C# コードを使用して、ストレージ アカウントにアクセスしてから、BLOB の内容をダウンロードしました。