CloudFrontをTerragruntで書くならこんな感じの構成はいかがでしょうか。と言う物です。
- Docker
- バージョンは20以上で動くと思います。
- Docker Compose
- バージョンは2以上で動くと思います。
deploy.sh {staging or production} を実行。
※認証情報等は良しなにすること。
世の中には様々なCDNサービスがあります。コストや、配信しているコンテンツの都合等、色々な理由CDNサービスの移行を余儀なくされる時は良くある物だという想定です。
そのため、同じリポジトリ内にオリジンにあたるS3バケットやアプリケーションサーバー等は管理していません。
また、CDNサービス別でもリポジトリを別にすべきでしょう。
この例ではCloudFront関連のリソース、Lambda(Lambda@Edge用)とAWS WAF(WebACL)のみを1リポジトリ内で管理する想定で書きました。
オリジンにあたるS3バケットやアプリケーションサーバーについてはここでは管理しません。
しかし、それらを除き、CloudFrontを動かすにはSSL証明書(AWSならACM)、DNSレコード(AWSならRoute53のレコード)が必要になります。
SSL証明書やDNSレコードは必ずしもCloudFrontのために作成されるものでは無いため、CloudFront用リポジトリとしては管理しない方が良いと考えます。
CloudFront Functionsはクォータの通り、最大関数サイズが 10KB と言う縛りがあります。
そのため、少しでも余裕を持たせるためデプロイする直前でminifyします。
エッジ関数の原本が配置されるディレクトリはリポジトリのルートに作成し、万が一開発用、本番用のエッジ関数のコードが混ざらないように、デプロイする直前で環境別のディレクトリに配置しつつzipファイルも作成するようにしています。
また、Lambda@Edge用のコードは別リポジトリに配置すると都合が良いかもしれませんし、かえって管理しづらくなるかもしれません。どちらにもつらい点はあるのでどちらにするかはお任せします。
docs ディレクトリ以下にドメイン別にディレクトリを切って、その下にMarkdownなりなんなりを配置すると良いです。別にMarkdownに限らなくても良いですが、リポジトリを分けるのは絶対やめた方が良いです。