CloudFront + S3 + Jekyllで運用していたブログをHugoに載せ替えた際、ディレクトリインデックスを効かせないといけなかったのでCloudFormationの修正をした。
最大のつまずきポイントはCloudFrontからLambdaを指定方法。
LambdaのArnを指定すれば良いのかと思いきやバージョンも指定せよとのこと。
いちいちバージョンを手動で設定もしていられない…と思っていたらこちらの方法で解決。
AWS CloudFront Lambda@Edge の罠たち | d.sunnyone.org
serverless-application-model/examples/2016-10-31/lambda_edge at master · awslabs/serverless-application-model
まずLambdaをAWS::Lambda::Function
ではなくAWS::Serverless::Function
として定義し、AutoPublishAlias
を設定する。
そうすることでCloudFrontのLambdaFunctionARN
で!Ref (リソース名).Version
としてLambdaを指定することができるようになる。
StgLambdaFunction:
Type: AWS::Serverless::Function
Properties:
AutoPublishAlias: stg
LambdaFunctionAssociations:
- EventType: origin-request
LambdaFunctionARN: !Ref StgLambdaFunction.Version
またAWS::Serverless::Function
を使う場合はファイル先頭にTransform: 'AWS::Serverless-2016-10-31'
が必要なことに注意。