演習 - Bicep パラメーターを複数の環境で使用する
ワークフローが両方の環境にデプロイされるようになったので、製品レビューのためのサードパーティ API と統合することができます。
Web サイト チームから、サービスにアクセスするために Web サイトが使用する API キーと URL が渡されました。 テスト環境と運用環境で使用する値は異なります。 このユニットでは、ワークフローを更新して、製品レビュー API の正しい設定を使用して各環境を構成します。
このプロセスでは、次のことを行います。
- 各環境のレビュー API キーのシークレットを作成します。
- 各環境の正しい入力値とシークレット値でワークフローを更新します。
- Bicep ファイルを更新して、製品レビュー API で必要な設定を反映します。
- ワークフローの結果と、Azure 環境への変更をレビューします。
シークレットを追加する
API キーが適切に保護されるように、API キーを GitHub シークレットに格納します。
ブラウザーで、[Settings] (設定)>[Secrets and variables] (シークレットと変数)>[Actions] (アクション) の順に移動します。
[New repository secret](新しいリポジトリのシークレット) ボタンを選択します。
シークレット名として「REVIEW_API_KEY_TEST」と入力し、値として「sandboxsecretkey」と入力します。
[Add secret](シークレットの追加) を選択します。
プロセスを繰り返して、シークレット名として、REVIEW_API_KEY_PRODUCTION という名前の別のシークレットを追加し、値として productionsecretkey を追加します。 [Add secret](シークレットの追加) を選択します。
新しい設定を使用するために deploy.yml ファイルを更新する
Visual Studio Code で、deploy.yml ファイルを開きます。
inputs
とsecrets
の設定の新しい値を含めるように、ワークフロー トリガーを更新します。on: workflow_call: inputs: environmentType: required: true type: string resourceGroupName: required: true type: string reviewApiUrl: required: true type: string secrets: AZURE_CLIENT_ID: required: true AZURE_TENANT_ID: required: true AZURE_SUBSCRIPTION_ID: required: true reviewApiKey: required: true
API URL はシークレット値ではないので、入力として含める点に注意してください。
validate
ジョブで、新しいデプロイ パラメーターを含めるようにステップを更新します。jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - if: inputs.environmentType != 'Production' uses: azure/arm-deploy@v1 name: Run preflight validation with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }} deploymentMode: Validate - if: inputs.environmentType == 'Production' uses: azure/arm-deploy@v1 name: Run what-if with: failOnStdErr: false resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }} additionalArguments: --what-if
新しいデプロイ パラメーターを含めるように
deploy
ジョブを更新します。deploy: needs: validate environment: ${{ inputs.environmentType }} runs-on: ubuntu-latest outputs: appServiceAppHostName: ${{ steps.deploy.outputs.appServiceAppHostName }} steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 id: deploy name: Deploy Bicep file with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }}
ファイルに加えた変更を保存します。
新しい設定を提供するために workflow.yml ファイルを更新する
Visual Studio Code で、workflow.yml ファイルを開きます。
環境ごとに、
reviewApiUrl
入力とreviewApiKey
シークレットを追加します。name: deploy-toy-website-environments concurrency: toy-company on: push: branches: - main workflow_dispatch: permissions: id-token: write contents: read jobs: # Lint the Bicep file. lint: uses: ./.github/workflows/lint.yml # Deploy to the test environment. deploy-test: uses: ./.github/workflows/deploy.yml needs: lint with: environmentType: Test resourceGroupName: ToyWebsiteTest reviewApiUrl: https://sandbox.contoso.com/reviews secrets: AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_TEST }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} reviewApiKey: ${{ secrets.REVIEW_API_KEY_TEST }} # Deploy to the production environment. deploy-production: uses: ./.github/workflows/deploy.yml needs: deploy-test with: environmentType: Production resourceGroupName: ToyWebsiteProduction reviewApiUrl: https://api.contoso.com/reviews secrets: AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_PRODUCTION }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} reviewApiKey: ${{ secrets.REVIEW_API_KEY_PRODUCTION }}
ファイルに加えた変更を保存します。
Bicep ファイルを更新する
main.bicep ファイルを開きます。
ファイル内のすでにあるパラメーターの下に、次の新しいレビュー API のパラメーターを追加します。
@description('The URL to the product review API.') param reviewApiUrl string @secure() @description('The API key to use when accessing the product review API.') param reviewApiKey string
appServiceApp
リソース定義を更新してレビュー API URL とキーをアプリケーションに対して指定し、Web サイトのコードで使用できるようします。resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'APPINSIGHTS_INSTRUMENTATIONKEY' value: applicationInsights.properties.InstrumentationKey } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' value: applicationInsights.properties.ConnectionString } { name: 'ReviewApiUrl' value: reviewApiUrl } { name: 'ReviewApiKey' value: reviewApiKey } ] } } }
ファイルに加えた変更を保存します。
次のコマンドを使用して、Git リポジトリに対して変更をコミットおよびプッシュします。
git add . git commit -m "Add new review API settings to Bicep file and workflow" git push
デプロイ結果をレビューする
ブラウザーでワークフロー実行に移動します。
最新の実行を選択します。
ワークフローの最新の実行を選択します。
deploy-production / deploy ジョブの前にワークフローが一時停止する間待ちます。 ワークフローがここに達するまでに数分かかることがあります。
[Review deployments](デプロイのレビュー)、[Production]、[Approve and deploy](承認してデプロイ) の順に選択して、運用環境へのデプロイを承認します。
ワークフローの実行が完了するまで待ちます。
[コード] を選択し、[Production] 環境を選択します。
環境の履歴に、複数のデプロイが表示されるようになりました。
ブラウザーで、Azure portal に移動します。
ToyWebsiteProduction リソース グループに移動します。
リソースの一覧で、Azure App Service アプリを開きます。
[構成] を選択します。
[Show values](値の表示) を選択します。
ReviewApiKey と ReviewApiUrl の設定の値が、運用環境で構成した値に設定されています。
現在の値を、ToyWebsiteTest リソース グループの App Service アプリの構成設定と比較します。 値が異なっていることに注目してください。
リソースのクリーンアップ
これで演習が完了したので、課金されないようにリソースを削除しましょう。
Visual Studio Code ターミナルで、次のコマンドを実行します。
az group delete --resource-group ToyWebsiteTest --yes --no-wait
az group delete --resource-group ToyWebsiteProduction --yes --no-wait
バックグラウンドでリソース グループが削除されます。
Remove-AzResourceGroup -Name ToyWebsiteTest -Force
Remove-AzResourceGroup -Name ToyWebsiteProduction -Force