AWS の code as a infrastructureサービスCloud Formationで、インフラストラクチャを構築しています。
コードに落とすことで、レビューやバージョン管理が可能。またAWSコンソール上で、手動での変更検知などAWSに最適化されています。
これにより、本番とstagingの環境を簡単に揃えられます。
テンプレートファイルは、.cloudformationにまとめます。1テンプレートに多くのリソースを含むと、変更が大きくなるので分割して作成してください。
Cloud Front とWAFには依存関係があるので、下記の順で作成することを勧めます。
- Kinesis firehose For WAF log
- WAF Web ACL
- Cloud Front
下記を参考に作成しています。VPC 1つ、public Subnet 3です。 https://github.com/awsdocs/elastic-beanstalk-samples/blob/main/cfn-templates/vpc-public.yaml
.cloudformation/vpc_subnets.yml
ログ出力用のs3バケットも作成してます。
- staging-decidim-app-cloud-front
- production-decidim-app-cloud-front
シンプルに本体を作成するだけです。サブネットグループ等は現状手動作成となります。
.cloudformation/elastic_cache.yml
- staging-decidim-redis
キャッシュポリシーとクラウドフロント本体を作成します。
.cloudformation/cloud_front.yml
- staging-decidim-app-cloud-front
- production-decidim-app-cloud-front
Cloud frontに合わせてus-east-1にあります。
- staging-decidim-waf
- production-decidim-waf
Cloud frontに合わせてus-east-1にあります。
.cloudformation/waf_kinesis_log.yml
- staging-decidim-kinesis-waf-log
- production-decidim-kinesis-waf-log
staging用と本番は同じリポジトリです。Dockerイメージのタグで区別します。
- decidim-cfj-ecr-repository