연습 - 여러 환경에서 Bicep 매개 변수 사용
워크플로가 두 환경 모두에 배포되어 제품 검토를 위해 타사 API와 통합할 수 있습니다.
웹 사이트 팀이 웹 사이트에서 서비스에 액세스하는 데 사용해야 하는 API 키와 URL을 제공했습니다. 테스트 및 프로덕션 환경에서 사용할 여러 값이 있습니다. 이 단원에서는 제품 검토 API에 대한 올바른 설정으로 각 환경을 구성하도록 워크플로를 업데이트합니다.
프로세스 중에 다음을 수행합니다.
- 각 환경의 검토 API 키에 대한 비밀을 만듭니다.
- 각 환경에 대한 올바른 입력 및 비밀 값으로 워크플로를 업데이트합니다.
- Bicep 파일을 업데이트하여 제품 검토 API에 필요한 설정을 전파합니다.
- 워크플로 결과와 Azure 환경의 변경 내용을 검토합니다.
비밀 추가
API 키가 적절하게 보호되도록 GitHub 비밀에 저장하기로 결정합니다.
브라우저에서 설정 및 비밀과 변수 및 작업으로 이동합니다.
새 리포지토리 비밀 단추를 선택합니다.
비밀 이름으로 REVIEW_API_KEY_TEST를 입력하고 값으로 sandboxsecretkey를 입력합니다.
비밀 추가를 선택합니다.
프로세스를 반복하여 비밀 이름으로 REVIEW_API_KEY_PRODUCTION이라는 또 다른 비밀을 추가하고 값으로 productionsecretkey를 추가합니다. 비밀 추가를 선택합니다.
새 설정을 사용하도록 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
애플리케이션에 검토 API URL 및 키를 제공하도록
appServiceApp
리소스 정의를 업데이트하여 웹 사이트 코드에서 사용할 수 있도록 합니다.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 작업 전에 워크플로가 일시 중지될 때까지 기다립니다. 워크플로가 이 지점에 도달하는 데는 몇 분 정도 걸릴 수 있습니다.
배포 검토를 선택한 다음, 프로덕션을 선택하고, 승인 및 배포를 선택하여 프로덕션 환경에 대한 배포를 승인합니다.
워크플로의 실행이 완료될 때까지 기다립니다.
코드를 선택한 다음, 프로덕션 환경을 선택합니다.
이제 환경 기록에 여러 배포가 표시됩니다.
브라우저에서 Azure Portal로 이동합니다.
ToyWebsiteProduction 리소스 그룹으로 이동합니다.
리소스 목록에서 Azure App Service 앱을 엽니다.
Configuration(구성) 을 선택합니다.
값 표시를 선택합니다.
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