演習 - Azure でアプリを構成、デプロイ、実行する

完了

次に Azure でアプリを実行します。 Azure App Service アプリを作成し、マネージド ID とコンテナー構成を使用してそのアプリを設定してから、コードをデプロイする必要があります。

App Service プランとアプリを作成する

App Service アプリの作成は 2 段階のプロセスです:最初に "プラン" を作成し、次に "アプリ" を作成します。

"プラン" 名は、サブスクリプション内でのみ一意にする必要があります。そのため、同じ名前 keyvault-exercise-plan を使用できます。 しかし、アプリ名はグローバルに一意である必要があるため、独自の名前を選択します。

  1. Azure Cloud Shell で、以下のコマンドを実行して App Service プランを作成します。

    az appservice plan create \
        --name keyvault-exercise-plan \
        --sku FREE \
        --location centralus \
        --resource-group "<rgn>[sandbox resource group name]</rgn>"
    
  2. 次に、作成した App Service プランを使用する Web アプリを作成するために、次のコマンドを実行します。 必ず、--name パラメーターで <your-unique-app-name> をお使いのアプリの名前に置き換えてください。

    az webapp create \
        --plan keyvault-exercise-plan \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
    az webapp create \
        --plan keyvault-exercise-plan \
        --runtime "node|16LTS" \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    

アプリに構成を追加する

Azure にデプロイするには、構成ファイルではなくアプリの設定内に VaultName 構成を配置するという App Service のベスト プラクティスに従います。 アプリ設定を作成するために、次のコマンドを実行します。 必ず、パラメーター --name<your-unique-app-name> をお使いのアプリの名前に置き換え、--settings パラメーターで <your-unique-vault-name> をお使いのコンテナーの名前に置き換えてください。

az webapp config appsettings set \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name> \
    --settings 'VaultName=<your-unique-vault-name>'

Azure にデプロイするには、構成ファイルではなくアプリの設定内に VaultName 構成を配置するという App Service のベスト プラクティスに従います。 App Service がサーバー上にアプリのパッケージを復元し、アプリの実行に必要な構成を作成するように、SCM_DO_BUILD_DURING_DEPLOYMENT 設定の true への設定も行います。 アプリ設定を作成するために、次のコマンドを実行します。 必ず、パラメーター --name<your-unique-app-name> をお使いのアプリの名前に置き換え、--settings パラメーターで <your-unique-vault-name> をお使いのコンテナーの名前に置き換えてください。

az webapp config appsettings set \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name> \
    --settings 'VaultName=<your-unique-vault-name>' 'SCM_DO_BUILD_DURING_DEPLOYMENT=true'

マネージド ID の有効化

アプリでマネージド ID を有効にするのは 1 行で済みます。 これをアプリで有効にするために、次のコマンドを実行します。 必ず、--name パラメーターで <your-unique-app-name> をお使いのアプリの名前に置き換えてください。

az webapp identity assign \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name <your-unique-app-name>

結果の JSON 出力から、principalId 値をコピーします。 PrincipalId は、Microsoft Entra ID のアプリの新しい ID である一意の ID です。次のステップでこれを使用します。

コンテナーへのアクセスを許可する

デプロイする前に行う最後の手順は、Key Vault アクセス許可をご利用のアプリのマネージド ID に割り当てることです。 次のコマンドで、--name パラメーターの <your-unique-vault-name> をご使用のコンテナーの名前に置換し、前の手順からコピーした principalId 値を object-id の値として入力します。 GetList のアクセスを確立するために、次のコマンドを実行します。

az keyvault set-policy \
    --secret-permissions get list \
    --name <your-unique-vault-name> \
    --object-id <your-managed-identity-principleid>

アプリをデプロイし、試してみる

  1. すべての構成が設定され、デプロイする準備ができました。 次のコマンドによってサイトを pub フォルダーに発行し、site.zip として圧縮した後、その zip を App Service にデプロイします。 必ず、--name パラメーターで <your-unique-app-name> をお使いのアプリの名前に置き換えてください。

    Note

    現在のディレクトリが KeyVaultDemoApp ディレクトリではない場合は、cd で戻る必要があります。

    dotnet publish -o pub
    zip -j site.zip pub/*
    
    az webapp deploy \
        --src-path site.zip \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
  1. すべての構成が設定され、デプロイする準備ができました。 次のコマンドでアプリを site.zip に圧縮し、App Service にデプロイします。 デプロイ時に App Service によって自動的に復元されるため、zip から node_modules は除外します。 必ず、--name パラメーターで <your-unique-app-name> をお使いのアプリの名前に置き換えてください。

    Note

    現在のディレクトリが KeyVaultDemoApp ディレクトリではない場合は、cd で戻る必要があります。

    zip site.zip * -x node_modules/
    
    az webapp deploy \
        --src-path site.zip \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name <your-unique-app-name>
    
  1. デプロイが完了するまでに 1、2 分かかる場合があります。 サイトがデプロイされたことを示す結果が表示されたら、https://<your-unique-app-name>.azurewebsites.net/api/SecretTest をブラウザーで開きます。 このアプリをサーバーで初めて起動する場合は時間がかかりますが、その後はシークレット値 reindeer_flotilla が表示されます。

アプリが完成し、デプロイされました。