Visual Studio Code로 Lambda 함수 원격 디버깅하기
Visual Studio Code로 Lambda 함수 원격 디버깅하기 (Remotely debug Lambda functions with Visual Studio Code)
AWS Toolkit for Visual Studio Code의 원격 디버깅 기능으로 AWS 클라우드에서 직접 실행되는 Lambda 함수를 디버깅할 수 있어요. 로컬에서 재현하기 어렵거나 로그만으로는 진단하기 어려운 문제를 조사할 때 유용해요.
원격 디버깅으로 다음을 할 수 있어요.
- Lambda 함수 코드에 중단점(breakpoint) 설정
- 코드 실행을 실시간으로 단계별 진행(step)
- 런타임 중 변수와 상태 검사
- VPC 안이나 특정 IAM 권한이 있는 함수를 포함해 AWS에 배포된 Lambda 함수 디버깅
본문
지원되는 런타임
원격 디버깅은 다음 런타임을 지원해요.
- Python(AL2023)
- Java
- JavaScript/Node.js(AL2023)
참고
원격 디버깅은 x86_64와 arm64 아키텍처를 모두 지원해요.
보안과 원격 디버깅
원격 디버깅은 기존 Lambda 보안 경계 안에서 작동해요. 사용자는 UpdateFunctionConfiguration 권한으로 함수에 레이어를 연결할 수 있는데, 이 권한은 이미 함수 환경 변수와 구성에 접근할 수 있어요. 원격 디버깅은 이런 기존 권한을 넘어 확장되지 않아요. 대신 보안 터널링과 자동 세션 관리로 추가 보안 제어를 제공해요. 원격 디버깅은 전적으로 고객이 제어하는 기능이며 명시적인 권한과 작업이 필요해요.
- IoT 보안 터널 생성: AWS Toolkit은 사용자가
iot:OpenTunnel로 명시적으로 허용할 때만 IoT 보안 터널을 생성해요. - 디버그 레이어 연결과 토큰 관리: 디버깅 프로세스는 다음 제어로 보안을 유지해요.
- 디버깅 레이어는 Lambda 함수에 연결되어야 하며 이 과정에는
lambda:UpdateFunctionConfiguration과lambda:GetLayerVersion권한이 필요해요. - 각 디버그 세션 전에 함수 환경 변수의 보안 토큰(
iot:OpenTunnel으로 생성)을 업데이트해요. 이 단계에도lambda:UpdateFunctionConfiguration이 필요해요. - 보안상 이 토큰은 자동으로 순환되고, 디버그 레이어는 각 디버그 세션 종료 시 자동으로 제거되어 재사용할 수 없어요.
- 디버깅 레이어는 Lambda 함수에 연결되어야 하며 이 과정에는
사전 요구 사항
원격 디버깅을 시작하기 전에 다음이 있는지 확인하세요.
- AWS 계정에 배포된 Lambda 함수
- AWS Toolkit for Visual Studio Code(설치 방법은 설치 안내 참고)
- 설치한 AWS Toolkit 버전 3.69.0 이상
- AWS Toolkit for Visual Studio Code에 구성된 AWS 자격 증명
Lambda 함수 원격 디버깅하기
원격 디버깅 세션을 시작하려면 다음 단계를 따르세요.
- VS Code 왼쪽 사이드바의 AWS 아이콘을 선택해 AWS Explorer를 엽니다.
- Lambda 섹션을 펼쳐 함수를 확인합니다.
- 디버깅하려는 함수의 컨텍스트 메뉴를 엽니다.
- 컨텍스트 메뉴에서 Remotely invoke를 선택합니다.
- 열린 invoke 창에서 Enable debugging 체크박스를 선택합니다.
- Invoke를 클릭해 원격 디버깅 세션을 시작합니다.
참고
Lambda 함수는 함수 코드와 연결된 모든 레이어에 대해 250MB 결합 제한이 있어요. 원격 디버깅 레이어는 함수 크기에 약 40MB를 추가해요.
원격 디버깅 세션은 다음 중 하나를 하면 종료됩니다.
- Remote invoke 구성 화면에서 Remove Debug Setup 선택
- VS Code 디버깅 컨트롤의 연결 끊기(disconnect) 아이콘 선택
- VS Code 편집기에서 핸들러 파일 선택
참고
마지막 호출 후 60초의 비활성 시간이 지나면 디버그 레이어가 자동으로 제거돼요.
원격 디버깅 비활성화
이 기능을 비활성화하는 방법은 세 가지가 있어요.
- 함수 업데이트 거부:
lambda:UpdateFunctionConfiguration을 deny로 설정 - IoT 권한 제한: IoT 관련 권한 deny
- 디버그 레이어 차단: 다음 ARN에 대해
lambda:GetLayerVersion을 denyarn:aws:lambda:*:*:layer:LDKLayerX86:*arn:aws:lambda:*:*:layer:LDKLayerArm64:*
참고
이 기능을 비활성화하면 함수 구성 업데이트 중 디버깅 레이어가 추가되지 않도록 방지해요.
추가 정보
VS Code에서 Lambda 사용에 대한 자세한 내용은 VS Code로 Lambda 함수 로컬 개발을 참고하세요. 문제 해결, 고급 사용 사례, 리전 가용성에 대한 자세한 지침은 AWS Toolkit for Visual Studio Code 사용자 안내서의 원격 디버깅 Lambda 함수를 참고하세요.