F5에서 AWS의 Application Load Balancer로 마이그레이션할 때 HTTP 헤더를 수정 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

F5에서 AWS의 Application Load Balancer로 마이그레이션할 때 HTTP 헤더를 수정

작성자: Sachin Trivedi(AWS)

환경: PoC 또는 파일럿

소스: 온프레미스

대상: AWS 클라우드

R 유형: 리플랫포밍

워크로드: 기타 모든 워크로드

기술: 네트워킹, 하이브리드 클라우드, 마이그레이션

AWS 서비스: 아마존 CloudFront, 엘라스틱 로드 밸런싱 (ELB), AWS Lambda

요약

F5 로드 밸런서를 사용하는 애플리케이션을 Amazon Web Services(AWS)로 마이그레이션하고 AWS에서 Application Load Balancer를 사용하려는 경우, 헤더 수정을 위한 F5 규칙을 마이그레이션하는 것은 일반적으로 발생하는 문제입니다. Application Load Balancer는 헤더 수정을 지원하지 않지만 Amazon을 CDN (콘텐츠 전송 네트워크) CloudFront 으로 사용하고 Lambda @Edge 를 사용하여 헤더를 수정할 수 있습니다.

이 패턴은 필요한 통합을 설명하고 AWS CloudFront 및 Lambda @Edge 를 사용하여 헤더를 수정하기 위한 샘플 코드를 제공합니다.

사전 조건 및 제한 사항

사전 조건 

  • if, else를 사용하여 HTTP 헤더 값을 대체하는 구성을 갖춘 F5 로드 밸런서를 사용하는 온프레미스 애플리케이션입니다. 이 구성에 대한 자세한 내용은 F5 제품 설명서의 HTTP::header를 참조하세요. 

제한 사항

  • 이 패턴은 F5 로드 밸런서 헤더 사용자 지정에 적용됩니다. 다른 타사 로드 밸런서의 경우 해당 로드 밸런서 설명서에서 지원 정보를 확인하세요.

  • Lambda@Edge에 사용하는 Lambda 함수는 미국 동부(버지니아 북부) 리전에 있어야 합니다.

아키텍처

다음 다이어그램은 CDN과 다른 AWS 구성 요소 간의 통합 흐름을 포함하여 AWS의 아키텍처를 보여줍니다.

Amazon CloudFront 및 Lambda @Edge 를 사용한 헤더 수정 아키텍처

도구

서비스

  • Application Load Balancer ─ Application Load Balancer는 오픈 시스템 상호 연결(OSI) 모델의 일곱 번째 계층에서 작동하는 AWS의 완전 관리형 로드 밸런싱 서비스입니다. 여러 대상에 걸쳐 트래픽을 분산하고 HTTP 헤더 및 메서드, 쿼리 문자열, 호스트 기반 또는 경로 기반 라우팅을 기반으로 고급 라우팅 요청을 지원합니다.

  • Amazon CloudFront — CloudFront Amazon은.html, .css, .js, 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 빠르게 배포하는 웹 서비스입니다. CloudFront 지연 시간을 줄이고 성능을 향상시키기 위해 엣지 로케이션이라고 하는 전 세계 데이터 센터 네트워크를 통해 콘텐츠를 전송합니다.

  • Lambda @Edge ─ Lambda @Edge 는 함수를 실행하여 제공하는 콘텐츠를 사용자 지정할 수 있게 해주는 AWS Lambda의 확장 프로그램입니다. CloudFront 미국 동부 (버지니아 북부) 지역에서 함수를 작성한 다음 이 함수를 CloudFront 배포와 연결하여 서버를 프로비저닝하거나 관리하지 않고도 코드를 전 세계에 자동으로 복제할 수 있습니다. 이렇게 하면 지연 시간이 줄어들고 사용자 경험이 향상됩니다.

코드

다음 샘플 코드는 응답 헤더를 수정하기 위한 청사진을 제공합니다. CloudFront 에픽 섹션의 지침에 따라 코드를 배포하세요.

exports.handler = async (event, context) => {     const response = event.Records[0].cf.response;     const headers = response.headers;     const headerNameSrc = 'content-security-policy';     const headerNameValue = '*.xyz.com';     if (headers[headerNameSrc.toLowerCase()]) {         headers[headerNameSrc.toLowerCase()] = [{             key: headerNameSrc,             value: headerNameValue,         }];         console.log(`Response header "${headerNameSrc}" was set to ` +                     `"${headers[headerNameSrc.toLowerCase()][0].value}"`);     }     else {             headers[headerNameSrc.toLowerCase()] = [{             key: headerNameSrc,             value: headerNameValue,             }];     }     return response; };

에픽

작업설명필요한 기술
웹 배포를 만드세요. CloudFront

이 단계에서는 CloudFront 배포를 생성하여 콘텐츠를 전송할 CloudFront 위치를 지정하고 콘텐츠 전달을 추적하고 관리하는 방법에 대한 세부 정보를 제공합니다.

콘솔을 사용하여 배포를 생성하려면 AWS Management Console에 로그인하고 CloudFront 콘솔을 연 다음 CloudFront 설명서의 단계를 따르십시오.

클라우드 관리자
작업설명필요한 기술
Lambda@Edge 함수를 생성하고 배포합니다.

응답 헤더를 수정하기 위한 블루프린트를 사용하여 Lambda @Edge 함수를 생성할 수 있습니다. CloudFront (사용 사례별로 다른 블루프린트를 사용할 수 있습니다. 자세한 내용은 설명서의 Lambda @Edge 예제 함수를 참조하십시오.) CloudFront  

Lambda@Edge 함수를 생성하려면:

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/lambda/에서 AWS Lambda 콘솔을 엽니다.

  2. 미국 동부 (버지니아 북부) 지역에 있는지 확인하십시오. CloudFront 블루프린트는 이 지역에서만 사용할 수 있습니다.

  3. 함수 생성을 선택합니다.

  4. 청사진 사용을 선택한 다음 청사진 검색 필드에 cloudfront를 입력합니다. 

  5. cloudfront-modify-response-header블루프린트를 선택한 다음 구성을 선택합니다.

  6. 기본 정보 페이지에서 다음 정보를 입력합니다.

    1. 함수 이름을 입력합니다.

    2. 실행 역할에서 AWS 정책 템플릿에서 새 역할 생성를 선택합니다.

    3. 필수 AWS Identity and Access Management(IAM) 역할 이름을 연결합니다.

  7. 함수 생성을 선택합니다.

  8. 해당 페이지의 디자이너 섹션에서 함수 이름을 선택합니다.

  9. 함수 코드 섹션에서 템플릿 코드를 코드 섹션에 있는 이전에 이 패턴에 제공된 샘플 코드로 교체합니다.

  10. 샘플 코드에서 xyz.com을 사용자 도메인 이름으로 바꿉니다. 

  11. 저장을 선택합니다.

AWS 관리자
Lambda@Edge 함수를 배포합니다.

Amazon 설명서의 4단계: CloudFront Amazon 설명서에 있는 간단한 Lambda @Edge 함수 생성의 지침에 따라 트리거를 구성하고 함수를 CloudFront 배포하십시오.

관리자

관련 리소스

CloudFront 설명서