Fog omschrijft zichzelf als "The Ruby cloud services library". Het is een softwarebibliotheek die je in elk Ruby-programma of elke Ruby on Rails-applicatie kunt gebruiken om allerlei clouddiensten aan te sturen met één API. Zaken als het opstarten van virtuele servers, het aankoppelen van storage en het beheren van DNS worden allemaal weggeabstraheerd, zodat je niet meer zelf de details hoeft te weten van hoe je al die diensten aanstuurt. En als je van meet af aan de Fog API gebruikt en daarna je virtuele server bijvoorbeeld van Amazon EC2 naar Rackspace wil verplaatsen, hoef je alleen maar een paar parameters aanpassen om naar de nieuwe clouddienst te verwijzen.

Onlangs is Fog 1.0 uitgekomen (met een grote changelog). Het project ondersteunt 18 compute services, 5 storage services, 9 DNS services, 2 content distribution networks en heel wat andere services. Fog is beschikbaar als een Ruby-gem, dus het is eenvoudig te installeren met de opdracht gem install fog.

Van AWS naar Rackspace

Een voorbeeld maakt de kracht van Fog duidelijk. Als je een verbinding met Amazon Web Services (AWS) wil maken, kan dat als volgt:

connection = Fog::Compute.new({:provider => "AWS",

:aws_access_key_id => ACCESS_KEY_ID,

:aws_secret_access_key => SECRET_ACCESS_KEY})

Hier vul je dan uiteraard de access key en secret access key in voor je AWS-account. Nadien kun je dan met connection.servers.create een server aanmaken, met als parameters bijvoorbeeld de image_id van de Amazon Machine Image, availability zone en de naam van je sleutel om in te loggen. Als je echter ooit van AWS naar Rackspace overstapt, dan moet je je code om met de cloud te verbinden slechts lichtjes aanpassen:

connection = Fog::Compute.new({:provider => "Rackspace",

:rackspace_api_key => API_KEY,

:rackspace_username => USERNAME})

De code voor algemene taken hoef je echter niet aan te passen als je van provider verandert, bijvoorbeeld dit stukje code om een bestand naar al je servers te uploaden:

connection.servers.all.each do |server|

server.scp(local_file, remote_file)

end

Geen lock-in

Fog is een interessante oplossing als je niet al je code specifiek voor één cloudaanbieder wil schrijven en zo de lock-in wil beperken. Patrick Debois heeft zelfs ondersteuning voor libvirt aan Fog toegevoegd, waardoor je dezelfde code kunt gebruiken voor je eigen interne virtuele machines (met KVM, Xen, OpenVZ, ...) als voor bijvoorbeeld Amazon EC2. Lees de documentatie van Fog zeker eens, in het bijzonder de instructies voor Compute, Storage, DNS en CDN.