AWS serverless 모델 중 하나이자 대표격인 Lambda를 사용하다가 불만이 생겼다. "단위테스트를 좀 더 편하게 할만한 방법이 없을까?", "꼭 AWS에 올려놓고 테스트해야 하나?" 등이었다. 물론 AWS에 올려서 테스트해도 된다. 하지만 로컬의 IDE에서 debugging하는 것 만큼 편하지 않다.
AWS의 샘플코드인 아래 코드를 복붙하여, 보통 메인함수 실행시키듯 로컬에서 실행시키면 다음과 같은 에러가 발생한다.
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
type MyEvent struct {
Name string `json:"name"`
}
func HandleRequest(_ context.Context, name MyEvent) (string, error) {
return fmt.Sprintf("Hello %s!", name.Name), nil
}
func main() {
lambda.Start(HandleRequest)
}
# Error 내용
2023/05/17 11:23:00 expected AWS Lambda environment variables [_LAMBDA_SERVER_PORT AWS_LAMBDA_RUNTIME_API] are not defined
Exiting.
선택지
2023-05-17 기준(갱신 내용은 원문 참조)
- IDE(VSCode, Jetbrains 제품) + AWS Toolkit 플러그인
- AWS Cloud9
장점 | 단점 | |
---|---|---|
IDE | - 익숙한 도구를 사용할 수 있음 - 보통 인터넷 연결과 무관하게 개발 가능 - 빠른 반응속도 | - 높은 H/W, S/W 의존성(컴퓨터 바꾸면, 개발환경 셋팅 다시 해야 함. OS가 바뀌는 경우 최악) |
Cloud9 | - AWS 도구들과 높은 통합성 - 하드웨어와 무관하게 개발 가능 | - 네트워크에 높은 의존성(네트워킹 규칙/상황에 따라, 개발 환경에 접속이 불가하거나 끊길 수 있음) - EC2 등 원격 서버 이용 비용 발생 |
참고로 Cloud9
은 AWS가 만든 브라우저 환경에서 동작하는 IDE다. AWS가 직접 만들었으니, 장기적으로 봤을 때 통합성, 사용성 측면에서 Cloud9
이 좋은 선택지일 수 있다. 하지만 나의 경험은 아직까진 browser 환경에서의 IDE가 local application IDE보다 나은 경우를 겪지 못했기에, 조금 보수적으로 접근했다.
+ EC2와 코드를 저장할 H/W비용까지 고려하여 딱히 쓸 이유를 못 느꼈던 것도 사실이다. 나는 이미 Jetbrains 제품을 구독 중이기에... 만약 IDE를 구독하지 않았다 거나, github 등이 아닌 private 리포지토리를 자주 이용하는 경우, 괜찮은 선택지였을 것 같다.
AWS Toolkit 이용하기
AWS Toolkit 설치
원하는 IDE에서 AWS Toolkit을 설치한다. 이 문서에 어떤 IDE를 지원하고 있는지 나와있다.
설치가 끝났다면, Run/Debug Configurations에서 +버튼을 눌러, AWS Lambda가 추가되었는지 확인해본다.
AWS Lambda로 실행하기
초록색 화살표를 클릭 > Debug > [Local] main을 눌러서 실행해본다.
Local AWS API gateway resource 연동
이 문서를 참조
계층화된 어플리케이션을 로컬에서 디버깅하려면 학습해야할 게 참 많다.
Troubleshooting - Credentials 에러
Error: Select AWS credentials in 'AWS Connection'
와 같은 에러가 나는 경우, configuration settings > AWS Connection > credentials를 확인한다.
이렇게 선택가능한 옵션들이 제공될텐데, 만약 없다면, aws CLI에 configuration이 없는 거다.
`aws configure`명령어를 터미널에서 입력하여, AWS key와 AWS secret을 입력해주고, Configuration settings를 다시 켜면, 옵션이 뜰 것이다.
Troubleshooting - Could not find public.ecr.aws/lambda/go 에러
Error: Could not find public.ecr.aws/lambda/go:1-rapid-x86_64 image locally and failed to pull it from docker.
위와같은 에러를 만났다면, SAM CLI탭에서 Build function inside a container 옵션을 체크해준다. 보통 이미지가 없으면, 알아서 이미지를 pull하여 사용하는데, 최초엔 registry 등의 문제로 잘 동작하지 않는 듯하다.
이후, Run 버튼으로 빌드하게 되면 도커이미지가 로컬에 추가된다.
이후에는 Build function inside a container 옵션을 꺼도, 잘 동작한다.
그래서 AWS Lambda로 Debugging 방법은?
AWS lambda는 애초에 docker에 의존적이므로, local이라 하더라도 breakpoint를 활용하기 쉽지 않았다. 이 부분은 나중에 기회가 되면, 해결하고 새 글로 작성 예정이다.
'IT' 카테고리의 다른 글
shell script 퍼포먼스 측정 방법 (0) | 2023.11.06 |
---|---|
Bun(JS) 1.0.4 ConnectionRefused Error (0) | 2023.11.05 |
Go 단위 테스트 방법 (0) | 2023.05.04 |
C++ 테스트 환경 구축 - CLion에서 Google Test 연동, 사용 방법(with cmake) (0) | 2023.04.17 |
GPT-4의 등장과 개발 방법론의 변화 예측 (0) | 2023.04.04 |