☁️🚀 Deploy your Angular app to Amazon S3 directly from the Angular CLI 🚀☁️
MIT License
☁️🚀 Deploy your Angular app to Amazon S3 directly from the Angular CLI 🚀☁️
Install the latest version of Angular cli
yarn global add @angular/cli
Create a new Angular project
ng new hello-world --defaults
cd hello-world
Add @jefiozie/ngx-aws-deploy
to your project
ng add @jefiozie/ngx-aws-deploy
After these steps your angular.json
is updated with a new builder:
"deploy": {
"builder": "@jefiozie/ngx-aws-deploy:deploy",
"options": {}
}
Due to security risk we have made the decision to never add any options to the angular.json
. You should set the environments variable during the ng deploy
command. Below is an example on how you could do this.
npx cross-env NG_DEPLOY_AWS_ACCESS_KEY_ID=1234 NG_DEPLOY_AWS_SECRET_ACCESS_KEY=321ACCESS NG_DEPLOY_AWS_BUCKET=mys3bucket NG_DEPLOY_AWS_REGION=eu-1-region NG_DEPLOY_AWS_SUB_FOLDER=path/on/bucker ng deploy
npx cross-env ... NG_DEPLOY_AWS_CF_DISTRIBUTION_ID=1234 ... ng deploy
NG_DEPLOY_AWS_GLOB_FILE_UPLOAD_PARAMS_LIST
variable or the target option globFileUploadParamsList
as shown below.glob
property to define on which files the params will be set.s3.upload
method (https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property)"deploy": {
"builder": "@jefiozie/ngx-aws-deploy:deploy",
"options": {
"globFileUploadParamsList": [
{
"glob": "*",
"ACL": "public-read",
"CacheControl": "max-age=3600"
},
{
"glob": "*.html",
"CacheControl": "max-age=300"
}
]
}
},
The order of the config objects matters, the one that comes last is the one that will be used, as shown above:
To set this using the environment variable NG_DEPLOY_AWS_GLOB_FILE_UPLOAD_PARAMS_LIST
, simply stringify the config object to JSON with JSON.stringify
.
npx cross-env ... NG_DEPLOY_AWS_GLOB_FILE_UPLOAD_PARAMS_LIST='[{"glob":"*","ACL":"public-read","CacheControl":"max-age=3600"},{"glob":"*.html","CacheControl":"max-age=300"}]' ... ng deploy
ng deploy
to deploy your application to Amazon S3.🚀Happy deploying! 🚀
Keep in mind that with the default config, everybody that has access to the angular.json will have your aws secret.
If you want more security, you can also use environment variable with NG_DEPLOY_AWS_ACCESS_KEY_ID
, NG_DEPLOY_AWS_SECRET_ACCESS_KEY
, NG_DEPLOY_AWS_BUCKET
and NG_DEPLOY_AWS_REGION
.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::$BUCKET_NAME$"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::$BUCKET_NAME$/*"
]
}
]
}
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
The builder is located in the libs\ngx-aws-deploy
folder.
The sample app is located in the apps\demo-app
folder.
Please make sure to update tests as appropriate.
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!