-
Notifications
You must be signed in to change notification settings - Fork 6
Environment
We need to put together our own AMI and version it like we would regular software releases. We need a base AMI that should probably be the basis for most of our instances and possible a couple of specialized AMIs. For instance a separate Zookeeper AMI to support rapid (re)deployment of a Zookeeper ensemble in a given datacenter.
This would give us more precise control over what is available in the runtime environment and how it is set up. It would also make it easier to pre-populate the environment with our own tools.
New versions of the AMI should be released at least every quarter or so. It should be a goal that we upgrade all AMIs within one quarter.
Today we have no really good way of managing instances. We hardly even know what resources we are using in AWS. We also have no really good way of brining up a datacenter from zero in an automated fashion. This means we have very low disaster readiness.
We need something to fire up instances as we need them, and to reap instances we are no longer using. We also need something that will set up all the other things in a datacenter (network stuff, security groups etc).
We do not wish to take on the complexity of managing dependencies so
when services are packaged into copkg
packages they are expected to
bring everything they need to run. This means that if your service
uses binaries such as Imagemagick or such, it needs to include these
in the package.
Packages should make judicious use even of software that is installed in the instance/VM because later versions of the runtime environment may feature a different version than is expected or may not have the software.
The reason is that we do not want services to depend on the alteration of the global state of an instance. All services should be able to run on all our istances without altering the global configuration of the instance.
This will sometimes require a marginal additional effort to make sure dependencies are packaged and that they work on all relevant platforms (minimum Linux and OSX), but we think the extra effort needed far outweighs the cost of having to deal with another level of complexity. Not least when it comes to increasing iteration speed.
We also encourage developers to think about this when designing systems and to try to stick to portable solutions wherever possible.