Accessing Windows Azure REST APIs with cURL
Tonight I was playing with cURL on my Mac wondering how easy would it be to develop few scripts to manage Windows Azure applications from non-Windows machine. As it turns out getting access to Windows Azure REST APIs was quite simple. Here are the steps I had to go though in order to be able to receive valid response from the APIs:
Set up Windows Azure management certificate from your Mac machine
The first thing I had to do is to create a self signed certificate that I can use to do the Service Management. Creating the cert with openssl (which is available on Mac) is quite simple - just type:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout azure-cert.pem -out azure-cert.pem
During the creation openssl will ask you for all the necessary information like country name, organization name etc. and at the end will generate .pem file that contains the public and the private key.
In order to upload the certificate to your Windows Azure subscription using the Management Portal though you need to have the certificate in PKCS12 (or .pfx) format. Here is the openssl command that will do the work:
openssl pkcs12 -export -out azure-cert.pfx -in azure-cert.pem -name "My Self Signed Cert"
Now that you have the PKCS12 file you can go ahead and upload this to your Management Certificates using the portal.
Update: By writing this in the middle of the night I totally messed up what you need to do. PKCS12 you need if you want to enable SSL for your service. For management you only need the public key that you can export in .CER file. Here is the command that you use for this:
openssl x509 -outform der -in azure-cert.pem -out azure-cert.cer
Now you can upload the .CER to the Management Certificates section using the portal.
The initial set-up is done!
Using cURL to Access Windows Azure REST APIs
Now that you have the cert created and uploaded to Windows Azure you can easily play with the REST APIs. For example if you want to list all your existing hosted services you can use the List Hosted Services API as follows:
curl -E [cert-file] -H "x-ms-version: 2011-10-01" "https://management.core.windows.net/[subscr-id]/services/hostedservices"
cert-fileis the path to the .pem file containing the certificate
subscr-idis your Windows Azure subscription ID
Don't forget to specify the version header (the -H flag for cURL) else Windows Azure will return an error. As a result of the call above you will receive XML response with list of all the hosted services in your Windows Azure subscriptioin.
You can access any of the REST APIs by manually constructing the request and the URL as described in the Windows Azure Service Management REST API Reference.
I didn't get to any of my planned scripts but I can explore the APIs easily cURL.