CloudFront Agent
개요
NetFUNNEL CloudFront 에이전트는 AWS Lambda@Edge에서 NetFUNNEL 서버와 통신하는 NetFUNNEL 전용 클라이언트입니다.
IAM 설정
IAM 역할 생성
- AWS의 IAM 콘솔로 이동하세요.
- [역할]을 클릭한 다음 [역할 생성]을 클릭합니다.
- 신뢰할 수 있는 엔터티로 AWS 서비스를 선택하고 사용 사례로 Lambda를 선택합니다.
- [다음: 권한]을 클릭하세요.
Trust Entity 설정
- 역할을 생성한 후 [Trust Entity] 탭으로 이동합니다.
- Trust Entity를 편집하고 아래의 JSON을 붙여넣습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"edgelambda.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
정책 첨부
- 역할의 [권한] 탭으로 이동하세요.
- [권한 추가]를 클릭한 다음 [인라인 정책 만들기]를 클릭합니다.
- JSON 탭에 아래의 정책을 붙여넣습니다. (이 정책을 사용하면 Lambda 함수가 CloudWatch 로그를 생성하고 쓸 수 있습니다.)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
Lambda 함수 생성
Lambda 함수는 us-east-1(N. Virginia) 리전에서 만들어야 합니다. 이는 AWS의 요구 사항으로, 이 리전은 함수를 전 세계적으로 복제하기 위한 중앙 위치 역할을 하기 때문입니다.
- us-east-1 지역의 Lambda 콘솔로 이동합니다.
- [함수 생성]을 클릭하세요.
- [처음부터 작성]을 선택하세요.
- 함수에 이름을 지정합니다. (예: "netfunnel-agent")
- 런타임으로 Node.js를 선택하세요.
- Step 1에서 위에서 생성한 IAM 역할을 선택하세요.
- [함수 생성]을 클릭하세요.
Lambda 함수 설정
- https://agent-lib.stclab.com/agents/cdn/cloudfront/netfunnel-cloudfront-agent-latest.js 에서 netfunnel-cloudfront-agent.js 파일을 다운받으세요.
- [코드] 탭에서 코드 소스에 netfunnel-cloudfront-agent.js 파일을 넣어주세요.
- index.mjs 파일을 열고 아래 코드를 참고해 작성해주세요.
CLIENT_ID는 NetFUNNEL 콘솔에서 확인하세요.
import handleEvent from './netfunnel-cloudfront-agent.js';
const config = {
clientID: "{{CLIENT_ID}}",
}
export const handler = async (event) => {
return await handleEvent(event, config)
};
- package.json 파일을 생성하고 아래 코드를 붙여넣습니다.
{
"name": "cloudfront-agent",
"type": "module",
"dependencies": {}
}
- 작성을 완료하면 [Deploy] 버튼을 눌러주세요.
- [버전] 탭으로 가서 [새 버전 발행]을 눌러주세요.
CloudFront 설정
CloudFront에 Lambda@Edge 연결
- Lambda@Edge를 적용할 CloudFront ID를 선택합니다.
- [동작] 탭에서 항목을 선택하고 [편집]을 누릅니다.
- 제일 하단의 함수 연결에서 뷰어 요청과 뷰어 응답에 위에서 생성한 람다 함수의 arn를 입력하세요. 뒤에 버전명을 꼭 넣어주세요. (버전이 1일 경우 :1 을 추가하면 됩니다.)
- [변경 사항 저장]을 클릭합니다.
CloudFront 무효화
- [무효화] 탭으로 이동하여 [무효화 생성]을 클릭합니다.
- 객체 경로에 /* 을 입력하고 [무효화 생성]을 클릭합니다.
- 무효화가 완료되면 CloudFront에 Lambda@Edge의 연결이 적용됩니다.
부가 기능
Good Bot 예외 처리
Lambda 설정을 통해 특정 User-Agent 값이 포함되어 있을 경우 에이전트 동작으로부터 예외 처리할 수 있습니다.
Lambda 설정
- NetFUNNEL 에이전트를 적용한 Lambda 함수를 엽니다.
- index.mjs 파일을 엽니다.
- 아래 코드를 참고하여
config객체의goodBots에 추가하고자 하는 굿 봇의User-Agent값을 배열로 넣습니다.
Google, Microsoft, Yahoo, Apple, Facebook 봇을 예외 처리한 예시 코드입니다.
const config = {
...
goodBots: ["Googlebot", "Bingbot", "Slurp", "Applebot", "facebookexternalhit"],
}
- 작성을 완료하면 [Deploy] 버튼을 눌러주세요.
- [버전] 탭으로 가서 [새 버전 발행]을 눌러 버전을 업데이트해주세요.
CloudFront 설정
- Lambda@Edge를 적용한 CloudFront ID를 선택합니다.
- [동작] 탭에서 항목을 선택하고 [편집]을 누릅니다.
- 하단의 함수 연결에서 뷰어 요청과 뷰어 응답을 새 버전으로 수정해주세요.
- [변경 사항 저장]을 클릭합니다.
진입 키 자동 반납 처리
NetFUNNEL CloudFront 에이전트는 진입 후 넷퍼넬 키를 자동으로 반납하여 다음 대기자가 진입할 수 있도록 처리하고 있습니다. 만약, 넷퍼넬 키를 바로 반납하지 않고 세그먼트에서 설정한 타임아웃 시간에 넷퍼넬 키를 반납하고 싶은 경우에 사용할 수 있는 기능입니다.
Lambda 설정
- NetFUNNEL 에이전트를 적용한 Lambda 함수를 엽니다.
- index.mjs 파일을 엽니다.
- 아래
config객체의returnKey에 진입 키 자동 반납 여부를 입력합니다.
const config = {
...
returnKey: true,
}
true(기본값)로 할 경우, 대기 완료 및 진입 후 에이전트에서 넷퍼넬 키를 자동으로 반납합니다. false로 할 경우 세그먼트에서 설정한 타임아웃 시간에 키가 반납 처리됩니다.
- 작성을 완료하면 [Deploy] 버튼을 눌러주세요.
- [버전] 탭으로 가서 [새 버전 발행]을 눌러 버전을 업데이트해주세요.
CloudFront 설정
- Lambda@Edge를 적용한 CloudFront ID를 선택합니다.
- [동작] 탭에서 항목을 선택하고 [편집]을 누릅니다.
- 하단의 함수 연결에서 뷰어 요청과 뷰어 응답을 새 버전으로 수정해주세요.
- [변경 사항 저장]을 클릭합니다.
대기실 도메인 변경
NetFUNNEL 대기실 페이지의 도메인은 agent-lib.stclab.com입니다. 해당
도메인을 서비스 중인 도메인에 맞게 변경하려면 NetFUNNEL 서비스팀을 통해 원하는 도메인을 알려주시고, Lambda 설정을 변경해야 합니다.
Lambda 설정
- viewer-request에 적용한 Lambda 함수를 엽니다.
- index.mjs 파일을 엽니다.
config객체의vwrPageDomain에 변경하고자 하는 대기실의 주소를 입력합니다.
대기실 도메인을 wait.stclab.com으로 변경하는 예시 코드입니다.
const config = {
...
vwrPageDomain: "https://wait.stclab.com",
}
- 작성을 완료하면 [Deploy] 버튼을 눌러주세요.
- [버전] 탭으로 가서 [새 버전 발행]을 눌러 버전을 업데이트해주세요.
CloudFront 설정
- Lambda@Edge를 적용한 CloudFront ID를 선택합니다.
- [동작] 탭에서 항목을 선택하고 [편집]을 누릅니다.
- 하단의 함수 연결에서 뷰어 요청과 뷰어 응답을 새 버전으로 수정해주세요.
- [변경 사항 저장]을 클릭합니다.
쿠키 도메인 설정
NetFUNNEL 서버에서 발급한 키를 쿠키에 저장할 때 현재 페이지의 도메인을 기준으로 저장합니다. 만약 서로 다른 서브도메인 간에 키를 공유해야할 경우 메인 도메인이 쿠키에 저장되도록 설정합니다.
develop.stclab.com과 staging.stclab.com와 같이
서브도메인이 서로 다른 페이지에서 쿠키를 공유하도록 .stclab.com으로 설정합니다.
Lambda 설정
- viewer-request에 적용한 Lambda 함수를 엽니다.
- index.mjs 파일을 엽니다.
- 아래
config객체의cookieDomain에.MAIN_DOMAIN형식으로 입력합니다.
쿠키 도메인을 .stclab.com으로 변경하는 예시 코드입니다.
const config = {
...
cookieDomain: ".stclab.com",
}
- 작성을 완료하면 [Deploy] 버튼을 눌러주세요.
- [버전] 탭으로 가서 [새 버전 발행]을 눌러 버전을 업데이트해주세요.
CloudFront 설정
- Lambda@Edge를 적용한 CloudFront ID를 선택합니다.
- [동작] 탭에서 항목을 선택하고 [편집]을 누릅니다.
- 하단의 함수 연결에서 뷰어 요청과 뷰어 응답을 새 버전으로 수정해주세요.
- [변경 사항 저장]을 클릭합니다.