연습 - 워크플로의 트리거 업데이트
한 동료가 웹 사이트 앱이 항상 실행되도록 회사 웹 사이트에서 App Service Always On 기능을 켜라고 요청합니다.
이 연습에서는 main 분기에서 파일이 변경될 때마다 자동으로 실행되도록 앞서 만든 워크플로를 업데이트합니다. 업데이트된 워크플로를 사용하여 요청된 구성 변경 사항을 웹 사이트에 배포합니다.
프로세스 중에 다음을 수행합니다.
- main 분기의 deploy 폴더에서 파일이 변경될 때마다 자동으로 트리거되도록 워크플로를 업데이트합니다.
- Bicep 파일을 변경하세요.
- 워크플로가 자동으로 실행되는지 확인합니다.
트리거를 분기 기반이 되도록 업데이트합니다.
Visual Studio Code에서 .github/workflows/workflow.yml 파일을 엽니다.
파일 맨 위쪽의
name: deploy-toy-website
라는 줄 뒤에 다음 코드를 추가하여 여러 동시 워크플로 실행을 방지합니다.name: deploy-toy-website concurrency: toy-company
현재
on: [workflow_dispatch]
를 읽는 줄인 수동 트리거를 제거합니다.concurrency:
와permissions:
사이에 다음의 트리거 정의를 추가합니다.concurrency: toy-company on: push: branches: - main paths: - 'deploy/**' permissions:
파일의 변경 내용을 저장합니다.
변경 내용을 커밋하지만 아직 푸시하지 마세요. 곧 변경 내용을 푸시할 것입니다.
git add . git commit -m 'Add branch trigger'
Bicep 파일 업데이트
Visual Studio Code에서 main.bicep 파일을 엽니다.
appServiceApp
리소스 정의의siteConfig
속성 내에서alwaysOn
속성을true
값으로 추가합니다.resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { alwaysOn: true appSettings: [ { name: 'ToyManualsStorageAccountConnectionString' value: toyManualsStorageAccountConnectionString } ] } }
파일의 변경 내용을 저장합니다.
Visual Studio Code 터미널에서 다음 코드를 실행하여 변경 내용을 커밋하고 두 커밋을 모두 푸시합니다.
git add . git commit -m 'Configure app Always On setting' git push
워크플로 실패 확인
브라우저에서 GitHub의 Actions 메뉴를 선택하고 워크플로를 선택합니다.
가장 최근의 워크플로 실행을 선택하여 워크플로가 자동으로 실행되었는지 확인합니다. 푸시 트리거가 모니터링하는 분기에 변경 내용을 푸시했으므로 워크플로가 실행됩니다. 워크플로가 계속 실행 중인 경우 잠시 기다렸다가 페이지를 새로 고칩니다.
워크플로가 실패한 배포를 표시합니다.
오류를 진단하려면 배포 작업을 선택하고 실패한 arm-deploy 작업을 선택합니다.
여기에는 다음 텍스트가 포함됩니다.
There was a conflict. AlwaysOn cannot be set for this site as the plan does not allow it. For more information on pricing and features, please see: https://aka.ms/appservicepricingdetails
이 오류 메시지는 App Service 앱이 Always On 기능을 지원하지 않는 F1 무료 계층을 사용하여 배포되었기 때문에 배포에 오류가 발생했음을 나타냅니다.
중요
이 예제는 사용하는 모든 매개 변수 값을 포함하여 Bicep 파일을 테스트하는 것이 얼마나 중요한지 보여줍니다. 미묘한 오류가 리소스 구성 또는 기타 코드에 추가되기 쉽습니다. 워크플로가 코드를 배포하고 실패할 때까지 문제를 검색하지 못할 수 있습니다. 이후 모듈에서는 Bicep 코드를 확인하고 테스트하는 데 사용할 수 있는 몇 가지 전략을 알아봅니다.
Bicep 파일을 픽스하고 워크플로가 다시 트리거되는지 확인합니다.
오류가 발생한 배포에 대해 동료에게 문의합니다. Always On 설정은 프로덕션 환경에만 적용하면 된다고 함께 결정합니다. 여기에서는 사용하기로 결정한 새 규칙을 적용하여 배포 오류를 일으킨 문제를 해결합니다.
Visual Studio Code에서 각 환경 유형의 새 속성을
environmentConfigurationMap
변수에 추가합니다.var environmentConfigurationMap = { nonprod: { appServiceApp: { alwaysOn: false } appServicePlan: { sku: { name: 'F1' capacity: 1 } } toyManualsStorageAccount: { sku: { name: 'Standard_LRS' } } } prod: { appServiceApp: { alwaysOn: true } appServicePlan: { sku: { name: 'S1' capacity: 2 } } toyManualsStorageAccount: { sku: { name: 'Standard_ZRS' } } } }
환경 유형에 적절한 구성 맵 값을 사용하도록 애플리케이션의
alwaysOn
설정을 변경합니다.resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn appSettings: [ { name: 'ToyManualsStorageAccountConnectionString' value: toyManualsStorageAccountConnectionString } ] } } }
파일의 변경 내용을 저장합니다.
Visual Studio Code 터미널에서 변경 내용을 커밋하고 푸시합니다.
git add . git commit -m 'Enable App Service Always On for production environments only' git push
워크플로 성공 확인
GitHub에서 워크플로 목록으로 돌아갑니다. 워크플로를 선택합니다.
가장 최근 실행을 선택합니다. 워크플로가 계속 실행 중인 경우 잠시 기다렸다가 페이지를 새로 고칩니다.
워크플로 실행이 표시됩니다.
워크플로가 성공적인 배포를 표시합니다. 이번에는 유효한 Bicep 파일을 사용했기 때문에 성공했습니다.
리소스 정리
이제 연습을 완료했으므로 리소스에 대한 요금이 청구되지 않도록 리소스를 제거할 수 있습니다.
Visual Studio Code 터미널에서 다음 명령을 실행합니다.
az group delete --resource-group ToyWebsite --yes --no-wait
리소스 그룹은 백그라운드에서 삭제됩니다.
Remove-AzResourceGroup -Name ToyWebsite -Force