순서
→ 이러는 이유: cloudfront의 Cname을 넣고싶으면 ssl 인증서가 존재해야한다. 근데 ssl 인증서를 받으려면 해당 도메인이 존재해야한다. 따라서 ssl 인증서를 받는 용도로 도메인을 생성한다음. 해당 도메인을 지워버려야 Cname으로 연결 가능하다. (안지우면 다른 aws 서비스를 바라 보고있다고 나옴)
2. mocked route 53 레코드를 생성한다
이유: cloudfront 배포 대체도메인(CName)을 생성하기위해서
가정: 백엔드 도메인을 가지고있는 상태텍스트
호스팅 영역에서 레코드 생성
원하는 레코드 이름 넣고, 값에 아무런 값 밀어넣기(mocked)

레코드 생성
3. cloudfront 및 cloudfunction 생성
배포 > 배포 생성 에 들어간후 Origin domain에 EB 혹은 Alb 도메인 입력
2. 기본 캐시 동작 설정

3. 캐시 키 및 원본 요청

4. 함수 연결 및 웹어플리케이션 방화벽 설정

5. 설정

6. cloudfunction 만들기
함수 > 함수 생성 클릭후 이름 지은다음 생성하기
function handler(event) {
var request = event.request;
var type = "prod";
if (type === "prod") {
return request;
}
if (type === "maintenance") {
var response;
if (request.method === "OPTIONS") {
// OPTIONS 요청 처리
response = {
statusCode: 200,
statusDescription: 'OK',
headers: {
"access-control-allow-origin": { "value": "*" },
"access-control-allow-methods": { "value": "GET, POST, OPTIONS" },
"access-control-allow-headers": { "value": "Content-Type, Authorization" }
}
};
} else {
var maintenanceStart = "2024.08.22, 10:20am"; // 시작 시간
var maintenanceEnd = "2024.08.22, 10:30am"; // 종료 시간
response = {
statusCode: 503,
statusDescription: 'Service Unavailable',
headers: {
"access-control-allow-origin": { "value": "*" },
"access-control-allow-methods": { "value": "GET, POST, OPTIONS" },
"access-control-allow-headers": { "value": "Content-Type, Authorization" },
"access-control-expose-headers": { "value": "maintenance-start, maintenance-end" },
"maintenance-start": { "value": maintenanceStart },
"maintenance-end": { "value": maintenanceEnd }
}
};
}
return response;
}
}
4. mocked route 53 레코드를 삭제한다
5. cloudfront의 대체도메인을 넣어준다.
1. cloudfront > 배포 > 아까만든배포 > 일반 > 설정 편집

6. 실제 route 53 레코드를 생성한다
route 53 > 호스팅영역 > 호스팅선택 > 레코드 생성 클릭

서버 점검시 방법
1. aws cloudfront > 함수 > 내가만든 함수이름 > 빌드
변경사항 저장 클릭2. 게시 로 이동
함수게시 클릭1. aws cloudfront > 함수 > 내가만든 함수이름 > 빌드
변경사항 저장 클릭2. 게시 로 이동
함수게시 클릭