Tools to run EC2 Query API's against CloudStack

[A] Boto Client

1. Installation

Use any of the following to install boto,

  1. sudo apt-get install python-boto
  2. pip install --U boto
  3. git clone https://github.com/boto/boto.git; cd boto; sudo python setup.py install

2. Configuration

Edit /etc/boto.cfg or ~/.boto to add,

[Credentials]
aws_access_key_id= <cloudstack_api_key>
aws_secret_access_key=  <cloudstack_secret_key>

For more details on Boto configuration refer [1]

3. Connection

Make an EC2 service connection against CloudStack management server. Use this connection to make any of the supported EC2 API calls,

Sample python code that uses Boto client to make EC2 DescribeImages API call against CloudStack,

import boto
import boto.ec2

region = boto.ec2.regioninfo.RegionInfo(name="AmazonEC2", endpoint="<cloudstack_management_server_ip>")
conn = boto.connect_ec2(aws_access_key_id="<cloudstack_api_key>", aws_secret_access_key="<cloudstack_secret_key>", is_secure=False, region=region, port=7080, path="/awsapi", api_version="2012-08-15")

# run an instance
instance = conn.run_instances('<image-id>', min_count=1, max_count=1) 

# response of the command (contains list of instances, owner of the instances etc. )
vars(instance)

# list attribute values of one of the instances launched
vars(instance.instances[0])

# list details of the security group that the launched instances belong to
vars(instance.groups)

For a complete list of Boto EC2 commands see attached file - EC2_API_vs_Boto_commands.xlsx.

For details on each of the commands see [2].

[B] Java SDK

Download source from [3]. For general guidelines on how to use the SDK, refer [4].

Below is a sample Java code that uses the SDK to make EC2 DescribeImages API call against CloudStack,

AWSCredentials credentials = null;
String endpoint = "http://<cloudstack_management_server_ip>:7080/awsapi/";
Protocol protocol = Protocol.HTTP;
int timeout = 600 * 1000;

// Extract AWS_ACCESS_KEY and AWS_SECRET_KEY from AwsCreadentials.properties file
try {
    credentials = new PropertiesCredentials(InlineGettingStartedCodeSampleApp.class.getResourceAsStream("AwsCredentials.properties"));
} catch (IOException e1) {
    System.out.println("Credential were not properly entered into AwsCredntials.properties.");
    System.exit(-1);
}

// Create a Client configuration object to control how the client connects to CloudStack e.g. retry counts
ClientConfiguration client = new ClientConfiguration();
client.setProtocol(protocol);
client.setSocketTimeout(timeout);

// Create a Amazon EC2Client object to call any EC2 API
ec2 = new AmazonEC2Client(credentials, client);
ec2.setEndpoint(endpoint);

// Use the Amazon client object to make the api call DecsribeImages
DescribeImagesRequest imagesRequest = new DescribeImagesRequest();
DescribeImagesResult imagesResult = ec2.describeImages(imagesRequest);
System.out.println("DescribeImages: " + imagesResult);

Note: Before running the sample, place it in the samples _folder and fill in AwsCredentials.properties with _accessKey=<cloudStack_api_key> and secretkey=<cloudstack_secret_key>

One can use the AWS Toolkit for Eclipse to add the AWS SDK for Java to an existing project, or create a new Java project based on the SDK [5].

[C] PHP SDK

Download source from [6]. For general guidelines on how to use the SDK, refer [7].

Below is a sample PHP code that uses the SDK to make EC2 DescribeImages API call against CloudStack,

<?php

error_reporting(-1);
header("Content-type: text/html; charset=utf-8");
require_once '../sdk.class.php';

$ec2 = new AmazonEC2();
$ec2->set_hostname('http://< cloudstack_management_server_ip >:7080/awsapi/');
$ec2->disable_ssl();
$ec2->set_max_retries(0);

$response  = $ec2->describe_images();
echo "\nDescribeImages \n";
print_r($response->body);

?>

Note: Before running the sample in _samples folder, rename config-sample.inc.php to config.inc.php _and write into the file with ‘key’=><cloudStack_api_key> and ‘secret’=><cloudstack_secret_key>_

References

[1] http://docs.pythonboto.org/en/latest/boto_config_tut.html                                       

[2] http://docs.pythonboto.org/en/latest/ref/ec2.html#module-boto.ec2.connection

[3] http://aws.amazon.com/sdkforjava/

[4] http://aws.amazon.com/articles/3586?_encoding=UTF8&jiveRedirect=1

[5] http://aws.amazon.com/eclipse/

[6] http://aws.amazon.com/sdkforphp/

[7] http://aws.amazon.com/articles/4261?_encoding=UTF8&jiveRedirect=1

  • No labels