일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- dfs
- 삼성코딩테스트
- TensorFlow Lite
- 임베디드 딥러닝
- 초소형머신러닝
- dfs문제
- 코딩테스트
- tinyml
- tflite
- 삼성역량테스트
- 포스코 ai 교육
- bfs문제
- MCU 딥러닝
- DP
- sort
- 코테 문제
- 알고리즘
- 그리디
- 포스코 AI교육
- 포스코 교육
- 삼성역테
- BFS
- 삼성코테
- 자료구조
- 딥러닝
- 다이나믹프로그래밍
- 영상처리
- 코테
- DP문제
- 컴퓨팅사고
- Today
- Total
코딩뚠뚠
[AWS] Lambda@Edge 이용한 리디렉션 본문
본 포스팅은 아래 포스팅에서 이어집니다.
문제 정의 :
아래 구성으로 정적웹사이트를 호스팅 운영하고 있는중 문제가 발생함.
-> 주소창에 data101.io 입력 시 https://www.data101.io 로 접속 O
-> 주소창에 http://data101.io 입력 시 https://www.data101.io 로 접속 O
-> 주소창에 https://data101.io 입력 시 https://www.data101.io 가 아닌 https://data101.io 로 접속됨
Lambda@Edge 원리 :
Lambda@Edge는 Cloudfront(CDN) 서비스를 이용한다.
Cloudfront 엣지 로케이션에서 실행되는 Lambda 함수를 통해 요청과 응답을 원하는대로 커스터마이징 하는것
트리거 이벤트 :
- Lambda@Edge 함수는 특정 이벤트에 의해 트리거되며 주요 이벤트는 다음과 같다.
- Viewer Request: 클라이언트가 CloudFront에 요청을 보낼 때.
- Origin Request: CloudFront가 원본 서버(예: S3, EC2)에 요청을 보낼 때.
- Origin Response: CloudFront가 원본 서버로부터 응답을 받을 때.
- Viewer Response: CloudFront가 클라이언트에게 응답을 보낼 때.
문제 해결 :
Lambda@Edge를 실제 AWS에서 적용하는 방법을 알아보자.
1. S3를 분리 생성 한후 리디렉션 설정
현재 : data101.io
변경 : data101.io , www.data101.io
- data101.io S3 접근하여 속성 - 정적 웹 사이트 호스팅 편집 - 객체에 대한 요청 리디렉션 - www.data101.io 로 설정
- Lambda@Edge 사용 위해 data101.io S3 버킷 정책 편집 필요
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::버킷명/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::계정:role/롤이름"
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::버킷명/*"
}
]
}
2. Route53에서 두 A태그 삭제 후 S3 A태그를 다시 생성한다.
현재 : data101.io, www.data101.io (CloudFront)
변경 : data101.io, www.data101.io (S3)
3. ACM 삭제 후 다시 생성한다.
현재 : data101.io
변경 : data101.io, www.data101.io
4. 현재 CloudFront의 배포를 삭제 후 다시 생성한다.
현재 : data101.io (data101.io / www.data101.io)
변경 : data101.io, www.data101.io
5. Route53에서 두 A태그 삭제 후 CloudFront A태그를 다시 생성한다.
현재 : data101.io, www.data101.io (S3)
변경 : data101.io, www.data101.io (CloudFront)
>>> 여기까지 S3 분리 생성 및 재배포의 과정이다. 이제부터 Lambda@Edge 설정이다.
6. Lambda 함수 생성
- Region 은 us-east1로 설정해야 한다.
- 함수명 관계 없음
- 런타임 : Node.js 16버전으로 생성함. (버전별 코드 상이할수 있음)
- 역할생성
- 정책생성 : Lambda@Edge 권한
- 역할 - 권한추가 - 인라인정책생성 으로 Role 을 편집해준다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"lambda:GetFunction",
"lambda:EnableReplication"
],
"Resource": "arn:aws:lambda:*:*:function:yourFunction"
}
]
}
- 코드 작성 (data101.io 접근을 https://www.data101.io 로 리디렉션)
'use strict';
exports.handler = async (event) => {
const request = event.Records[0].cf.request;
const headers = request.headers;
const host = headers.host[0].value;
if (host === 'data101.io') {
const response = {
status: '301',
statusDescription: 'Moved Permanently',
headers: {
location: [{
key: 'Location',
value: `https://www.data101.io${request.uri}`
}]
}
};
return response;
} else {
return request;
}
};
- 구성 - 일반구성 - 제한시간은 5초 미만이여야 한다.
- Deploy
- 아래 사진 작업 - 새 버전 발행 - 함수 ARN을 복사해 놓는다.
7. CloudFront 연동
- 리디렉션 하고자 하는 CloudFront에 접근
- 동작 - 편집에 접근해서 맨 아래 함수 연결 부분을 아래와 같이 설정한다.
* 좀전에 Lambda에서 복사해놨던 ARN을 붙여넣기 한다.
* 조치 중 에러 발생
1. 503 에러
- 내 코드는 Node.js 20 버전에 맞지 않는 코드였음. 버전을 잘 확인하자.
2. Lambda@Edge 의 리전을 ' 서울 ' 로 놔서 동작하지 않았던 에러 -> us-east-1로 변경
3. data101.io 의 S3버킷 정책에 LambdaEdgeAccess 내용이 있어야 됨
- 끝 -
도움 :
https://www.youtube.com/watch?v=RRQ5-M6-8Wc
https://dev.dwer.kr/2020/03/aws-lambdaedge-http-redirection.html
'공부 > AWS' 카테고리의 다른 글
[AWS] Lambda에서 사용자 지정 ARN 사용 방법 (0) | 2024.12.31 |
---|---|
[AWS] 서브도메인 구축/운영하기 (0) | 2024.06.26 |
[AWS] AWS 계정 해킹 당한 후기 (진행중) (0) | 2024.06.23 |
[AWS] 노코드 Data 분석 서비스 개발&런칭 (0) | 2024.06.22 |
[AWS] ChatGPT API 이용 꿈풀이 런칭 (0) | 2024.03.06 |