Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update Angular app on AWS S3 + Cloudfront

I deployed a production Angular 9 application on S3 + cloudfront. It works very well but I've some problems every time I release a new update of the application. I read many articles:

  • https://medium.com/@sumn2u/react-progressive-web-app-s3-and-cloudfront-6c890fa873fb
  • https://medium.com/driven-by-code/on-the-importance-of-correct-headers-and-metadata-in-s3-origins-for-aws-cloudfront-50da2f9370ae

I set right caching for index.html and ngsw-worker.js so they are not cached from cloudFront. Every Angular deploy is saved on S3 on a new folder with the build number, like this:

enter image description here

After I do this, I change the directory name of CloudFront in order to point to the new location. Unfortunately, doind this create several problems to customers that have previous version of the application. In fact if the service worker didn't get the update when the user load the application, if the user load some part of the application that were not cached before, I get a error loading chunk (because it doens't exist anymore on S3).

So I'm wondering what's the best way to continuosly deploy an Angular application on AWS S3 + CloudFront. Am I supposed to load all files inside the same folder? Isn't it too inefficient (very soon I'll have thousands of files)? Any hint is really appreciated.

like image 447
drenda Avatar asked Jul 13 '20 10:07

drenda


People also ask

How do I force update CloudFront?

Select "Manage Distributions." Right click your distribution. Select "Get Cloudfront invalidation list" Then select "Create" to create a new invalidation list. Select the files to invalidate, and click "Invalidate." Wait 5-15 minutes.

Can we deploy Angular app in S3?

Deploy the Angular build Now let's copy the angular build output that we discussed initially in the article generated at the dist/MyFirstAngularApp path and upload it in S3. Congrats, we have just created our first angular app and deployed it in AWS serverless S3.

How long does CloudFront take to update from S3?

Short description. By default, CloudFront caches a response from Amazon S3 for 24 hours (Default TTL of 86,400 seconds). If your request lands at an edge location that served the Amazon S3 response within 24 hours, then CloudFront uses the cached response. This happens even if you updated the content in Amazon S3.

What is the difference between S3 and CloudFront?

Amazon S3 is a Simple Storage Service, this can be used large amount of information i.e. Videos, Images, PDF etc. CloudFront is a Content Delivery Network, which is closer to the end user and is used to make the information available on Amazon S3 in the least possible time.


1 Answers

You can do following :

  1. Directly deploy build folder to S3 bucket.
  2. Not required to cached index.html file
  3. Whenever you deployed or upload build to S3,do the following step
  4. Go to cloudfront
  5. Do invalidation of objects
  6. Create entry /*

enter image description here

Deployment script

For continuous deployment you can write script using boto3 of aws for automatically invalidate cached once folder uploaded successfully.

like image 90
aviboy2006 Avatar answered Oct 08 '22 19:10

aviboy2006