inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실무에서 사용하는 클라우드 보안 프로그래밍 (AWS, Python, Terraform)

4.10. 스테이트, 아웃풋, 람다 동작 방식 간단 소개

람다 캐싱 질문

해결된 질문

204

형빈

작성한 질문수 13

1

안녕하세요. 4-10 강의를 보고 질문드립니다.

람다는 stateless 방식으로 실행된다고 알고 있었는데, 전역 변수가 캐싱이 된다고 설명해주신 이유는 해당 프로젝트 같은 경우 모든 알람이 발생할때마다 실행되니, coldstart가 발생하지 않는다라는걸 전제하에 말씀해주신걸까요? 아니면 람다 자체에서 내부적으로 어떠한 동작에 의해 캐싱이 이루어지는건가요?

===

이 프로젝트는 모든 알람이 발생할 때마다 람다가 실행되니 coldstart로 응답이 느려질거 같진 않은데요, 만약 5~10분마다 실행되는 람다 함수라면 coldstart에 대한 대책으로 3분정도 주기마다 eventbridge로 람다를 트리거해주는 것도 방법이 될까요?

python aws Terraform devsecops

답변 1

1

천강민

안녕하세요!

마침 집에 있어서 바로 답변 드릴 수 있네요.

일단, 링크의 내용을 참고하면 아래와 같은 내용이 있습니다.

To improve resource management and performance, the Lambda service retains the execution environment for a non-deterministic period of time.

간단히 얘기해서, "정해진 시간은 없지만, 리소스 관리와 성능 개선을 위해 실행 환경을 유지한다."라는 거죠.

람다는 등록된 핸들러를 실행하는 것이기 때문에 핸들러 외부에 전역 변수로 선언된 부분은 위 조건이 유지되는 동안에는 다시 호출이 되지 않습니다.(효율 향상)

그렇기 때문에, 지속적으로 호출이 필요하지 않은 시크릿 저장, 커넥션 풀 유지 등은 외부로 빼면 좋다는 거였구요.(물론 이렇게 선언한 변수가 소켓이라면 핸들러 내부에서 close 하면 안됩니다. 환경이 유지되는 동안은 전역적으로 선언된 내용이 다시 실행되지 않으므로.)

The broader serverless community provides open source libraries to “warm” Lambda functions via a pinging mechanism. This approach uses EventBridge rules to schedule invocations of the function every minute to help keep the execution environment active.

추가로 위와 같이 이벤트브릿지를 통해 매번 환경을 워밍 상태로 만드는 것도 소개되어 있습니다.(링크에도 표현되어 있지만 동시성이 늘어나게 되면, 보장 받을 수 있는 방법도 아니고 효율도 낮아질 순 있습니다.)

 

마지막으로 질문 주신 내용에 대해서는, 람다는 리전에 따라 다르지만 하루에 최소 1번은 무조건 환경이 초기화 되기 때문에(제 경험상 서울 리전은 2 ~ 3시간에 1번씩은 초기화 됐던 것 같아요.), 말씀하신 방법이 보장되는 방법은 아닙니다.(그래도 조금 더 빠르긴 하겠죠?)

 

결론적으로, 설명의 편의성을 위해 "캐싱"이라는 단어를 사용했지만 정확하게는 캐싱의 개념은 아닙니다.

조금 더 정확히 설명드리면,

"test.handler 라고 등록되어 있는 핸들러를 실행하고 난 뒤, 효율성을 위해 내부 컨테이너(=람다)를 죽이지 않고 일정 시간 유지하고 있기 때문에 전역 변수가 유지된다." 라고 봐주시면 좋을 것 같습니다.

위 동작을 테스트 해보고 싶으시면, 링크를 참고하셔서 실제 환경을 구성해보시면 어떤 의미인지 체감이 되실거라고 생각합니다.

0

천강민

3분 정도면에 대해서는 정확히 보장되는 내용이 없어서 답변 드리기가 어렵지만, 제 경험상 1분으로 하면 전체 리셋이 되기 전에는 잘 동작했던 것 같습니다!

작업형 1 (삭제예정, 구 버전)

0

6

0

강의노트는 어디있나요?

0

2

0

노션 학습 자료 권한 요청

0

8

1

.terraform, .terraform.lock.hcl 파일이 생성되지 않는 현상

0

75

2

섹션 4 프로젝트 코드

1

83

1

mysql 접속 에러

0

106

1

default tags , 리소스에 tags 중복 문의

1

209

1

테라폼으로 람다 형상 관리 방법

1

306

1

강의 순서 문의

1

217

1

webhook 단점

1

240

1

for_each 사용 시 key를 가져오는 기준

1

251

2

ModuleNotFoundError: No module named 'pprint' 에러

1

250

1

모듈 vs 리소스

1

215

1

s3 bucket 생성 에러

1

316

1

terraform import 관련 질문

1

209

1

generate expression 사용 예시

1

194

1

boto3 라이브러리 사용 시 에러

1

248

1

boto3 사용자 생성 질문입니다.

1

408

2

pip로 패키지를 설치했음에도 import 오류가 납니다. 어떻게 해야 할까요?

0

660

1

3.2. 왜 리소스 기반 정책은 Deny로 해야되나요? 부분이 잘 이해되지 않습니다.

1

370

2

제상황을 좀 더 자세히 적겠습니다.

0

585

1

영상을 아무리 찾아봐도

0

399

1

질문입니다

0

355

1

질문입니다

0

1003

1