기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Terraform(AFT) 코드에 대한 계정 팩토리 로컬 검증
작성자: Alexandru Pop(AWS) 및 Michal Gorniak(AWS)
환경: 프로덕션 | 기술: 인프라 DevOps, 현대화, DevelopmentAndTesting | 워크로드: 오픈 소스 |
AWS 서비스: AWS Control Tower |
요약
이 패턴은 AWS Control Tower Account Factory for HashiCorp Terraform()에서 관리하는 Terraform 코드를 로컬에서 테스트하는 방법을 보여줍니다AFT. Terraform은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 오픈 소스 코드형 인프라(IaC) 도구입니다. AFT 는 AWS Control Tower에서 여러 AWS 계정을 프로비저닝하고 사용자 지정하는 데 도움이 되는 Terraform 파이프라인을 설정합니다.
코드 개발 중에 Terraform 인프라를 AFT 파이프라인 외부에서 로컬에서 코드(IaC )로 테스트하는 것이 도움이 될 수 있습니다. 이 패턴은 다음 작업을 수행하는 방법을 보여줍니다.
AFT 관리 계정의 AWS CodeCommit 리포지토리에 저장된 Terraform 코드의 로컬 사본을 검색합니다.
검색된 코드를 사용하여 로컬에서 AFT 파이프라인을 시뮬레이션합니다.
이 절차는 일반 AFT 파이프라인의 일부가 아닌 Terraform 명령을 실행하는 데도 사용할 수 있습니다. 예를 들어 이 메서드를 사용하여, terraform validate
, terraform plan
terraform destroy
, terraform import
같은 명령을 실행할 수 있습니다.
사전 조건 및 제한 사항
사전 조건
AWS Control Tower
를 사용하는 활성 AWS 다중 계정 환경 완전히 배포된 AFT 환경
AWS CLI Code Commit 에 대한 보안 인증 도우미, 설치 및 구성
Python 3.x
로컬 머신에 설치 및 구성된 Git
git-remote-commit 유틸리티, 설치 및 구성
Terraform
, 설치 및 구성됨(로컬 Terraform 패키지 버전은 AFT 배포에 사용되는 버전과 일치해야 함)
제한 사항
이 패턴은 AWS Control Tower, AFT또는 특정 Terraform 모듈에 필요한 배포 단계를 다루지 않습니다.
이 절차 중에 로컬로 생성된 출력은 AFT 파이프라인 런타임 로그에 저장되지 않습니다.
아키텍처
대상 기술 스택
AFT AWS Control Tower 배포 내에 배포된 인프라
Terraform
Git
AWS CLI 버전 2
자동화 및 규모 조정
이 패턴은 단일 AFT관리형 계정에서 AFT 글로벌 계정 사용자 지정을 위해 Terraform 코드를 로컬로 호출하는 방법을 보여줍니다AWS. Terraform 코드의 유효성이 검사되면 다중 계정 환경의 나머지 계정에 적용할 수 있습니다. 자세한 내용은 AWS Control Tower 설명서의 사용자 지정 다시 호출을 참조하세요.
유사한 프로세스를 사용하여 로컬 터미널에서 AFT 계정 사용자 지정을 실행할 수도 있습니다. AFT 계정 사용자 지정에서 Terraform 코드를 로컬로 호출하려면 AFT 관리 계정의 리aft-account-customizations 포지토리 대신 CodeCommit 리포지aft-global-account-customizations토리를 복제합니다.
도구
AWS 서비스
AWS Control Tower는 규정 모범 사례를 따라 AWS 다중 계정 환경을 설정하고 관리하는 데 도움이 됩니다.
AWS 명령줄 인터페이스(AWS CLI)는 명령줄 쉘의 명령을 통해 AWS 서비스와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
기타 서비스
HashiCorp Terraform
은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드형 오픈 소스 인프라(IaC) 도구입니다. Git
은 오픈 소스 분산 버전 제어 시스템입니다.
code
다음은 에서 관리하는 Terraform 코드를 로컬에서 실행하는 데 사용할 수 있는 bash 스크립트의 예입니다AFT. 스크립트를 사용하려면 이 패턴의 에픽 섹션에 있는 지침을 따르세요.
#! /bin/bash # Version: 1.1 2022-06-24 Unsetting AWS_PROFILE since, when set, it interferes with script operation # 1.0 2022-02-02 Initial Version # # Purpose: For use with AFT: This script runs the local copy of TF code as if it were running within AFT pipeline. # * Facilitates testing of what the AFT pipline will do # * Provides the ability to run terraform with custom arguments (like 'plan' or 'move') which are currently not supported within the pipeline. # # © 2021 Amazon Web Services, Inc. or its affiliates. All Rights Reserved. # This AWS Content is provided subject to the terms of the AWS Customer Agreement # available at http://aws.amazon.com/agreement or other written agreement between # Customer and either Amazon Web Services, Inc. or Amazon Web Services EMEA SARL or both. # # Note: Arguments to this script are passed directly to 'terraform' without parsing nor validation by this script. # # Prerequisites: # 1. local copy of ct GIT repositories # 2. local backend.tf and aft-providers.tf filled with data for the target account on which terraform is to be run # Hint: The contents of above files can be obtain from the logs of a previous execution of the AFT pipeline for the target account. # 3. 'terraform' binary is available in local PATH # 4. Recommended: .gitignore file containing 'backend.tf', 'aft_providers.tf' so the local copy of these files are not pushed back to git readonly credentials=$(aws sts assume-role \ --role-arn arn:aws:iam::$(aws sts get-caller-identity --query "Account" --output text ):role/AWSAFTAdmin \ --role-session-name AWSAFT-Session \ --query Credentials ) unset AWS_PROFILE export AWS_ACCESS_KEY_ID=$(echo $credentials | jq -r '.AccessKeyId') export AWS_SECRET_ACCESS_KEY=$(echo $credentials | jq -r '.SecretAccessKey') export AWS_SESSION_TOKEN=$(echo $credentials | jq -r '.SessionToken') terraform "$@"
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
예제 코드를 로컬 파일로 저장합니다. |
| AWS 관리자 |
예제 코드를 실행 가능하게 만드세요. | 터미널 창을 열고 다음 중 하나를 수행하여 AWS AFT 관리 계정에 인증합니다.
참고: 조직에 AWS 환경에 인증 자격 증명을 제공하는 사용자 지정 도구가 있을 수도 있습니다. | AWS 관리자 |
올바른 AWS 리전에서 AFT 관리 계정에 대한 액세스를 확인합니다. | 중요: AFT 관리 계정에 인증한 것과 동일한 터미널 세션을 사용해야 합니다.
| AWS 관리자 |
AFT 리포지토리 코드를 저장할 새 로컬 디렉터리를 생성합니다. | 동일한 터미널 세션에서 다음 명령을 실행합니다.
| AWS 관리자 |
원격 AFT리포지토리 코드를 복제합니다. |
| AWS 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
이전에 실행한 AFT 파이프라인을 열고 Terraform 구성 파일을 로컬 폴더에 복사합니다. | 참고: AFT 파이프라인이 로컬에서 실행되려면 이 에픽에서 생성된 backend.tf 및 aft-providers.tf 구성 파일이 필요합니다. 이러한 파일은 클라우드 기반 AFT 파이프라인 내에서 자동으로 생성되지만 파이프라인이 로컬에서 실행되도록 수동으로 생성해야 합니다. AFT 파이프라인을 로컬에서 실행하려면 단일 AWS 계정 내에서 파이프라인 실행을 나타내는 파일 세트가 필요합니다.
자동 생성된 백엔드.tf 문 예제
참고: | AWS 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
검증하려는 Terraform 구성 변경 사항을 구현합니다. |
| AWS 관리자 |
ct_terraform.sh 스크립트를 실행하고 출력을 검토합니다. |
중요:
| AWS 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
backend.tf및 aft-providers.tf 파일에 대한 참조를 .gitignore 파일에 추가합니다. | 다음 명령을 실행하여 만든
참고: 파일을 | AWS 관리자 |
코드 변경 사항을 커밋하고 원격 AFT리포지토리로 푸시합니다. |
중요: 이 시점까지 이 절차에 따라 도입한 코드 변경 사항은 한 AWS 계정에만 적용됩니다. | AWS 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
에서 관리하는 모든 계정에 대한 변경 사항을 롤아웃합니다AFT. | 에서 관리하는 여러 AWS 계정에 대한 변경 사항을 롤아웃하려면 AWS Control Tower 설명서의 사용자 지정 다시 호출의 지침을 AFT따릅니다. | AWS 관리자 |