정적 API 의 경우에는 응답값을 캐시를 이용하여 서버 리소스를 절감하도록 합니다.
%% API gateway + CloudFront
graph LR
%% __START
Client --> |1.request| CloudFront
CloudFront --> |2.create| ApiGateway
ApiGateway --> |3.query| Lambda
CloudFront --> |4.response| Client
CloudFront -.-> |isCache=yes| CloudFront_{Cache} --> |2.response| Client
%% __END
// serverless.yml
resources:
...
Resources:
CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
CacheBehaviors:
- PathPattern: "/banner"
TargetOriginId: ApiGatewayOrigin
ViewerProtocolPolicy: redirect-to-https
AllowedMethods:
- GET
- HEAD
- OPTIONS
CachedMethods:
- GET
- HEAD
ForwardedValues:
Headers:
- Access-Control-Request-Method
- Access-Control-Request-Headers
- Origin
QueryString: true
Cookies:
Forward: none
MinTTL: 0
DefaultTTL: 2630000
[간헐적 CORS 발생]
API Server 배포 이후 시점에서 간헐적으로 CORS 이슈가 발생. 응답 헤더에 CORS 에서 설정된 값이 고정되어 내려오는 이유가 원인으로 파악되었음.
DefaultCacheBehavior 에는 응답 헤더 Origin 이 캐시 키로 설정되어있었지만, 캐시를 활용하는 API 를 위한 각 CacheBehavior 에는 응답 헤더 Origin 이 캐시 키로 설정되어있지 않았던 상황. ⇒ 그로 인해, 처음 요청된 Origin 을 기준으로 캐시되어 다른 Origin 에서 오는 요청도 캐시된 응답 헤더로 내려간 것으로 파악.