Infrastructure
PRX의 애플리케이션 및 서비스의 여러 측면을 시작하고 관리하는 데 사용되는 템플릿과 에셋들입니다.
Infrastructure 프로젝트 자체는 여러 독립적이거나 관련은 있지만 분리된 프로젝트와 에셋들을 포함합니다. 이곳은 PRX가 infrastructure as code 철학을 준수하는 데 도움이 되는 모든 작업의 본거지입니다. 목표는 다양한 애플리케이션, 서버 및 서비스를 실행하는 데 필요한 다양한 AWS 리소스(및 관련 구성)를 코드로 작성하고 템플릿을 사용하여 설명하는 것입니다.
Infrastructure의 모든 측면은 주로 AWS CloudFormation에 의존합니다.
애플리케이션뿐만 아니라 해당 애플리케이션을 테스트하고 배포하도록 설계된 시스템들도 CloudFormation 템플릿을 사용하여 설명됩니다. 애플리케이션 배포를 용이하게 하는 시스템과 이를 지원하는 인프라스트럭처는 통틀어 CI/CD라고 불립니다. 우리의 AWS 아키텍처에는 이 범주에 속하지 않지만 Infrastructure 프로젝트의 일부로 유지 관리되는 다른 측면들도 있습니다. 여기에는 호스팅 영역(hosted zones)용 DNS 레코드와 CDN 배포 등이 포함됩니다.
CI/CD
CI 및 CD 시스템은 지속적 통합(continuous integration)과 지속적 배포(continuous delivery and deployment)를 지원합니다. 이들은 독립적인 시스템이지만 긴밀하게 협력하도록 설계되었습니다. CI/CD는 둘 중 어느 것도 템플릿에서 실행되기 전에 미리 존재하는 storage 및 notification 스택이 필요합니다.
CI 및 CD 시스템의 주요 구성 요소들이 어떻게 결합되어 작동하는지에 대한 전반적인 개요를 제공하는 draw.io 파일(System Diagram.xml)이 있습니다.
삭제(Destruction)
Infrastructure가 CI/CD를 위해 생성한 항목들을 제거하려면 다음 순서대로 진행해야 합니다:
- CI 스택 삭제 (Delete CI stack)
- 프로덕션 루트 스택 삭제 (Delete production root stack)
- 스테이징 루트 스택 삭제 (Delete staging root stack)
- CD 스택 삭제 (Delete CD stack)
- 스토리지 스택 삭제 (Delete Storage stack)
- CD 파이프라인 아티팩트 저장 버킷 삭제 (
cd-artifactstore-...)
- CD 파이프라인 CloudTrail 스토리지 버킷 삭제 (
cd-CdPipelineS3TriggerTrailStore-...)
- CI CodeBuild 소스 버킷 삭제 (
ci-cicodebuildsourcearchivebucket-...)
- 스토리지 스택에 의해 생성된 다섯 개의 버킷 삭제
기타 리소스(Other Resources)
cd/, ci/, 및 storage/ 디렉터리에 있는 파일들은 CI/CD라는 큰 범주에 속합니다. CloudFront 배포나 DNS 레코드와 같은 다른 유형의 리소스들도 이 프로젝트에서 찾을 수 있습니다.
GitHub Actions
.github/workflows 디렉터리에는 특정 조건(예: 파일 업데이트) 하에서 GitHub Action으로 실행되는 자동화 프로세스를 설명하는 파일들이 포함되어 있습니다. 이러한 워크플로우는 AWS에 배포된 다양한 프로세스들과 협력하여 작동하도록 설계되었습니다. 예를 들어, CI 시스템은 GitHub 액션을 사용하여 지속적으로 배포됩니다. 일부 DNS 호스팅 영역 또한 GitHub 액션을 사용하여 지속적으로 배포됩니다.
매우 통합된 프로세스 및 파이프라인(예를 들어 CloudFormation, CodeBuild, CodePipeline, Lambda 등이 모두 함께 작동하는 경우)은 GitHub Actions로 생성해서는 안 됩니다. GitHub Actions는 매우 간단한 워크플로우에만 사용해야 하며, AWS 기본 요소(primitives)를 사용하여 달성할 수 있는 합리적인 방법이 없는 경우(예: 다른 배포 프로세스를 배포하는 CloudFormation 스택을 배포하는 경우)에만 사용해야 합니다. 단일 액션으로 끝날 수 있는 CodePipeline의 경우는 GitHub Actions가 좋은 후보가 될 수 있습니다.
또한, GitHub Actions는 CodePipeline 소스 액션보다 커밋 수준 이벤트(commit-level events)에 대한 가시성이 더 높습니다. 특정 파일이나 디렉터리가 변경될 때만 실행되어야 하는 파이프라인이 있다면, 이 저장소에 이루어지는 모든 커밋에 대해 파이프라인이 시작되도록 하는 것보다 상세한 on 조건을 사용하여 GitHub Action을 생성하여 해당 파이프라인의 실행을 시작하는 것이 유익할 수 있습니다.