쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

LocalStack 및 Terraform Tests를 사용하여 AWS 인프라 테스트 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

LocalStack 및 Terraform Tests를 사용하여 AWS 인프라 테스트

작성자: Ivan Girardi(AWS) 및 Ioannis Kalyvas(AWS)

요약

이 패턴은 AWS 환경에서 인프라를 프로비저닝할 필요 없이 Terraform AWS 에서에 대한 코드형 인프라(IaC)를 로컬에서 테스트하는 데 도움이 됩니다. Terraform Tests 프레임워크LocalStack과 통합합니다. LocalStack Docker 컨테이너는 다양한 에뮬레이션을 수행하는 로컬 개발 환경을 제공합니다 AWS 서비스. 이렇게 하면에서 비용을 발생시키지 않고 인프라 배포를 테스트하고 반복할 수 있습니다 AWS 클라우드.

이 솔루션에는 다음과 같은 이점이 있습니다.

  • 비용 최적화 - LocalStack에 대한 테스트를 실행하면 사용할 필요가 없습니다 AWS 서비스. 이렇게 하면 해당 AWS 리소스의 생성, 운영 및 수정과 관련된 비용이 발생하지 않습니다.

  • 속도 및 효율성 - 로컬 테스트도 일반적으로 AWS 리소스를 배포하는 것보다 빠릅니다. 이 빠른 피드백 루프는 개발 및 디버깅을 가속화합니다. LocalStack은 로컬에서 실행되므로 인터넷 연결 없이 Terraform 구성 파일을 개발하고 테스트할 수 있습니다. Terraform 구성 파일을 로컬에서 디버깅하고 즉각적인 피드백을 받아 개발 프로세스를 간소화할 수 있습니다.

  • 일관성 및 재현성 - LocalStack은 테스트를 위한 일관된 환경을 제공합니다. 이러한 일관성은 테스트가 외부 AWS 변경 또는 네트워크 문제에 관계없이 동일한 결과를 산출하도록 하는 데 도움이 됩니다.

  • 격리 - LocalStack을 사용하여 테스트하면 라이브 AWS 리소스 또는 프로덕션 환경에 실수로 영향을 미치지 않습니다. 이 격리를 통해 다양한 구성을 실험하고 테스트할 수 있습니다.

  • 자동화 - 지속적 통합 및 지속적 전송(CI/CD) 파이프라인과의 통합을 통해 Terraform 구성 파일을 자동으로 테스트할 수 있습니다. 파이프라인은 배포 전에 IaC를 철저히 테스트합니다.

  • 유연성 - 프로덕션 환경에 더 가깝게 맞게 다양한 AWS 리전 AWS 계정및 서비스 구성을 시뮬레이션할 수 있습니다.

사전 조건 및 제한 사항

사전 조건 

제한 사항

  • 이 패턴은 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 테이블

CI/CD 파이프라인은 LocalStack Docker 컨테이너와 AWS 리소스를 빌드하고 테스트합니다.

이 다이어그램은 다음 워크플로를 보여줍니다.

  1. 소스 코드 리포지토리에 Terraform 구성 파일을 추가하고 커밋합니다.

  2. CI/CD 파이프라인은 변경 사항을 감지하고 정적 Terraform 코드 분석을 위한 빌드 프로세스를 시작합니다. 파이프라인은 LocalStack Docker 컨테이너를 빌드하고 실행합니다. 그런 다음 파이프라인이 테스트 프로세스를 시작합니다.

  3. 파이프라인은 LocalStack Docker 컨테이너에서 호스팅되는 Amazon S3 버킷에 객체를 업로드합니다.

  4. 객체를 업로드하면 AWS Lambda 함수가 호출됩니다.

  5. Lambda 함수는 Amazon S3 이벤트 알림을 CloudWatch 로그에 저장합니다.

  6. Lambda 함수는 AWS Step Functions 상태 시스템을 시작합니다.

  7. 상태 시스템은 Amazon S3 객체의 이름을 DynamoDB 테이블에 씁니다.

  8. 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

모범 사례

에픽

작업설명필요한 기술

리포지토리를 복제합니다.

bash 쉘에서 다음 명령을 입력합니다. 이렇게 하면 GitHub의 LocalStack 및 Terraform Tests 리포지토리를 사용하여 테스트 AWS 인프라가 복제됩니다.

git clone https://github.com/aws-samples/localstack-terraform-test.git
DevOps 엔지니어

LocalStack 컨테이너를 실행합니다.

  1. 다음 명령을 입력하여 복제된 리포지토리로 이동합니다.

    cd localstack-terraform-test
  2. 다음 명령을 입력하여 분리 모드에서 LocalStack Docker 컨테이너를 시작합니다.

    docker-compose up -d
  3. LocalStack Docker 컨테이너가 작동할 때까지 기다립니다.

DevOps 엔지니어

Terraform을 초기화합니다.

다음 명령을 입력하여 Terraform을 초기화합니다.

terraform init
DevOps 엔지니어

Terraform 테스트를 실행합니다.

  1. 다음 명령을 입력하여 Terraform Tests를 실행합니다.

    terraform test
  2. 모든 테스트가 성공적으로 완료되었는지 확인합니다. 다음과 유사하게 출력됩니다.

    Success! 3 passed, 0 failed.
DevOps 엔지니어

리소스를 정리합니다.

다음 명령을 입력하여 LocalStack 컨테이너를 삭제합니다.

docker-compose down
DevOps 엔지니어

솔루션 배포

작업설명필요한 기술

리포지토리를 복제합니다.

bash 쉘에서 다음 명령을 입력합니다. 이렇게 하면 GitHub의 LocalStack 및 Terraform Tests 리포지토리를 사용하여 테스트 AWS 인프라가 복제됩니다.

git clone https://github.com/aws-samples/localstack-terraform-test.git
DevOps 엔지니어

LocalStack 컨테이너를 실행합니다.

  1. 다음 명령을 입력하여 복제된 리포지토리로 이동합니다.

    cd localstack-terraform-test
  2. 다음 명령을 입력하여 분리 모드에서 LocalStack Docker 컨테이너를 시작합니다.

    docker-compose up -d
  3. LocalStack Docker 컨테이너가 작동할 때까지 기다립니다.

DevOps 엔지니어

Terraform을 초기화합니다.

다음 명령을 입력하여 Terraform을 초기화합니다.

terraform init
DevOps 엔지니어

Terraform 테스트를 실행합니다.

  1. 다음 명령을 입력하여 Terraform Tests를 실행합니다.

    terraform test
  2. 모든 테스트가 성공적으로 완료되었는지 확인합니다. 다음과 유사하게 출력됩니다.

    Success! 3 passed, 0 failed.
DevOps 엔지니어

리소스를 정리합니다.

다음 명령을 입력하여 LocalStack 컨테이너를 삭제합니다.

docker-compose down
DevOps 엔지니어

문제 해결

문제Solution

Error: reading DynamoDB Table Item (Files|README.md): empty terraform test 명령을 실행할 때의 결과입니다.

  1. terraform test 명령을 다시 입력합니다.

  2. 그래도 오류가 해결되지 않으면 main.tf 파일을 편집하여 대기 제한 시간을 15초보다 큰 값으로 늘립니다.

    resource "time_sleep" "wait" { create_duration = "15s" triggers = { s3_object = local.key_json } }

관련 리소스

추가 정보

GitHub 작업과 통합

GitHub 작업을 사용하여 CI/CD 파이프라인에 LocalStack 및 Terraform 테스트를 통합할 수 있습니다. 자세한 내용은 GitHub 작업 설명서를 참조하세요. 다음은 샘플 GitHub Actions 구성 파일입니다.

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
프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.