AWS(Amazon Web Service)

[AWS] 솔루션 설계자 관점의 Serverless - Lambda in VPC

yunseohhe 2024. 12. 12. 22:47

Lambda by default

  • 기본적으로 Lambda 함수를 시작하면 우리의 VPC 외부에서 시작된다.
      - VPC는 AWS가 제공하는 서비스이다.
  • 우리는 VPC내에서 리소스에 액세스할 권한이 없다.
  • RDS 데이터베이스, ElastiCache 캐시 내부 로드 밸런드를 시작하면 Lambda 함수가 해당 서비스에 액세스 할 수 없다.
      - Lambda 배포의 기본 설정이다.
  • 인터넷의 퍼블릭 API에 액세스하는 것은 가능하다.
  • DynamoDB에 액세스 할 수 있는 건 DynamoDB가 AWS 클라우드의 퍼블릭 리소스이기 때문이다.
      - 하지만 프라이빗 RDS 데이터베이스에는 연결할 수 없다.

 

Lambda in VPC

  • 위를 해결하려면 우리의 VPC에서 Lambda 함수를 시작하면 된다.
  • 이를 위해서는 VPC ID Lambda 함수를 시작하려는 서브넷을 지정하고 Lambda 함수에 보안 그룹을 추가해야 한다.
  • 그러면 Lambda가 서브넷에 엘라스틱 네트워크 인터페이스를 생성해 우리의 VPC에서 실행되는 가령 Amazon RDS에 액세스할 수 있게 된다.
  • 이렇게 하면 VPC 내 모든 항목에 비공개로 연결할 수 있다.

 

 

Lambda with RDS Proxy

  • VPC에서 Lambda를 사용하는 대표적인 사용사례는 'RDS Proxy'이다.
  • RDS 데이터베이스가 프라이빗 서브넷에 있어도 Lambda 함수로 직접 해당 DB에 액세스 할 수 있다.
      - 이런 방법으로 RDS 데이터베이스에 직접 액세스하면 큰 문제가 발생하게 된다.
      - Lambda 함수의 수가 너무 많이 생성되었다 사라지길 반복하면 개방된 연결이 너무 많아서 RDS 데이터베이스의 로드가 상승해 시간 초과등의 문제로 이어진다.
  • 해결하는 방법은 RDS 프록시를 시작하는 것이다.
      - 이 프록시가 연결을 한 곳으로 모으고 RDS 데이터베이스 인스턴스 연결의 수를 줄인다.
  • Lambda 함수가 RDS 프록시에 연결되고 RDS 프록시가 RDS DB 인스턴스로 연결되므로 아키텍처상의 문제가 해결된다.
  • 장점
      - 데이터베이스 연결의 풀링과 공유를 통해 확장성을 향상시킨다.
      - 장애가 발생할 경우, 장애 조치 시간을 66%까지 줄여 가용성을 향상시키고 연결을 보존한다.
      - RDS와 Aurora 모두에 적용된다.
      - RDS 프록시 수준에서 IAM 인증을 강제하여 보안을 높일 수 있다.
      - 자격 증명은 Secrets Manager에 저장된다.
  • Lambda 함수가 RDS 프록시에 연결할 수 있으려면 우리의 VPC에서 Lambda 함수를 시작해야 한다.
  • RDS 프록시는 퍼블릭 액세스가 불가능하므로 Lambda 함수를 퍼블릭으로 시작하면 RDS 프록시에 네트워크 연결을 할 수가 없다.