目次

概要

以前に 1つのAWS Lambda関数でSPAフレームワーク作成 という記事を書いたが、当記事では API Gateway ではなく CloudFront を利用して似たような事をやってみる。

/css
/html
/js

・・・ CSS格納用
・・・ HTML格納用
・・・ JS格納用

/api
/css
/html
/js

・・・ Lambdaで処理
・・・ オリジン(S3)にリクエストさせる
・・・ 〃
・・・ 〃

イメージ

TODO:

この構成のメリット/デメリット

TODO:
  • メリット
    • 1つのアプリケーションとしてデプロイする事ができる
    • 静的コンテンツは CloudFront のキャッシュにより高速配信が期待できる
  • デメリット
    • 1 Lambdaの為、個別にメモリ調整等ができない

料金試算

TODO:

静的コンテンツの準備

TODO:

Lambdaの作成

TODO:

CloudFormationテンプレート

参考)
https://github.com/awslabs/serverless-application-model/tree/master/examples/2016-10-31/lambda_edge

注意)
edgelambda.amazonaws.com を assumable role しないと、
「The function execution role must be assumable with edgelambda.amazonaws.com as well as lambda.amazonaws.com principals.」と怒られる。

#TODO

AutoPublishAlias: live について

AutoPublishAlias: live を指定すると Version という追加のプロパティが使用できるようになるらしい。
AWS::CloudFront::Distribution 側の LambdaFunctionAssociations 配下の LambdaFunctionARN では、これを使用する事ができるようになる。

https://github.com/awslabs/serverless-application-model/tree/master/examples/2016-10-31/lambda_edge

例)

  LambdaEdgeFunctionSample:
    Type: AWS::Serverless::Function
    Properties:
       :
      CodeUri: ./src
      Handler: index.handler
      AutoPublishAlias: live 
    
  SampleDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
        DistributionConfig:
             :
            LambdaFunctionAssociations:
                - 
                EventType: origin-request
                LambdaFunctionARN: !Ref LambdaEdgeFunctionSample.Version

補足(Lambda@Edge)

Lambda@Edge では、Node.js Lambda 関数により返却するコンテンツをカスタマイズする事ができる。

Lambda 関数が実行出来るタイミングは以下の通り。

当記事では、上記の「オリジンリクエスト」イベントによってLambdaをトリガーし、動的コンテンツか静的コンテンツかを判定する。
動的コンテンツへのリクエストだった場合はLambd 内でレスポンスデータを作成/返却する。
静的コンテンツへのリクエストだった場合は何もしない。(そのままオリジンに対してリクエストさせる)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS