기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
LocalStack 및 Terraform Tests를 사용하여 AWS 인프라 테스트
작성자: Ivan Girardi(AWS) 및 Ioannis Kalyvas(AWS)
요약
이 패턴은 AWS 환경에서 인프라를 프로비저닝할 필요 없이 Terraform AWS 에서에 대한 코드형 인프라(IaC)를 로컬에서 테스트하는 데 도움이 됩니다. Terraform Tests 프레임워크
이 솔루션에는 다음과 같은 이점이 있습니다.
비용 최적화 - LocalStack에 대한 테스트를 실행하면 사용할 필요가 없습니다 AWS 서비스. 이렇게 하면 해당 AWS 리소스의 생성, 운영 및 수정과 관련된 비용이 발생하지 않습니다.
속도 및 효율성 - 로컬 테스트도 일반적으로 AWS 리소스를 배포하는 것보다 빠릅니다. 이 빠른 피드백 루프는 개발 및 디버깅을 가속화합니다. LocalStack은 로컬에서 실행되므로 인터넷 연결 없이 Terraform 구성 파일을 개발하고 테스트할 수 있습니다. Terraform 구성 파일을 로컬에서 디버깅하고 즉각적인 피드백을 받아 개발 프로세스를 간소화할 수 있습니다.
일관성 및 재현성 - LocalStack은 테스트를 위한 일관된 환경을 제공합니다. 이러한 일관성은 테스트가 외부 AWS 변경 또는 네트워크 문제에 관계없이 동일한 결과를 산출하도록 하는 데 도움이 됩니다.
격리 - LocalStack을 사용하여 테스트하면 라이브 AWS 리소스 또는 프로덕션 환경에 실수로 영향을 미치지 않습니다. 이 격리를 통해 다양한 구성을 실험하고 테스트할 수 있습니다.
자동화 - 지속적 통합 및 지속적 전송(CI/CD) 파이프라인과의 통합을 통해 Terraform 구성 파일을
자동으로 테스트할 수 있습니다. 파이프라인은 배포 전에 IaC를 철저히 테스트합니다. 유연성 - 프로덕션 환경에 더 가깝게 맞게 다양한 AWS 리전 AWS 계정및 서비스 구성을 시뮬레이션할 수 있습니다.
사전 조건 및 제한 사항
사전 조건
기본 Docker 소켓()에 대한 액세스를 활성화합니다
/var/run/docker.sock
. 자세한 내용은 LocalStack 설명서를참조하세요. Docker Compose 설치
Terraform 버전 1.6.0 이상 설치
Terraform CLI 설치
Terraform AWS 공급자 구성
(선택 사항) AWS Command Line Interface ()를 설치하고 구성합니다AWS CLI. LocalStack AWS CLI 에서를 사용하는 방법의 예는 LocalStack 및 Terraform Tests 리포지토리를 사용하는 GitHub Test 인프라를 참조하세요. AWS LocalStack
제한 사항
이 패턴은 Amazon Simple Storage Service(Amazon S3), AWS Lambda AWS Step Functions, 및 Amazon DynamoDB 리소스를 테스트하기 위한 명시적 예제를 제공합니다. 그러나이 솔루션을 확장하여 추가 AWS 리소스를 포함할 수 있습니다.
이 패턴은 Terraform Tests를 로컬에서 실행하는 지침을 제공하지만 테스트를 모든 CI/CD 파이프라인에 통합할 수 있습니다.
이 패턴은 LocalStack 커뮤니티 이미지 사용에 대한 지침을 제공합니다. LocalStack Pro 이미지를 사용하는 경우 LocalStack Pro 설명서를
참조하세요. LocalStack은 다양한 AWS APIs. 전체 목록은 AWS 서비스 기능 적용 범위를
참조하세요. 일부 고급 기능을 사용하려면 LocalStack Pro를 구독해야 할 수 있습니다.
아키텍처
다음 다이어그램은이 솔루션의 아키텍처를 보여줍니다. 기본 구성 요소는 소스 코드 리포지토리, CI/CD 파이프라인 및 LocalStack Docker 컨테이너입니다. LocalStack Docker 컨테이너는 다음을 AWS 서비스 로컬에서 호스팅합니다.
파일을 저장하기 위한 Amazon S3 버킷
모니터링 및 로깅을 위한 Amazon CloudWatch
서버리스 코드를 실행하는 AWS Lambda 함수
다단계 워크플로를 오케스트레이션하기 위한 AWS Step Functions 상태 시스템
NoSQL 데이터를 저장하기 위한 Amazon DynamoDB 테이블

이 다이어그램은 다음 워크플로를 보여줍니다.
소스 코드 리포지토리에 Terraform 구성 파일을 추가하고 커밋합니다.
CI/CD 파이프라인은 변경 사항을 감지하고 정적 Terraform 코드 분석을 위한 빌드 프로세스를 시작합니다. 파이프라인은 LocalStack Docker 컨테이너를 빌드하고 실행합니다. 그런 다음 파이프라인이 테스트 프로세스를 시작합니다.
파이프라인은 LocalStack Docker 컨테이너에서 호스팅되는 Amazon S3 버킷에 객체를 업로드합니다.
객체를 업로드하면 AWS Lambda 함수가 호출됩니다.
Lambda 함수는 Amazon S3 이벤트 알림을 CloudWatch 로그에 저장합니다.
Lambda 함수는 AWS Step Functions 상태 시스템을 시작합니다.
상태 시스템은 Amazon S3 객체의 이름을 DynamoDB 테이블에 씁니다.
CI/CD 파이프라인의 테스트 프로세스는 업로드된 객체의 이름이 DynamoDB 테이블의 항목과 일치하는지 확인합니다. 또한 S3 버킷이 지정된 이름으로 배포되고 AWS Lambda 함수가 성공적으로 배포되었는지 확인합니다.
도구
AWS 서비스
Amazon CloudWatch를 사용하면 AWS 리소스 및 실행 중인 애플리케이션의 지표를 실시간으로 모니터링할 AWS 수 있습니다.
Amazon DynamoDB는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
Amazon Simple Storage Service(Amazon S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
AWS Step Functions는 AWS Lambda 함수 및 기타를 결합하여 비즈니스 크리티컬 애플리케이션을 구축하는 AWS 서비스 데 도움이 되는 서버리스 오케스트레이션 서비스입니다.
기타 도구
Docker
는 운영 체제 수준의 가상화를 사용하여 컨테이너에 소프트웨어를 제공하는 서비스형 플랫폼(PaaS) 제품 세트입니다. Docker Compose
는 다중 컨테이너 애플리케이션을 정의하고 실행하는 도구입니다. LocalStack
은 단일 컨테이너에서 실행되는 클라우드 서비스 에뮬레이터입니다. LocalStack을 사용하면에 연결 AWS 서비스하지 않고도가 사용하는 로컬 시스템에서 워크로드를 실행할 수 있습니다 AWS 클라우드. Terraform
은 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 되는 HashiCorp의 IaC 도구입니다. HashiCorp Terraform Tests
는 통합 또는 단위 테스트와 유사한 테스트를 통해 Terraform 모듈 구성 업데이트를 검증하는 데 도움이 됩니다.
코드 리포지토리
이 패턴의 코드는 LocalStack 및 Terraform Tests 리포지토리를 사용하는 GitHub Test 인프라에서 사용할 수 있습니다. AWS LocalStack
모범 사례
이 솔루션은 Terraform 구성 파일에 지정된 AWS 인프라를 테스트하며에 해당 리소스를 배포하지 않습니다 AWS 클라우드. 리소스를 배포하려면 최소 권한 원칙(IAM 설명서)을 따르고 Terraform 백엔드(Terraform 설명서)를 올바르게 구성합니다
. CI/CD 파이프라인에 LocalStack을 통합할 때는 권한 모드에서 LocalStack Docker 컨테이너를 실행하지 않는 것이 좋습니다. 자세한 내용은 런타임 권한 및 Linux 기능
(Docker 설명서) 및 자체 관리형 실행기를 위한 보안(GitLab 설명서)을 참조하세요 .GitLab
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
리포지토리를 복제합니다. | bash 쉘에서 다음 명령을 입력합니다. 이렇게 하면 GitHub의 LocalStack 및 Terraform Tests 리포지토리를 사용하여 테스트 AWS 인프라
| DevOps 엔지니어 |
LocalStack 컨테이너를 실행합니다. |
| DevOps 엔지니어 |
Terraform을 초기화합니다. | 다음 명령을 입력하여 Terraform을 초기화합니다.
| DevOps 엔지니어 |
Terraform 테스트를 실행합니다. |
| DevOps 엔지니어 |
리소스를 정리합니다. | 다음 명령을 입력하여 LocalStack 컨테이너를 삭제합니다.
| DevOps 엔지니어 |
문제 해결
문제 | Solution |
---|---|
|
|
관련 리소스
추가 정보
GitHub 작업과 통합
GitHub 작업을 사용하여 CI/CD 파이프라인에 LocalStack 및 Terraform 테스트를 통합할 수 있습니다. 자세한 내용은 GitHub 작업 설명서를
name: LocalStack Terraform Test
on:
push:
branches:
- '**'
workflow_dispatch: {}
jobs:
localstack-terraform-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build and Start LocalStack Container
run: |
docker compose up -d
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: latest
- name: Run Terraform Init and Validation
run: |
terraform init
terraform validate
terraform fmt --recursive --check
terraform plan
terraform show
- name: Run Terraform Test
run: |
terraform test
- name: Stop and Delete LocalStack Container
if: always()
run: docker compose down