Gridwich를 사용하려면 Azure 내외부의 여러 리소스가 서로 안전하게 통신해야 합니다. 이 요구 사항은 Microsoft Entra 권한, 게이트, 리소스 생성, 작업 순서 및 장기 실행 함수 배포와 함께 CI/CD(지속적인 통합 및 지속적인 업데이트) 문제를 제기합니다. 다음 지침 원칙은 이러한 과제를 해결합니다.
- 단일 빌드 아티팩트가 동일한 파이프라인의 모든 환경에 영향을 줍니다.
- 제어되지 않는 환경은 삭제할 수 있습니다.
- Terraform은 idempotent 환경을 선언적으로 만듭니다.
- Terraform은 소프트웨어를 릴리스하지 않습니다.
- 인프라 만들기 및 소프트웨어 릴리스는 파이프라인의 고유한 단계입니다.
- CI/CD 파이프라인은 Microsoft Entra 권한을 할당하지 않습니다.
- 파이프라인은 모든 항목을 코드로 간주합니다.
- 파이프라인은 작성 가능성에 초점을 맞춘 재사용 가능한 구성 요소를 사용합니다.
다음 고려 사항은 이전 원칙과 관련이 있습니다.
단일 아티팩트, 여러 환경
Gridwich 파이프라인은 여러 환경으로 확장되지만 파이프라인이 한 환경에서 다음 환경으로 승격되는 아티팩트가 하나뿐입니다.
소프트웨어 릴리스 및 인프라 만들기
Gridwich에서 소프트웨어 릴리스 및 인프라 배포는 별도의 두 가지 책임입니다. 단일 파이프라인은 다음 일반 패턴을 사용하여 다양한 단계에서 두 책임을 모두 처리합니다.
소프트웨어 빌드 > 인프라 배포 > 소프트웨어 릴리스 > 소프트웨어 구성 > 사용자 지정 스크립트 배포
인프라 및 소프트웨어 릴리스가 두 가지 고유 책임이라는 지침 원칙은 Event Grid 구독 배포를 더 어렵게 만듭니다. Azure는 Event Grid 웹후크 구독을 만들 때 유효성 검사 이벤트를 전송하여 등록 엔드포인트가 Event Grid 이벤트를 허용하는지 여부를 확인합니다. 이 유효성 검사를 통과하려면 Terraform이 Event Grid 구독 리소스를 빌드하기 전에 Azure Function을 해제하고 실행해야 합니다.
이 문제를 해결하기 위해 CI/CD 파이프라인에는 다음 두 Terraform 작업이 있습니다.
- Terraform 1은 Azure Event Grid 구독을 제외한 모든 리소스를 만듭니다.
- Terraform 2는 소프트웨어가 실행되고 난 후 Event Grid 구독을 만듭니다.
Terraform은 현재 특정 모듈을 제외할 수 없기 때문에 Terraform 1 작업은 Event Grid 구독을 제외한 모든 모듈을 명시적으로 대상으로 지정해야 합니다. 이 요구 사항은 잠재적으로 오류가 발생하기 쉬우며 현재 Terraform의 GitHub 문제는 이 문제를 추적합니다.
배포 후 스크립트
CI/CD 파이프라인은 상승된 권한이 필요한 작업을 수행하지 않지만 관리자 스크립트 템플릿을 사용하여 관리 스크립트 세트를 파이프라인 아티팩트로 생성합니다. 상승된 권한을 가진 관리자는 새 Gridwich 환경을 만들 때마다 이러한 관리자 스크립트를 실행해야 합니다. 자세한 내용은 Azure 관리자 스크립트 실행을 참조하세요.
Terraform 및 소프트웨어 릴리스는 다음을 포함하여 특정 Gridwich 작업을 완료할 수 없습니다.
- Azure Key Vault에 인증서 복사
- Azure Storage에서 스토리지 분석 사용
Azure CLI 스크립트 azcli-last-steps-template.yml은 이러한 마지막 단계를 제공합니다.
코드 및 코드 재사용으로 모든 항목
"코드로서의 모든 것" 연습의 한 가지 이점은 구성 요소 재사용입니다.
- Terraform의 경우 Gridwich는 Terraform 모듈을 많이 사용하여 작성 가능성 및 재사용성을 향상시킵니다.
- Azure Pipelines YAML의 경우 Gridwich는 파이프라인 템플릿을 사용합니다.