Esercizio - Usare parametri Bicep con più ambienti
Ora che il flusso di lavoro viene distribuito in entrambi gli ambienti, è possibile eseguire l'integrazione con l'API di terze parti per le revisioni dei prodotti.
Il team del sito Web ha fornito le chiavi API e gli URL che il sito Web deve usare per accedere al servizio. Esistono valori diversi per gli ambienti di test e produzione da usare. In questa unità si aggiornerà il flusso di lavoro per configurare ognuno degli ambienti con le impostazioni corrette per l'API di revisione del prodotto.
Durante il processo, si eseguiranno queste operazioni:
- Creare segreti per le chiavi API di revisione per ognuno degli ambienti.
- Aggiornare il flusso di lavoro con i valori di input e segreto corretti per ogni ambiente.
- Aggiornare il file Bicep per propagare le impostazioni necessarie per l'API di revisione del prodotto.
- Esaminare i risultati del flusso di lavoro e le modifiche apportate all'ambiente di Azure.
Aggiungere segreti
Si decide di archiviare le chiavi API nei segreti GitHub, per assicurarsi che siano adeguatamente protetti.
Nel browser passare a Impostazioni>Segreti e variabili>Azioni.
Selezionare il pulsante New repository secret (Nuovo segreto del repository).
Immettere REVIEW_API_KEY_TEST come nome segreto e sandboxsecretkey come valore.
Selezionare Aggiungi segreto.
Ripetere il processo per aggiungere un altro segreto denominato REVIEW_API_KEY_PRODUCTION come nome segreto e productionsecretkey come valore. Selezionare Aggiungi segreto.
Aggiornare il file deploy.yml per usare le nuove impostazioni
In Visual Studio Code aprire il file deploy.yml.
Aggiornare il trigger del flusso di lavoro per includere nuovi valori per le impostazioni
inputs
esecrets
: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
Si noti che gli URL delle API vengono inclusi come input perché non sono valori segreti.
Nel processo
validate
aggiornare i passaggi per includere i nuovi parametri di distribuzione: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
Aggiornare il processo
deploy
per includere i nuovi parametri di distribuzione: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 }}
Salvare le modifiche apportate al file .
Aggiornare il file workflow.yml per fornire le nuove impostazioni
In Visual Studio Code aprire il file workflow.yml.
Aggiungere gli input
reviewApiUrl
e i segretireviewApiKey
per ogni ambiente: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 }}
Salvare le modifiche apportate al file .
Aggiornare il file Bicep
Aprire il file main.bicep.
Sotto i parametri già presenti nel file, aggiungere i parametri seguenti per la nuova API di revisione:
@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
Aggiornare la definizione della risorsa
appServiceApp
per fornire l'URL dell'API di revisione e la chiave all'applicazione, in modo che il codice del sito Web possa usarli: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 } ] } } }
Salvare le modifiche apportate al file .
Eseguire il commit e il push delle modifiche nel repository Git usando i comandi seguenti:
git add . git commit -m "Add new review API settings to Bicep file and workflow" git push
Revisionare i risultati della distribuzione
Nel browser andare alle esecuzioni dei flussi di lavoro.
Selezionare l'esecuzione più recente.
Selezionare l'esecuzione più recente del flusso di lavoro.
Attendere che il flusso di lavoro venga sospeso prima del processo deploy-production / deploy. Potrebbero essere necessari alcuni minuti prima che il flusso di lavoro raggiunga questo punto.
Approvare la distribuzione nell'ambiente di produzione selezionando Review deployments (Revisiona le distribuzioni), quindi selezionando Production (Production) e selezionando Approve and deploy (Approva e distribuisci).
Attendere il completamento dell'esecuzione del flusso di lavoro.
Selezionare Code (Codice) e quindi selezionare l'ambiente Production (Produzione).
Si noti che ora vengono visualizzate più distribuzioni nella cronologia dell'ambiente.
Nel browser passare al portale di Azure.
Passare al gruppo di risorse ToyWebsiteProduction.
Nell'elenco delle risorse aprire l'app Servizio app di Azure.
Seleziona Configurazione.
Selezionare Show values (Mostra valori).
Si noti che i valori per le impostazioni ReviewApiKey e ReviewApiUrl sono impostati sui valori configurati per l'ambiente di produzione.
Confrontare i valori correnti con le impostazioni di configurazione per l'app Servizio app nel gruppo di risorse ToyWebsiteTest. Si noti che i valori sono diversi.
Pulire le risorse
Ora che l'esercizio è stato completato, è possibile rimuovere le risorse per evitare che vengano fatturate.
Nel terminale di Visual Studio Code eseguire i comandi seguenti:
az group delete --resource-group ToyWebsiteTest --yes --no-wait
az group delete --resource-group ToyWebsiteProduction --yes --no-wait
Il gruppo di risorse viene eliminato in background.
Remove-AzResourceGroup -Name ToyWebsiteTest -Force
Remove-AzResourceGroup -Name ToyWebsiteProduction -Force