기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Account Factory에 대한 테라폼(AFT) 코드를 로컬에서 검증
작성자: Alexandru Pop(AWS), Michal Gorniak(AWS)
환경: 프로덕션 | 기술: 인프라; 현대화; DevOps DevelopmentAndTesting | 워크로드: 오픈 소스 |
AWS 서비스: AWS Control Tower |
요약
이 패턴은 AWS Control Tower Account Factory for HashiCorp Terraform (AFT) 에서 관리하는 Terraform 코드를 로컬에서 테스트하는 방법을 보여줍니다. Terraform은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 오픈 소스 코드형 인프라(IaC) 도구입니다. AFT는 AWS Control Tower에서 여러 AWS 계정을 프로비저닝하고 사용자 지정하는 데 도움이 되는 Terraform 파이프라인을 설정합니다.
코드 개발 중에는 AFT 파이프라인 외부에서 로컬에서 코드형 인프라(IaC)를 테스트하는 것이 유용할 수 있습니다. 이 패턴은 다음 작업을 수행하는 방법을 보여줍니다.
AFT 관리 계정의 AWS CodeCommit 리포지토리에 저장된 Terraform 코드의 로컬 사본을 검색하십시오.
검색된 코드를 사용하여 AFT 파이프라인을 로컬에서 시뮬레이션합니다.
이 프로시저를 사용하여 일반 AFT 파이프라인에 속하지 않는 Terraform 명령을 실행할 수도 있습니다. 예를 들어 이 메서드를 사용하여, terraform validate
, terraform plan
terraform destroy
, terraform import
같은 명령을 실행할 수 있습니다.
사전 조건 및 제한 사항
사전 조건
AWS Control Tower
를 사용하는 활성 AWS 다중 계정 환경 완전히 배포된 AFT 환경
설치 및 구성된 Code Commit용 AWS CLI 보안 인증 도우미
Python 3.x
로컬 머신에 설치 및 구성된 Git
git-remote-commit 유틸리티, 설치 및 구성
설치 및 구성된 Terraform
(로컬 Terraform 패키지 버전은 AFT 배포에 사용되는 버전과 일치해야 함)
제한 사항
이 패턴은 AWS Control Tower, AFT 또는 특정 Terraform 모듈에 필요한 배포 단계를 다루지 않습니다.
이 절차 중에 로컬에서 생성된 출력은 AFT 파이프라인 런타임 로그에 저장되지 않습니다.
아키텍처
대상 기술 스택
AWS Control Tower 배포 내에 배포된 AFT 인프라
Terraform
Git
CLI 버전 2
자동화 및 규모 조정
이 패턴은 단일 AFT 관리 AWS 계정에서 AFT 글로벌 계정 사용자 지정을 위한 Terraform 코드를 로컬로 호출하는 방법을 보여줍니다. Terraform 코드의 유효성이 검사되면 다중 계정 환경의 나머지 계정에 적용할 수 있습니다. 자세한 내용은 AWS Control Tower 설명서의 사용자 지정 재호출을 참조하세요.
유사한 프로세스를 사용하여 로컬 터미널에서 AFT 계정 사용자 지정을 실행할 수도 있습니다. AFT 계정 사용자 지정에서 Terraform 코드를 로컬로 호출하려면 AFT 관리 계정에서 aft-account-customizations CodeCommit 리포지토리 대신 aft-global-account-customizations리포지토리를 복제하십시오.
도구
서비스
AWS Control Tower는 권장 모범 사례에 따라 AWS 다중 계정 환경을 설정하고 관리할 수 있도록 지원합니다.
AWS Command Line Interface(AWS CLI)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
기타 서비스
HashiCorp Terraform은
코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 오픈 소스 IaC (코드형 인프라) 도구입니다. Git
은 오픈 소스 분산 버전 제어 시스템입니다.
code
다음 사항은 AFT에서 관리하는 Terraform 코드를 로컬에서 실행하는 데 사용할 수 있는 예제 bash 스크립트입니다. 스크립트를 사용하려면 이 패턴의 에픽 섹션에 있는 지침을 따르세요.
#! /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에서 관리하는 모든 계정에 변경 사항을 적용하세요. | AFT에서 관리하는 여러 AWS 계정에 변경 사항을 적용하려면 AWS Control Tower 설명서의 사용자 지정 재호출에 있는 지침을 따르세요. | AWS 관리자 |