演習 - Azure でアプリを構成、デプロイ、実行する
次に Azure でアプリを実行します。 Azure App Service アプリを作成し、マネージド ID とコンテナー構成を使用してそのアプリを設定してから、コードをデプロイする必要があります。
App Service プランとアプリを作成する
App Service アプリの作成は 2 段階のプロセスです:最初に "プラン" を作成し、次に "アプリ" を作成します。
"プラン" 名は、サブスクリプション内でのみ一意にする必要があります。そのため、同じ名前 keyvault-exercise-plan
を使用できます。 しかし、アプリ名はグローバルに一意である必要があるため、独自の名前を選択します。
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>"
次に、作成した 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
の値として入力します。 Get
と List
のアクセスを確立するために、次のコマンドを実行します。
az keyvault set-policy \
--secret-permissions get list \
--name <your-unique-vault-name> \
--object-id <your-managed-identity-principleid>
アプリをデプロイし、試してみる
すべての構成が設定され、デプロイする準備ができました。 次のコマンドによってサイトを 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>
すべての構成が設定され、デプロイする準備ができました。 次のコマンドでアプリを 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、2 分かかる場合があります。 サイトがデプロイされたことを示す結果が表示されたら、
https://<your-unique-app-name>.azurewebsites.net/api/SecretTest
をブラウザーで開きます。 このアプリをサーバーで初めて起動する場合は時間がかかりますが、その後はシークレット値 reindeer_flotilla が表示されます。
アプリが完成し、デプロイされました。