기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
GitHub Actions 및 Terragrunt를 사용하여 API 기반 리소스 오케스트레이션 프레임워크 생성
Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande, Akash Kumar, Amazon Web Services
요약
이 패턴은 GitHub Actions 워크플로를 활용하여 표준화된 JSON 페이로드를 통해 리소스 프로비저닝을 자동화하므로 수동 구성이 필요하지 않습니다. 이 자동화된 파이프라인은 전체 배포 수명 주기를 관리하고 사용자 지정 UI 구성 요소에서 ServiceNow에 이르기까지 다양한 프런트엔드 시스템과 원활하게 통합할 수 있습니다. 솔루션의 유연성을 통해 사용자는 표준화된 프로세스를 유지하면서 선호하는 인터페이스를 통해 시스템과 상호 작용할 수 있습니다.
구성 가능한 파이프라인 아키텍처는 다양한 조직 요구 사항을 충족하도록 조정할 수 있습니다. 구현 예제는 Amazon Virtual Private Cloud(Amazon VPC) 및 Amazon Simple Storage Service(Amazon S3) 프로비저닝에 중점을 둡니다. 이 패턴은 조직 전반의 요청을 표준화하고 일관된 통합 지점을 제공하여 일반적인 클라우드 리소스 관리 문제를 효과적으로 해결합니다. 이 접근 방식을 사용하면 팀이 표준화를 보장하면서 리소스를 더 쉽게 요청하고 관리할 수 있습니다.
사전 조건 및 제한 사항
사전 조건
활성 AWS 계정
구성된 리포지토리에 액세스할 수 있는 활성 GitHub 계정
제한 사항
새 리소스는 리포지토리 구성에
terragrunt.hcl
파일을 수동으로 추가해야 합니다.일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 리전별 서비스를
참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량을 참조하고 서비스 링크를 선택합니다.
아키텍처
다음 다이어그램은이 패턴의 구성 요소와 워크플로를 보여줍니다.

아키텍처 다이어그램은 다음 작업을 보여줍니다.
사용자가 GitHub Actions에 JSON 페이로드를 제출하여 자동화 파이프라인을 트리거합니다.
GitHub Actions 파이프라인은 페이로드 사양에 따라 Terragrunt 및 Terraform 리포지토리에서 필요한 리소스 코드를 검색합니다.
파이프라인은 지정된 AWS 계정 ID를 사용하여 적절한 AWS Identity and Access Management (IAM) 역할을 수임합니다. 그런 다음 파이프라인은 리소스를 대상에 배포 AWS 계정 하고 계정별 Amazon S3 버킷 및 Amazon DynamoDB 테이블을 사용하여 Terraform 상태를 관리합니다.
각 AWS 계정 에는 보안 액세스를 위한 IAM 역할, Terraform 상태 스토리지를 위한 Amazon S3 버킷, 상태 잠금을 위한 DynamoDB 테이블이 포함되어 있습니다. 이 설계를 통해 제어되고 자동화된 리소스 배포가 가능합니다 AWS 계정. 배포 프로세스는 각 계정의 전용 Amazon S3 버킷 및 IAM 역할을 통해 적절한 상태 관리 및 액세스 제어를 유지합니다.
도구
AWS 서비스
Amazon DynamoDB는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
AWS Identity and Access Management (IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
Amazon Virtual Private Cloud(Amazon VPC)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다.
기타 도구
GitHub Actions
는 GitHub 리포지토리와 긴밀하게 통합된 지속적 통합 및 지속적 전달(CI/CD) 플랫폼입니다. GitHub Actions를 사용하여 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있습니다. Terraform
은 HashiCorp의 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 됩니다. Terragrunt
는 OpenTofu 및 Terraform 기능을 모두 확장하는 오케스트레이션 도구입니다. 일반 인프라 패턴이 적용되는 방식을 관리하므로 대규모 인프라 자산을 더 쉽게 확장하고 유지할 수 있습니다.
코드 리포지토리
이 패턴의 코드는 GitHub sample-aws-orchestration-pipeline-terraform
모범 사례
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
GitHub 리포지토리를 초기화합니다. | GitHub 리포지토리를 초기화하려면 다음 단계를 사용합니다.
| DevOps 엔지니어 |
IAM 역할 및 권한을 구성합니다. | IAM 역할 및 권한을 구성하려면 다음 단계를 사용합니다.
| DevOps 엔지니어 |
GitHub 보안 암호 및 변수를 설정합니다. | GitHub 리포지토리에서 리포지토리 보안 암호 및 변수를 설정하는 방법에 대한 지침은 GitHub 설명서의 리포지토리에 대한 구성 변수 생성을
| DevOps 엔지니어 |
리포지토리 구조를 생성합니다. | 리포지토리 구조를 생성하려면 다음 단계를 사용합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
curl을 사용하여 파이프라인을 실행합니다. | curl
파이프라인 실행 프로세스에 대한 자세한 내용은 추가 정보를 참조하세요. | DevOps 엔지니어 |
파이프라인 실행 결과 검증 | 결과를 검증하려면 다음 단계를 사용합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
정리 요청을 제출합니다. | 더 이상 필요하지 않은 리소스를 삭제하려면 다음 단계를 사용합니다.
| DevOps 엔지니어 |
관련 리소스
AWS 블로그
AWS 서비스 설명서
GitHub 리소스
추가 정보
파이프라인 실행 프로세스
파이프라인 실행 단계는 다음과 같습니다.
JSON 페이로드 형식 검증 - 수신 JSON 구성이 올바르게 구성되고 필요한 모든 파라미터가 포함되어 있는지 확인합니다.
지정된 IAM 역할 수임 - AWS 작업에 필요한 IAM 역할을 인증하고 수임합니다.
필요한 Terraform 및 Terragrunt 코드 다운로드 - 지정된 버전의 리소스 코드 및 종속성을 검색합니다.
리소스 배포 실행 - 구성을 적용하여 대상 환경에서 AWS 리소스를 배포하거나 업데이트합니다.
VPC 생성에 사용되는 샘플 페이로드
다음은 Terraform 백엔드 상태 버킷 생성을 위한 예제 코드입니다.
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
다음은 Amazon VPC를 사용하여 VPC를 생성하기 위한 예제 페이로드입니다. 여기서는 VPC에 대한 CIDR 블록 사양을 vpc_cidr
정의합니다. Terraform 상태 버킷은 terraform
파일에 정의된 변수에 매핑됩니다. ref
파라미터에는 실행할 코드의 브랜치 이름이 포함됩니다.
{ "ref": "main", "inputs": { "RequestParameters": { "RequestId": "1111111", "RequestType": "create", "ResourceType": "vpc", "AccountId": "1234567890", "AccountAlias": "account-alias", "RegionId": "us-west-2", "ApplicationName": "myapp", "DivisionName": "division-name", "EnvironmentId": "dev", "Suffix": "poc" }, "ResourceParameters": [ { "VPC": { "vpc_cidr": "10.0.0.0/16" } } ] } }
RequestParameters
는 파이프라인 섹션에서 요청 상태를 추적하는 데 사용되며이 정보를 기반으로 tfstate
생성됩니다. 다음 파라미터에는 메타데이터 및 제어 정보가 포함됩니다.
RequestId
- 요청의 고유 식별자RequestType
- 작업 유형(생성, 업데이트 또는 삭제)ResourceType
- 프로비저닝할 리소스 유형AccountId
- 배포 AWS 계정 대상AccountAlias
-의 표시 이름 AWS 계정RegionId
- 리소스 배포 AWS 리전 용ApplicationName
- 애플리케이션 이름DivisionName
- 조직 분할EnvironmentId
– 환경(예: dev 및 prod)Suffix
- 리소스에 대한 추가 식별자
ResourceParameters
에는 Terraform 파일에 정의된 변수에 매핑되는 리소스별 구성이 포함되어 있습니다. Terraform 모듈로 전달해야 하는 모든 사용자 지정 변수는에 포함되어야 합니다ResourceParameters
. Amazon VPC의 경우 파라미터vpc_cidr
는 필수입니다.