AWS Boilerplate
github.com
github.com
Please consider renaming to something like ‘Boilerplate for AWS’ since it would avoid confusion that this is something official from AWS, and because such a name is less likely to cause trademark issues per the AWS Trademark Guidelines.
It's incredible how much time is lost on config: AWS is a big one, but having to configure Django, Black, Flake8, Webpack, ESLint, prettier, Typescript, Sentry, react-router... It easily takes days, and copying from other projects meant we were propagating some less-than-ideal setup.
Automating setting up a React-native app was clearly the most challenging, I don't work there anymore but I don't think it's a smooth process even now
“The right tool for the job” doesn’t matter for most regular CRUD boring programming work. Django vs Rails vs a huge bundle of JS libraries cobbled together at random... for most programming work it doesn’t matter. So why not pick the one that lets you get your job done the quickest and easiest?
I get nothing (nothing but added stress) from trying new frameworks and new libraries and new packages constantly. I want to learn the right way to do something and then get down to business. My boss and my stakeholders don’t care what language or framework I’m using. The only consideration I need is “how quickly and easily can I get this done” and to be honest most of the time that’s Rails.
These days I’m using AWS Amplify which is an opinionated framework for AWS serverless apps and that’s all I really want... someone to make the “right” decisions for me so I can get my own work done. Because my job isn’t to pick languages and frameworks, it’s to produce a finished product.
If you hate wrenches you're going to have a .. difficult time being a mechanic.
It might not matter to you, but it sure matters for the end user.
This sort of attitude is why blog pages weigh north of 20 Mb and load for minutes nowadays.
All that being said, rolling AWS infrastructure ad-hoc like this is a terrible experience, but I far less experienced with it. Terraform seems like a great general tool to ease the pain, or something with this project.
If there's a later version of a component or you want to apply learning... contribute back to the project generator, to ensure other projects benefit from it
The only value we lost was the experience a dev gets setting up the infra from scratch. It is a consequent loss, but we deemed it very worth it (and retrospectively, I think it was)
“Backend” is a Django application - but not mentioned in the README, for example.
Also, what AWS services are being utilized? The Serverless stuff deploys to Lambda... that can be inferred, but the rest of it?
What ports are opened? What roles are created? Is all traffic encrypted in transit? Is all data encrypted at rest? Etc. I could dig through the configs, but just a high level overview would be nice. Bonus points for a detailed threat model.
Operationally, how do I monitor this thing? How do I scale it? How is patching handles?
Just some constructive thoughts on areas that could be improved.
For folks who are interested in deploying their containers on AWS without "boilerplate", we also have a tool called AWS Copilot which can help simplify setup and management of all the container infrastructure you need :D https://github.com/aws/copilot-cli
Also, is this intended to be a thing you buy, fork, and make it your own? Or will it be more like a framework where customers receive updates to the core code?
This is going to be a fork and make it your own; once you get the code it's all yours. I may share security fixes as patch files maybe, but that'd be more of a manual work for everyone rather than an automated update mechanism.
I have found it to be a pain in the ass because it tends to want to do everything for you leaving assets/buckets/things like `aws-amplify-23094139-85-3981759387593745983475-us-east-experiment-project` all over your account. I have been using AWS for over 10 years, so I tend to like to keep a clean house and name most of my things, or at least have them follow a sane convention. I also like to know what is being created.
Oh and the dev/stage/prod branching strategy is a nightmare.
There are pros/cons to this of course, but if you’re doing any A/B testing or bandit optimization you’re kind of stuck with it in one form or another. If you’re not doing any A/B or bandit then it’s probably a young enough project that you can do whatever you want.
[1] https://raw.githubusercontent.com/stackplanet/sourcestack/ma...
I guess kinda like serverless framework, but much less YAML and much more actual code.
In fact, we created a tool to do exactly this - Serverless Stack Toolkit (SST), which allows you to combine CDK and Serverless Framework - https://github.com/serverless-stack/serverless-stack
So you can do `sls deploy --stage dev` and `sst deploy --stage dev`.
Feel free to send me an email anytime - frank@anoma.ly
For anyone not very familiar with AWS infrastructure, this is a very direct path to being in way over your head with a bunch of infrastructure you have no idea how to manage once it's set up. You'd surely be better off using a more managed setup like Heroku, or taking the time to read some AWS tutorials and set up only the things that you need, making sure you understand the different pieces along the way.
It makes me think of the Standards XKCD [0], I'm sure this project started out with good intentions thinking that "working with AWS SDKs is too complex, we'll make a few simplified make command to rule them all" but all they've managed to do is make yet another, extremely limited, but still opaque and complex tool.
As far as I know, they are both IaC frameworks.
Not just technically, but in terms of their mental model on how to build and deploy applications. Over time, "just use AWS" becomes the defacto "how do I build this?" answer until nobody really knows how to build and deploy an application without them.
It's damn clever.
Nowadays everything is 10-20x more complicated and expensive than it should be compared to 10 years ago.
It's a helpful, opinionated boilerplate.
On a different note, recently I was looking to learn AWS concepts through online courses. After so much of research I finally found this e-book on Gumroad which is written by Daniel Vassallo who has worked in AWS team for 10+ years. I found this e-book very helpful as a beginner.
This book covers most of the topics that you need to learn to get started:
If someone is interested, here is the link :)