기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
서버리스 애플리케이션을 테스트할 때 발생할 수 있는 문제
에뮬레이터와 모의 호출을 사용하여 로컬 데스크톱에서 서버리스 애플리케이션을 테스트하면 CI/CD 파이프라인의 환경 간에 코드가 진행되면서 테스트 불일치가 발생할 수 있습니다. 애플리케이션의 비즈니스 로직을 검증하기 위해 데스크톱에서 생성하는 단위 테스트에는 클라우드 서비스의 중요한 측면이 포함되어 있지 않거나 정확하게 표시되지 않을 수 있습니다. 전체 테스트는 로컬에서 개별적으로 수행할 수 없습니다. 이를 위해서는 여러 서비스 간의 권한과 구성을 확인해야 합니다.
다음 섹션에서는 클라우드 테스트 전략을 구현할 때 발생할 수 있는 문제를 간략하게 설명합니다. 다음 섹션에서는 클라우드 테스트 전략을 구현하려고 할 때 고객이 겪는 과제와 효과적인 테스트 범위를 달성하기 위한 모범 사례에 대한 지침을 간략하게 설명합니다.
예: Amazon S3 버킷을 생성하는 Lambda 함수
Lambda 함수의 로직이 Amazon S3 버킷 생성에 의존하는 경우 전체 테스트를 통해 Amazon S3가 성공적으로 호출되었고 버킷이 성공적으로 생성되었는지 확인해야 합니다. 모의 테스트 설정에서는 성공 응답을 모의하고 잠재적으로 실패 응답을 처리하기 위한 테스트 사례를 추가할 수 있습니다. 에뮬레이션 테스트 시나리오에서는 CreateBucket API를 호출할 수 있지만 호출을 수행하는 자격 증명은 역할을 수임하는 Lambda 서비스에서 시작되지 않으며 대신 자리 표시자 인증이 사용됩니다. 이는 종종 더 허용적인 역할 또는 사용자 자격 증명입니다.
이전에 설명한 모의 및 에뮬레이션 설정은 Lambda 함수가 Amazon S3 호출에 성공하거나 실패할 경우 수행할 작업을 테스트할 가능성이 높습니다. 그러나 이러한 테스트는 함수의 구성을 고려할 때 Lambda 함수가 버킷을 성공적으로 생성할 수 있는지 여부를 캡처하지 못합니다. 이 구성은 AWS CloudFormation AWS SAM또는 HashiCorp Terraform과 같은 제품 및 서비스의 코드형 인프라(IaC)로 표현될 수 있습니다. HashiCorp 한 가지 가능한 문제는 함수에 할당된 역할에 s3:CreateBucket 작업을 허용하는 연결된 정책이 없으므로 클라우드 환경에 배포할 때 함수가 항상 실패한다는 것입니다.
예: Amazon SQS의 메시지를 처리하는 Lambda 함수
Amazon Simple Queue Service(Amazon SQS) 대기열이 Lambda 함수의 소스인 경우 전체 테스트를 통해 메시지가 대기열에 저장될 때 Lambda 함수가 성공적으로 호출되었는지 확인해야 합니다. 에뮬레이션 테스트 및 모의 테스트는 일반적으로 Lambda 함수 코드를 직접 실행하고 JSON 이벤트 페이로드(또는 역직렬화된 객체)를 함수 핸들러의 입력으로 전달하여 Amazon SQS 통합을 시뮬레이션하도록 설정됩니다.
Amazon SQS 통합을 시뮬레이션하는 로컬 테스트는 지정된 페이로드로 Amazon SQS에서 호출할 때 Lambda 함수가 수행할 작업을 테스트하지만, 클라우드 환경에 배포될 때 Amazon SQS가 Lambda 함수를 성공적으로 호출하도록 보장하지는 않습니다.
다음은 Amazon SQS 및 Lambda에서 발생할 수 있는 구성 문제의 몇 가지 예입니다.
-
Amazon SQS 가시성 제한 시간이 너무 짧아 한 번만 의도했는데 여러 번 호출됩니다.
-
Lambda 함수의 실행 역할은 대기열에서 메시지를 읽을 수 없습니다(
sqs:ReceiveMessage,sqs:DeleteMessage또는를 통해sqs:GetQueueAttributes). -
Lambda 함수에 전달된 샘플 이벤트가 Amazon SQS 메시지 크기 할당량을 초과합니다. 따라서 Amazon SQS에서는 해당 크기의 메시지를 전송할 수 없으므로 테스트가 유효하지 않습니다.
이러한 예에서 볼 수 있듯이 비즈니스 로직은 다루지만 클라우드 서비스 간의 구성은 다루지 않는 테스트는 신뢰할 수 없는 결과를 제공할 수 있습니다.