3 ms·
Having the full cloud ecosystem on AWS/google is great. Launch a server that store files in S3, talks to a DynamoDB and memcache server and has a CDN and load b
by Khao 12y ago
Having the full cloud ecosystem on AWS/google is great. Launch a server that store files in S3, talks to a DynamoDB and memcache server and has a CDN and load balancer. The amount of back-end work required to make that is minimal and coordinating all those services (scaling, configuration, redundency) is so easy you don't even need a sys admin to do it.
- edwinnathaniel 12y agoOut of curiosity, how do you prepare different environments in AWS/Google? staging, dev (individual dev if possible), prod? What happened when you have internet interruption during development/testing cycle?
- Khao 12y agoI can't give a very complete answer as I've been using AWS to work on a side project for about a whole week. I try to design my app with 12-factor in mind (http://12factor.net/ http://12factor.net/) so all the configuration is passed to the app at run time (either ENV vars, config files, args or pulled from etcd). I'm trying to run the exact same code while in dev and while deployed in prod. For example I will absolutely try and avoid having "if Env == Test" or "if Env == Prod" in my code. For example, my service connects to S3 to store/retrieve files. The access key, secret key and even the bucket name are all passed as ENV variables so I can work on a test bucket easily with a test api key without changing code. Some services I can run locally (memcache or redis are really easy to spin up locally) and some services I'll rely on Amazon to provide like S3 even in dev/test. Of course this requires a reliable internet connection but it's the best way to deal with this for me as a single developer/devops. I'm sure bigger teams handling larger projects could give a lot of valuable information on the subject, I would love to hear about it too.
- zimbatm 12y agoYou need a way to declare your cluster using some orchestration tool like ansible / CloudFormation. Once you have that it's easy to setup/teardown a whole cluster. To further separate dev/prod you can create separate VPC (virtual networks) and use IAM (ACL) to limit access. It's also possible to create an AWS account for each developer and keep an eye on the spending with consolidated billing but in practice devs often want to share infrastructure for example when testing out something together. Downtime sucks, if it happens a lot try investing in a better Internet connection. It's possible to re-use ansible formulas to deploy something locally but usually you'll end up booting machines that themselves need internet to fetch packages / dependencies anyways.