기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
GitHub Actions를 사용하여 Terraform 관리형 AWS 인프라에 대한 자동 풀 요청 생성
Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay, Prafful Gupta, Amazon Web Services
요약
이 패턴은 여러 Terraform 리포지토리에서 변경 사항을 관리하는 데 수반되는 수동적이고 반복적인 작업을 제거하도록 설계된 자동화 유틸리티를 제공합니다. 많은 조직에서 Terraform 리포지토리를 사용하여 코드형 인프라(IaC)를 관리합니다. 종종 수백 개의 개별 리포지토리가 서로 다른 환경, 서비스 또는 팀을 나타냅니다. 이러한 리포지토리를 대규모로 관리하면 상당한 운영 문제가 발생합니다. 파라미터 업데이트, 모듈 버전 업그레이드 또는 구성 변경 적용과 같은 일상적인 작업을 수행하려면 하루에 여러 번 여러 리포지토리에서 풀 요청(PRs 생성하고 관리해야 하는 경우가 많습니다.
간단한 변경의 경우에도이 반복적이고 수동적인 프로세스는 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 엔지니어는 모든 대상 리포지토리에 동일한 변경 사항을 일관되게 적용하고 의미 있는 PR 제목과 설명을 만들어야 합니다. 또한 문제 추적 참조를 가져오거나 포함하려면 Jira와 같은 외부 도구와 상호 작용해야 하는 경우가 많습니다. 이러한 작업은 필요하더라도 중요한 엔지니어링 시간을 소비하고 전반적인 효율성을 떨어뜨리는 차별화되지 않은 과중한 작업입니다. 이 워크플로의 자동화가 부족하면 마찰이 발생하고 전송 속도가 느려지며 대규모 Terraform 인프라를 유지 관리하는 팀의 인지 부담이 증가합니다.
솔루션 개요
이 문제를 해결하기 위해이 패턴은 완전한 구성 기반 유틸리티를 제공하므로 사용자는 구조화된 구성 파일에서 원하는 변경 사항을 정의할 수 있습니다. 이 파일은 명확하게 정의된 스키마를 사용하여 대상 리포지토리, 모듈, 파라미터 및 값을 지정합니다.
구성되면 유틸리티는 다음과 같은 자동 단계를 수행합니다.
사용자 정의 구성을 읽어 변경 사항의 범위와 특성을 결정합니다.
필요한 업데이트가 적용된 각 대상 리포지토리에 새 브랜치를 생성합니다.
각 변경에 대한 PR을 생성하여 모든 리포지토리의 일관성을 보장합니다.
Slack 알림(선택 사항)을 전송하여 생성된 PRs
유틸리티는 이러한 반복 작업을 자동화하여 대규모 인프라 업데이트 관리와 관련된 시간, 노력 및 리스크를 크게 줄입니다. 이를 통해 팀은 변경 사항이 일관되게 적용되고 모든 리포지토리에서 추적할 수 있도록 지원하면서 고부가가치 엔지니어링 작업에 집중할 수 있습니다.
사전 조건 및 제한 사항
사전 조건
활성. AWS 계정
Python 버전 3.8 이상.
GitHub 개인 액세스 토큰 자세한 내용은 GitHub 설명서의 개인 액세스 토큰 생성(클래식)
을 참조하세요. GitHub PAT는 유틸리티가 브랜치 및 풀 요청 생성과 같은 작업을 수행할 수 있도록 대상 리포지토리에 액세스할 수 있습니다. 자세한 내용은이 패턴의 GitHub 코드 리포지토리
를 참조하세요.
제한 사항
구성 복잡성은 주요 과제입니다. 자동화의 효과는 구성 파일의 기능에 의해 제한됩니다. 시스템이 표준 변경 사항을 효율적으로 처리하지만 복잡한 인프라 수정에는 수동 개입이 필요할 수 있으며 특정 엣지 케이스는 자동 처리 범위를 벗어납니다.
보안 및 액세스는 특히 GitHub 액세스 토큰 및 API 속도 제한을 관리할 때 상당한 고려 사항을 제공합니다. 조직은 운영 효율성을 유지하면서 적절한 액세스 제어를 보장하면서 안전한 자격 증명 스토리지 및 관리와 자동화의 필요성을 신중하게 균형을 맞춰야 합니다.
자동 시스템에는 비즈니스 로직 및 환경별 요구 사항을 검증할 수 있는 기능이 제한되어 있기 때문에 검증 제약 조건은 또 다른 주목할 만한 제한을 제기합니다. 자동화된 검증이 모든 상황별 뉘앙스와 비즈니스 규칙을 완전히 포착할 수 없기 때문에 복잡한 종속성과 교차 서비스 상호 작용에는 사람의 감독이 필요한 경우가 많습니다.
대규모 인프라 변경을 처리할 때 규모 및 성능 문제가 발생합니다. 시스템은 여러 리포지토리를 동시에 관리하면서 GitHub API 제한 내에서 작동해야 합니다. 광범위한 인프라에서 리소스 집약적인 작업을 수행하면 신중한 관리가 필요한 성능 병목 현상이 발생할 수 있습니다.
통합 경계는 주로 GitHub 및 Slack과 같은 특정 도구와 함께 작동하도록 설계되었기 때문에 시스템의 유연성을 제한합니다. 다른 도구를 사용하는 조직은 사용자 지정 솔루션이 필요할 수 있으며이 패턴의 워크플로 사용자 지정 옵션은 지원되는 통합 지점으로 제한됩니다.
아키텍처
다음 다이어그램은 이 애플리케이션에 대한 구성 요소 및 워크플로우를 보여줍니다.

워크플로우는 다음 단계로 구성됩니다.
개발자는 Terraform 리포지토리를 지정하여 GitHub Actions를 트리거합니다.
자동화 유틸리티는 정의된 구성을 읽습니다.
자동화 유틸리티는 제공된 Terraform 리포지토리도 가져옵니다.
자동화 유틸리티는 새 브랜치를 생성하고 로컬에서 Terraform 템플릿을 업데이트합니다.
자동화 유틸리티는 새 브랜치를 리포지토리로 푸시하고 새 PR을 생성합니다.
자동화 유틸리티는 PR 링크가 포함된 Slack 알림을 사용하여 개발자에게 알리고 AWS 클라우드 배포를 위해 Terraform 템플릿을 활성화합니다.
도구
GitHub
는 개발자가 코드를 생성, 저장, 관리 및 공유하는 데 사용할 수 있는 개발자 플랫폼입니다. GitHub Actions
는 GitHub 리포지토리와 긴밀하게 통합된 지속적 통합 및 지속적 전달(CI/CD) 플랫폼입니다. GitHub Actions를 사용하여 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있습니다. HashiCorp Terraform
은 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 됩니다. Salesforce 제품인 Slack
은 채팅 및 비디오 협업을 제공하고, 코드 없이 프로세스를 자동화하고, 정보 공유를 지원하는 AI 기반 대화형 플랫폼입니다.
코드 리포지토리
이 패턴의 코드는 GitHub Actions 리포지토리를 사용하는 GitHub Automated Terraform Infrastructure Update Workflow
모범 사례
효과적인 변경 관리는 성공적인 구현에 매우 중요합니다. 조직은 대규모 변경을 위한 점진적인 롤아웃 전략을 채택해야 합니다. 일관된 브랜치 이름 지정 규칙 및 PR 설명을 유지하고 모든 변경 사항을 포괄적으로 문서화합니다.
최소 권한 액세스 원칙과 보안 자격 증명 관리에 중점을 두고 보안 제어를 엄격하게 구현해야 합니다. 무단 변경을 방지하기 위해 브랜치 보호 규칙을 활성화합니다. 정기적인 보안 감사를 수행하여 시스템 무결성을 유지합니다.
강력한 테스트 프로토콜에는 지속적 통합 및 지속적 배포(CI/CD) 파이프라인에서의 자동
terraform plan실행이 포함되어야 합니다. 프로토콜에는 커밋 전 검증 검사 및 중요한 변경 사항에 대한 전용 검토 환경도 포함되어야 합니다. 이 다중 계층 테스트 접근 방식은 문제를 조기에 포착하고 인프라 안정성을 보장하는 데 도움이 됩니다.모니터링 전략에는 포괄적인 알림 메커니즘, 자세한 성공/실패 지표 추적, 실패한 작업에 대한 자동 재시도 메커니즘이 포함되어야 합니다. 이 전략은 운영 가시성을 보장하고 발생하는 모든 문제에 신속하게 대응할 수 있도록 지원합니다.
구성 표준은 모든 구성에 대한 버전 관리를 강조하여 재사용성 및 확장성을 위한 모듈성을 유지해야 합니다. 스키마 및 예를 명확하게 문서화하면 팀이 자동화 시스템을 효과적으로 이해하고 사용하는 데 도움이 됩니다.
에픽
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
코드 리포지토리 설정 | 리포지토리를 복제하려면 다음 명령을 실행합니다.
| DevOps |
종속 항목 설치 | 필요한 종속성을 설치하려면 다음 명령을 실행합니다.
| DevOps |
GitHub 토큰을 구성합니다. | GitHub 토큰을 구성한 다음 작동하는지 확인하려면 다음 명령을 실행합니다.
| DevOps |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
| 대상 리포지토리와 원하는 변경 사항을 정의하려면 다음과 같이
| DevOps |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
사전 테스트를 수행합니다. | 프로덕션 리포지토리에서 실행하기 전에 항상 구성을 테스트합니다. 다음 명령을 사용합니다.
| DevOps |
리포지토리 액세스를 확인합니다. | GitHub 토큰이 리포지토리에 액세스할 수 있는지 확인하려면 다음 명령을 실행합니다.
| DevOps |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
GitHub Actions UI를 사용하여 자동화 유틸리티를 실행합니다. | GitHub Actions UI를 사용하여 자동화 유틸리티를 실행하려면 다음을 수행합니다.
| DevOps |
(또는) 명령줄에서 자동화 유틸리티를 실행합니다. | 원하는 경우 GitHub Actions UI를 사용하는 대신 명령줄에서 자동화 유틸리티를 실행할 수 있습니다. 다음 명령을 사용합니다.
| DevOps |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
생성된 PRs 및 변경 사항을 검토합니다. | GitHub 워크플로 실행 결과를 모니터링하려면 다음을 수행합니다.
| DevOps |
| 작업 | 설명 | 필요한 기술 |
|---|---|---|
(선택 사항) 정리. | 중단되거나 불필요한 PRs 닫습니다. | DevOps |
관련 리소스
AWS 권장 가이드
GitHub 설명서
개인용 액세스 토큰 관리