There is so much talk and discussion about “services”. From my many years of experience working with technical services organization, etc. I thought I’d put my thoughts down about this because I for one think its pretty simple. To describe a service address the following questions.

What is it?

How do you get it, who (maybe a machine?) do you contact/do to get it?

What should you expect once it is requested?

How do you get help if you don’t get what you ask for?

In my mind this makes it really easy to walk through explain to some one what they get, how to request it, can expect and get help if they need it.

I’m looking into modern technology delivery tools and how they all work together. Below is a quick overview of what I’m finding. lots of tools, it would be good to back in school again to get a practical path to getting up to speed on all of these… sheesh. I provide a quick outline for a rapid start. this is incomplete, I’ll update sometime in the future once I get more information.

Prerequisites – be comfortable with linux/unix/windows, a text editor, some networking and maybe a little security by way of ssh. I’m partial to CentOS as its representative of enterprise supported RedHat Linux with a high degree of stability, this can cause problems though because this is all moving so fast right now (as below with git). Some programming and computer science background couldn’t hurt either.

language – ruby (and gem function library manager)

configuration management – chef (and knife)

version control – git

config management dependency tool (like yum, apt-get) – berkshelf

rapid provisioning tool – vagrant

others: info coming, jenkins, thor, tbd….

must have tools:

ruby and gem : the ruby language popularized by the Ruby on Rails framework. Ruby is object oriented interpreted language with an extensive set of community supported library. To access libraries use the tool call gem, more info here: http://rubygems.org/. Don’t worry about learning the language, that will come over time. Another alternative often mentioend is puppet, i’ve read somewher ethat chef is intended to be a modern update to puppet. Amazon AWS seems to be using chef so thus my initial orientation to it.

git – a version control system to help you manage your cookbooks :^). their is lots of info on this, I did find (the hard way) that getting started on a Redhat based system was a little tough as its an older version, (easy on Ubuntu, go figure). You want the newer version of git as it will allow you to use https (as opposed to ssh) to interact with github, which you want to do, at least initially. Here’s a way to update redhat6 based distributions somewhat easily: http://www.charlestonsw.com/update-git-on-centos-6-3/

berkshelf – a dependency manager for chef cookbooks and recipes, supposedly will simplify the chef cookbook management process, from my initial impression this would be a good thing. i’m still working on this one . more to come. See: http://berkshelf.com/

vagrant – a rapid provisioning tool intended to allow you to manipulate virtual machine images. this tools is intended to be useful to test cookbooks and recipes rapidly, as you need to have “clean images” constantly. This tool helps to automate this. more to come: see: http://www.vagrantup.com/

other tools i’m in the process of getting a read on are: thor, jenkins, docker.

Here’s a useful addition to you linux/unix shell when using AWS command line tools.

The aws-cli package includes a very useful command completion feature. This feature is not automatically installed so you need to configure it manually. To enable tab completion for bash use the built-in command complete:

$ complete -C aws_completer aws

For tcsh:

$ complete aws 'p/*/`aws_completer`/'

You should add this to your startup scripts to enable it for future sessions.

For zsh please refer to bin/aws_zsh_completer.sh. Source that file:

$ source bin/aws_zsh_completer.sh

For now the bash compatibility auto completion (bashcompinit) is used. For further details please refer to the top of bin/aws_zsh_completer.sh.

I recently took a class that to baseline my team on cloud essentials. It was a a foundation to prepare for the CompTIA certification. In this training it was pointed out that industry has recently converged on the definitions of cloud provided for by the the US National Institute of Standard and Technology (NIST). These can be found here: SP 800-146.

Below is a recap of this document.

Simply stated it says:

Cloud has 3 service models: Software (SaaS), Platform (PaaS), and Infrastructure (IaaS) with 4 deployment models, Private, Community, Public, Hybrid. The Service models must have these 5 essential characteristics:

On-Demand Self Service

Broad Network Access

Resource Pooling

Rapid Elasticity

Measured Service

On-Demand Self Service: A consumer can unilaterally provision computing capabilities, such as server time and network storage, as needed automatically without requiring human interaction with each service provider.

Broad Network Access: Capabilities are available over the network and accessed through standard mechanisms that promote use by heterogeneous then or thick client platforms. For example, mobile phones, tablets, laptops.

Resource Pooling: Provider’s computing resources are pooled to serve multiple consumers using a multi-tenant model, with different physical and virtual resources dynamically assigned and reassigned according to consumer demand. There is a sense of location independence in that the customer generally has no knowledge about or control over the ecact location of the provided resources but may be able to specify location at a higher level of abstraction, such as country, state, or data center. Some example of resources include storage, processing, memory, and network bandwidth

Rapid Elasticity: Capabilities can be elastically provisioned and released, in some cases automatically, to scale rapidly outward and inward commensurate with demand. To the consumer, the capabilities available for provisioning often appear to be unlimited and can be appropriated in any quantity at any time.

Measured Service: Cloud systems automatically control and optimize resource use by leveraging a metering capability at some level of abstraction appropriate to the type of service, such as storage, processing, bandwidth, and active user accounts. Resource usage can be monitored, controlled, and reported, providing transparency for both the provider and consumer of the utilized service.

Service Models:

Notable about service models is that all “cloud” services relate to these definitions. There is no Desktop as a Service, Development as a Service , etc. They map to the 3 service Models. This gets a little confusing and and apparently there is much dicussion around this, For example, Using Twitter website is a SaaS, integrating with Twitter API is PaaS. as a Service, Salesforce is SaaS, Fore.com is PaaS. A comment that things like DNS services align with IaaS. (more on this to come a little later).

Software as a Service (SaaS) (pronounced Sass):

Platform as a Service(PaaS) (pronounced Pass):

A Platform – as – a – Service (PaaS) cloud provides a toolkit for conveniently developing, deploying, and administering application software that is structured to support large numbers of consumers, process very large quantities of data, and potentially be accessed from any point in the Internet. PaaS clouds will typically provide a set of software building blocks and a set of development tools such as programming languages and supporting run – time environments that facilitate the construction of high – quality, scalable applications. Additionally, PaaS clouds will typically provide tools that assist with the deployment of new applications. In some cases, deploying a new software application in a PaaS cloud is not much more difficult than uploading a file to a Web server. PaaS clouds will also generally provide and maintain the computing resources (e.g., processing, storage, and networking) that consumer applications need to operate. In short, PaaS clouds are similar to any traditional computing system (i.e., platform) in that software applications can be developed for them and run on them.

Infrastructure as a Service (IaaS) (pronounced Ice):

Deployment Models:

Private cloud: The cloud infrastructure is provisioned for exclusive use by a single organization comprising multiple consumers (e.g., business units). It may be owned, managed, and operated by the organization, a third party, or some combination of them, and it may exist on or off premises.

Community cloud: The cloud infrastructure is provisioned for exclusive use by a specific community of consumers from organizations that have shared concerns (e.g., mission, security requirements, policy, and compliance considerations). It may be owned, managed, and operated by one or more of the organizations in the community, a third party,or some combination of them, and it may exist on or off premises.

Public cloud: The cloud infrastructure is provisioned for open use by the general public. It may be owned, managed, and operated by a business, academic, or government organization, or some combination of them. It exists on the premises of the cloud provider.

Hybrid cloud: The cloud infrastructure is a composition of two or more distinct cloud infrastructures (private, community, or public) that remain unique entities, but are bound together by standardized or proprietary technology that enables data and application portability(e.g., cloud bursting for load balancing between clouds).

To use yum to install a Perl module using the module name, just place ‘”perl()”‘ around the name of the module (double quotes included) when giving it as an argument to yum. For example, to install the ‘Net::Telnet’ module, you would run ‘yum install “perl(Net::Telnet)”‘.