AWS

[AWS] aws 강의 섹션 21-2 ()

대기업 가고 싶은 공돌이 2024. 10. 24. 02:10

람다 함수 - 로깅, 모니터링

  • 람다는 클라우드 워치 로그와 연결되어 있으므로, 람다의 모든 실행 로그는 자동으로 CloudWatch Logs에 저장된다.
  • 단, 람다 함수가 클라우드 워치 로그에 접근할 수 있도록 알맞은 IAM역할이 있어야 한다.
  • 람다의 지표는 클라우드 워치 지표에 표시된다. 
    • 호출, 기간, 동시 실행, 오류 수, 성공률, 병목 현상, 비동기 전송 실패, 반복자 기간 (스트림에서 데이터를 읽어오는 경우)
    •  

 

람다 함수 - X-Ray

  • 람다 함수에서 Active Tracing만 활성화 해주면 x-ray에서 람다를 추적할 수 있다.
  • 활성화 하면 x-ray데모이 실행된다. 
  • 그 후, 코드에 x-ray SDK만 적어주면 된다.
  • 람다 함수에 x-ray를 사용할 수 있는 권한이 있는지 확인해야 한다.

  • x-ray와 소통할 수 있는 환경 변수는 위와 같다. 
  • 가장 중요한 건 마지막 변순데, demon이 실행되는 ip주소와 port번호를 알려준다.

Customization At The Edge

  • 함수와 애플리케이션을 특정한 리전에 배포한다고 배웠는데,
    클라우드 프론트 등을 사용할 때는 엣지 위치에 콘텐츠를 배포하는 경우도 있다.
  • 현대에, 애플리케이션에 도착하기 전에 엣지에서 먼저 로직을 실행해야 하는 경우가 있다.
    • 이를 엣지 함수라고 부른다.
    • 엣지 함수는 클라우드 프론트 배포시 탑재한다.
    • 지연 시간을 최소화하려는 경우에 사용자와 가까운 곳에서 함수를 실행하는 것이다.
  • 클라우드 프론트는 두 가지 함수 유형을 제공한다.
    • 클라우드 프론트 함수와 Labda@Edge이다.
  • 엣지 함수를 사용하면 서버를 관리하지 않아도 되고 글로벌하게 배포된다는 이점이 있다.
  • 사용 사례로는, CDN 컨텐츠를 커스터마이즈 하는 경우가 있다.
  • 사용량에 따라서만 비용을 지불한다.

Use Case

  • 웹 사이트 보안과 개인정보 보호
  • 엣지에서의 동적 웹 애플리케이션
  • 검색 엔진 최적화
  • 오리진과 데이터센터 간 지능형 라우팅
  • 엣지에서의 Bot(사이버 공격) 완화
  • 엣지에서 실시간 이미지 변환
  • A/B 테스트
  • 사용자 인증과 권한 부여
  • 사용자 우선순위 지정
  • 사용자 추적 및 분석

CloudFromt Functions

  • 클라우드 프론트 함수는 다음과 같이 구성된다.
  • 자바 스크립트로 작성한 가벼운 함수이며, 뷰어 요청과 응답을 수정한다.
  • 대기 시간이 중요한 큰 규모의 CDN 커스터마이징에 사용된다.
  • 시작 시간이 밀리초 미만이고, 초당 수백만 개의 요청을 수행할 수 있다.
  • 뷰어 요청 및 응답을 바꾸는 데만 사용된다.
  • 클라우드 프론트의 네이티브 기능이며, 모든 코드가 클라우드 프론트에서 관리된다.

Lambda@Edge

  • 람다 엣지는 Node.js나 파이썬으로 작성되는 함수이고, 요청 수는 초당 수천 회다.
  • 클라우드 프론트 함수보다 더 자세하고 세밀한 제어를 하는 대신 속도가 느리다고 생각하면 된다.
  • 클라우드 프론트의 요청과 응답을 변경하는데 쓰인다.
    • 뷰어 요청, 응답
    • 오리진 요청, 응답
    • 모든 것을 수정할 수 있다.
  • 클라우드 프론트를 관리하는 리전에 함수를 작성하면, 클라우드 프론트에서 이 함수를 모든 위치에 복제한다.

사용 예시

  • 클라우드 함수
    • 캐시 키 정규화
      • 속성을 변경해서 캐시 키 생성에 최적화된 형태로 만든다.
    • 헤더 조작
      • 헤더의 내용을 삽입, 수정 삭제할 수 있다.
    • URL을 재작성 하거나 리디렉션 할 수 있다.
    • 인증이나 인가를 허용 거부 할 수 있다. 
    • 이 모든 것을 1ms 미만으로 수행한다.
  • 람다 엣지
    • 최대 10초까지, 수행 시간이 좀 길다.
    • cpu와 메모리를 조정할 수 있어 라이브러리를 많이 가져오고
    • 코드에 타사 라이브러리를 이용할 수 있다.
    • 파일 시스템에 접근해 처리할 수도 있고
    • http 요청의 바디도 수정할 수 있다. 

Lambda by default

  • 기본적으로 람다함수는 VPC 외부에서 실행된다.
    • 우리가 속한 VPC 말고 AWS 소유의 다른 VPC에서 실행됨
  • 따라서 우리의 VPC에 있는 리소스에는 액세스가 불가능하다.

  • 기본적으로 AWS 클라우드가 있으면 람다 함수는 외부 엔드 포인트와 클라우드 내부 다른 서비스에 접근 가능하다.
  • 하지만 다른 VPC나 프라이빗 서브넷 내부의 서비스에는 접근이 불가능하다.
    • 이 문제는 어떻게 해결할까

람다 in VPC

  • ENI를 만들면 된다.
    • 이를 위해선, VPC ID와 서브넷을 정의하고, 보안 그룹을 람다함수에 배정해야 한다.
    • 그 동안, 람다 함수는 ENI를 생성하는데 엘라스틱 네트워크 인터페이스는 우리가 선택한 서브넷에 생성된다.
      • ENI를 생성하기 위해 AWSLambdaVPCAccessExecutionRole을 필요로 한다.

  • 이 그림을 예시로 보자
  • 람다 함수가 사설 서브넷의 RDS에 접근하기 위해선 ENI가 필요하다
  • 사설 서브넷에 대한 보안그룹 설정이 잘 돼 있으면 내부에 ENI를 만들 수 있다.
  • 이후 RDS가 람다 함수의 접근을 허용하는 보안 그룹 설정이 돼 있다면 람다 함수는 접근을 할 수 있다.

VPC 내부의 람다 함수 - 인터넷 액세스

    • 일반적으로 VPC 내부의 람다 함수는 인터넷 액세스 권한이 없다.
    • 람다 함수를 공용 서브넷에 배포한다고 해도, 인터넷 액세스와 공용 ip접근 권한은 없다.
    • 인터넷 액세스 권한을 얻기 위해선,
      • NAT Gateway, NAT Instance를 사용해야 한다.

  • 다음과 같이 외부 api는 NAT를 거치고 인터넷 게이트웨이를 통해 외부 인터넷과 연결된다. 
  • 클라우드 워치 로그는 예외인데, 람다 함수를 사설 서브넷에 배포해도, 클라우드 워치로 로그를 보내는 데는 아무 문제가 없다.

람다 함수 - Configuration

  • RAM
    • 128MB ~ 10GB를 1MB 단위로 조정해서 사용할 수 있다
    • 더 많은 RAM을 추가하면 더 많은 CPU를 얻게 된다.
      • vCPU의 개수를 직접적으로 설정할 순 없고, 램을 늘려서 cpu를 얻어야 한다.
      • 램이 1729MB에 도달하게 되면, 얻을 수 있는 최대의 vCPU를 갖게 된다.
      • cpu가 1개라도 생긴다면, 멀티 스레딩을 통해 이점을 극대화 할 수 있다.
    • 다시 말해, 애플리케이션이 cpu를 많이 사용하는 무거운 앱이라면, RAM을 증가시켜라
  • TIMEOUT
    • 람다함수는 기본값으로 타임아웃이 3초로 설정돼있다. 최대는 900초다.
      • 람다함수가 실행된지 3초가 넘으면, 함수는 종료되고 오류를 낸다는 것이다.
      • 15분을 넘게 실행되는 애플리케이션이라면, 람다함수를 사용할 게 아니라
        컴퓨팅 리소스를 사용해라
  • Execution context
    • 런타임 환경에서 람다 코드의 외부적 의존성을 의미한다.
    • 이 컨텍스트를 사용해서, 데이터베이스에 접속하고 http 클라이언트나 sdk 클라이언트를 만들 수 있다.
    • 람다 함수의 호출이 여러 번 예상될 때, 잠시 동안 그 컨텍스트가 유지되어 
      기존의 모든 데이터베이스 접속이나, http 클라이언트 등등을 계속 재사용할 수 있다.
      • 컨텍스트에는 /tmp 라는 디렉토리가 있는데
      • 파일을 작성할 수 있는 공간으로, 실행 중 계속 사용 가능하다.

  • 이 컨텍스트 사용 예시를 봐보자
  • 왼쪽은 함수 내부에 데이터베이스 연결 코드를 작성하여, 함수 호출 마다 새로운 데이터베이스 연결이 생성된다.
    • 굉장히 비효율적이다.
  • 오른쪽은 함수 외부에 데이터베이스 연결 코드를 작성하여, 실행 간에 재사용하는 모범 사례로 볼 수 있다.

람다 함수 - tmp 스페이스

  • 사용자 코드를 작성하고 그걸 재사용하려면 tmp 파일을 이용하면 된다.
    • 실행을 위해 매우 큰 파일을 다운로드 해야한다거나
    • 작업을 수행하기 위해 디스크 공간이 필요한 경우에는 그 파일들을 모두 tmp에 저장한다.
  • 10GB까지 저장할 수 있다.
  • 이 파일은 람다 함수가 실행되는 동안에 유지된다. 
  • 람다 함수가 중지되고 다시 호출되어도, tmp에서 똑같은 파일을 다시 불러오면 되니 시간을 절약할 수 있다.
  • 임시 유지 파일이 아닌 영구적으로 유지돼야하는 파일이라면, tmp를 사용하지말고 s3를 사용해라
  • 암호화를 원한다면 람다에서는 암호화 방법이 없고
    • kms 피쳐에서 데이터 키를 생성한 후, kms data 키를 이용해 암호화할 수 있다.