Amazon CloudFront & Lambda@Edge응답 바디 변경
9052 단어 Lambda@EdgeAWS
그럼 이번에는 반응하는 HTML을 살짝 가공하려고 조사를 해봤어요.
예시적으로 실현된 문서는 여기에 있다.
이에 따라 다음과 같은 제한이 있다.
HTTP 응답 사용 시Lambda@Edge오리지널-response 트리거에게는 원래 서버에서 반환된 HTML 본문이 공개되지 않습니다.
바디한테 하면 안 돼!오리진으로부터의 응답에 대한 일반적인 이용 범위 내에서 바디는 모두 덮어쓸 수 있습니다.
내용을 조금 변경해서 보내려고 하는 경우에 대비해서...?
여기서 힌트는 이거예요.
방침.
How to
.html
요청코드
그리고 이렇게 오리진-response 활동에서 실행되는 람바다 스크립트를 만들었습니다.
아마 콘텐츠-length를 다시 계산한 것 같은데, 이 행사 때 콘텐츠-length 헤더가 없어서 마지막 단계에서 답장을 해주실 거예요.
샘플에서 Body의
WordPress
라는 단어를 getShifter
로 대체합니다.origin_response.js
'use strict';
const util = require('util');
const AWS = require('aws-sdk');
const S3 = new AWS.S3({
signatureVersion: 'v4',
});
exports.handler = (event, context, callback) => {
console.log(util.inspect(event.Records[0].cf));
let response = event.Records[0].cf.response;
if (response.status == 200) {
let request = event.Records[0].cf.request;
let bucket = request.origin.s3.domainName.split('.')[0];
let path = request.uri;
if (path.endsWith('\.html')) {
let key = path.substring(1);
S3.getObject({ Bucket: bucket, Key: key }).promise()
// perform the replace operation
.then(data => data.Body.toString()
.replace(/WordPress/g, 'getShifter')
)
.then(buffer => {
// console.log(buffer);
response.body = buffer;
callback(null, response);
return;
})
.catch( err => {
console.log("Exception while reading source :%j",err);
});
} else {
callback(null, response);
}
} else {
callback(null, response);
}
};
Edge의 엄격한 제한 시간(5s) 범위 내에서 대체된 내용을 얻었습니다.분필용 콜백을else 바깥에 두면 왜 잘 안 되지...
사용 전/사용 후
↓ 변했다.
처음에는 좀 늦었지만 현금으로 바꾸고 타도 될까요?
Reference
이 문제에 관하여(Amazon CloudFront & Lambda@Edge응답 바디 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sawanoboly/items/5427edcc734b82d7520f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)