Amazon Web Services 한국 블로그

AWS Lambda 오리진 및 Amazon CloudFront를 활용한 웹 애플리케이션 가속

이 블로그에서는 AWS Lambda 함수 URL 기능을 사용하여 AWS Lambda 함수를 Amazon CloudFront의 오리진으로 정의하는 방법을 배웁니다. Lambda 함수 URL 기능은 AWS 리전에 배포된 Lambda 함수에 대한 전용 HTTPS 엔드포인트를 제공합니다.

함수 URL은 요청 유효성 검사, 트래픽 조정, 인증 및 권한 부여와 같은 고급 기능이 필요하지 않은 공용 엔드포인트로 단일 기능 마이크로서비스를 구현해야 하는 사용 사례에 매우 적합합니다. 예를 들어 웹훅 처리기, 양식 유효성 검사기, 모바일 결제 처리, 광고 배치, 기계 학습 추론 등에 적합합니다.

CloudFront를 사용하여 Lambda 함수 URL 엔드포인트를 전면에 배치하면 전 세계적으로 분산된 콘텐츠 배포 네트워크를 활용하여 최종 사용자에게 더 가까운 위치에 콘텐츠를 캐시할 수 있습니다. 그리고 사용자 정의 도메인 이름을 정의하고 TLS를 통한 HTTPS 전달을 적용할 수도 있습니다. 또한 AWS Web Application Firewall(WAF) 및 AWS Shield Advanced를 활성화하여 악성 봇으로부터 애플리케이션을 보호하고 일반적인 애플리케이션 악용을 방지하며 DDoS 공격에 대한 보호 기능을 강화할 수 있습니다.

콘텐츠 전송 네트워크(CDN) 서비스인 Amazon CloudFront는 콘텐츠 전송을 가속화하고 핵심 애플리케이션의 전반적인 보안 상태를 개선합니다. CloudFront는 전 세계 엣지 로케이션 네트워크를 통해 콘텐츠를 제공합니다. 사용자가 CloudFront를 통해 콘텐츠를 요청하면, 해당 요청은 가장 짧은 지연 시간을 제공하는 엣지 로케이션을 통해 최적의 성능으로 전달됩니다.

더 많은 웹 애플리케이션이 서버리스 및 이벤트 기반 아키텍처를 채택함에 따라, 고객은 이벤트에 대한 응답으로 코드를 실행하고 필요한 컴퓨팅 자원을 자동으로 관리할 수 있는 AWS Lambda를 그들의 컴퓨팅 서비스로 사용합니다. 일반적인 사용 사례에는 실시간 이미지 처리 또는 마이크로서비스용 API가 포함됩니다. 지금까지는 Lambda 함수로 HTTP API를 생성하려면 Amazon API Gateway를 사용하거나 Application Load Balancer를 사용했었습니다. 이제 Lambda 함수 URL이 출시되면서, Lambda 함수에 대한 HTTP API를 빠르게 생성할 수 있습니다.

아키텍처

그림 1: 아키텍처 – Lambda를 오리진으로 사용하는 CloudFront

CloudFront가 Lambda 함수 URL에 오리진으로 연결하는 아키텍처는 간단하고 직관적입니다. Lambda 함수 URL을 생성하면 고유한 URL 엔드포인트가 아래와 같은 형식으로 할당됩니다.

https://<url-id>.lambda-url.<region>.on.aws

이 엔드포인트를 CloudFront에서 오리진으로 설정한 다음, 해당 오리진을 적절한 CloudFront 캐시 동작에 매핑합니다.

설정 연습

먼저 고유한 Lambda 함수 URL 엔드포인트를 가져옵니다.

  1. 함수를 배포하려는 AWS 리전의 AWS Lambda 콘솔로 이동합니다.
  2. Node.js 기반 Lambda 함수를 생성합니다.
  3. 함수 이름을 입력하고 현재 Node.js 런타임을 선택합니다.

    그림 2: Lambda 함수 생성

  4. 고급 설정‘에서 ‘함수 URL 활성화‘ 필드를 체크합니다. Lambda 함수는 공개적으로 접근할 수 있어야 하므로 인증 유형에 대해 ‘NONE‘을 선택합니다. 이는 또한 해당 함수에 대한 공개 접근을 허용하는데 필요한 자원 기반 정책을 생성합니다.

    그림 3: 함수 URL 활성화

  5. 함수 생성‘을 클릭하면 함수 생성 설정이 완료됩니다.
    이 연습에서는 호출 시 ‘Hello from Lambda!’를 출력하는 생성된 기본 코드 템플릿을 사용합니다.
  6. 함수 URL을 가져오려면 ‘구성‘ 탭으로 이동하여 다음 스크린샷과 같이 ‘함수 URL‘을 선택합니다.

    그림 4: 함수 URL 가져오기

    직사각형 상자에 강조 표시된 함수 URL 엔드포인트을 기록해 둡니다. 링크를 클릭하여 기본 출력인 ‘Hello from Lambda!’를 확인하십시오.
    참고: 기존 Lambda 함수가 있는 경우 다음 스크린샷에 강조 표시된 것처럼 ‘구성’ 탭으로 이동하여 ‘함수 URL’을 선택하고 ‘함수 URL 생성’을 클릭하여 함수 URL 엔드포인트를 활성화할 수 있습니다.

    그림 5: 기존 Lambda 함수에서 함수 URL 활성화

    함수 URL 기능에 대한 자세한 내용은 https://docs.thinkwithwp.com/lambda/latest/dg/lambda-urls.html을 참조하십시오.

다음으로 Amazon CloudFront 구성을 생성합니다.

이 예에서는 CloudFormation 템플릿을 배포하여 Lambda 함수를 오리진으로 사용하여 간단한 CloudFront 구성을 설정합니다.

  1. us-east-1 AWS 리전에서 CloudFormation 스택을 시작합니다.
  2. 아래 스크린샷과 같이 이전에 얻은 함수 URL을 ‘매개변수‘ 섹션 ‘Lambda 함수 엔드포인트‘ 필드에 입력합니다.

    그림 6: CloudFormation 템플릿을 사용하여 Lambda를 오리진으로 하는 CloudFront 설정

    입력 시에, 함수 URL에서 https:// 및 후행 슬래시를 제거하십시오.

  3. CloudFormation 템플릿이 배포되면 CloudFormation 스택의 ‘출력‘ 탭으로 이동하여 생성된 기본 CloudFront 도메인 이름에 접근합니다. 접근했을 때 ‘Hello from Lambda!’ 응답이 표시되어야 합니다.

    그림 7: CloudFormation 출력 – 생성된 CloudFront 자원

    CloudFormation 템플릿은 Lambda 함수를 오리진으로 사용하는 CloudFront 배포를 생성합니다. 오리진은 Lambda 함수 URL 엔드포인트를 가리키며 모든 요청을 처리하기 위한 기본 캐시 동작과 연결됩니다. CloudFront 동작은 ‘Managed-CachingOptimized‘ 캐시 정책을 사용하고 오리진의 응답은 CloudFront에서 캐시됩니다.

새 캐시 정책을 정의하고 이를 캐시 동작에 연결하여 쿼리 문자열, 헤더 및 쿠키를 기반으로 캐시하고 이를 Lambda 함수에 전달하도록 CloudFront 설정을 확장시킬 수도 있습니다.

CloudFront 의 오리진 설정의 일부로, 오리진에 요청하기 전에 정적 비밀 헤더를 설정하여 오리진 요청에 삽입시킬 수 있습니다. 이를 통해 Lambda 함수에서 해당 비밀 헤더를 확인하여 요청이 CloudFront를 통해 전송되고 있는지 확인할 수 있습니다. 사용자 지정 Origin 헤더 설정에 대한 자세한 내용은 https://docs.thinkwithwp.com/AmazonCloudFront/latest/DeveloperGuide/add-origin-custom-headers.html을 참조하십시오.

이런 변경 사항이 생기면, 생성되어 있는 기본 CloudFront 도메인에 접근하여 Lambda 함수에서 보낸 응답을 확인할 수 있습니다.

결론

지금까지 Lambda 함수 URL 엔드포인트를 설정하는 방법과 이를 Amazon CloudFront 배포의 오리진으로 활용하는 방법을 배워보았습니다. AWS Lambda 함수 URL기능을 Amazon CloudFront와 함께 구성하여 활용한다면, 콘텐츠를 최종 사용자에게 더 가깝게 캐싱하여 웹 애플리케이션을 가속화할 수 있고, 콘텐츠를 대상 고객에게 안전하게 전달할 수 있게 해줄 것입니다. 자세한 내용은 CloudFront 개발자 안내서를 참조하십시오.

– Jaiganesh Girinathan, AWS Solutions Architect

– Samrat Karak, AWS Product Manager

이 글은 AWS Networking & Content Delivery Blog의 Using Amazon CloudFront with AWS Lambda as origin to accelerate your web applications를 이갑인 AWS 엣지 서비스 스페셜리스트  Solutions Architect가 한국어로 번역한 글입니다.