<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>

<!-- Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->

<section id="aws-ec2-configuration">
    <title>Enabling the EC2 and S3 Compatible Interface</title>

    <para>The software that provides AWS API compatibility is installed along with &PRODUCT;. You must enable the services and perform some setup steps prior to using it.
    </para>
    <orderedlist>
        <listitem id="set-global-config"><para>Set the global configuration parameters for each service to true. 
                  See <xref linkend="global-config" />.</para></listitem>
        <listitem><para>Create a set of &PRODUCT; service offerings with names that match the Amazon service offerings.
                  You can do this through the &PRODUCT; UI as described in the Administration Guide.</para>
                  <warning><para>Be sure you have included the Amazon default service offering, m1.small. As well as any EC2 instance types that you will use.</para></warning>
        </listitem>
        <listitem><para>If you did not already do so when you set the configuration parameter in step <xref linkend="set-global-config"/>, restart the Management Server.</para>
                  <programlisting># service cloud-management restart</programlisting>
        </listitem>
    </orderedlist>
    <para>The following sections provides details to perform these steps</para>

    <section id="aws-api-settings">
        <title>Enabling the Services</title>
        <para>To enable the EC2 and S3 compatible services you need to set the configuration variables <emphasis>enable.ec2.api</emphasis>
        and <emphasis>enable.s3.api</emphasis> to true. You do not have to enable both at the same time. Enable the ones you need.
        This can be done via the &PRODUCT; GUI by going in <emphasis>Global Settings</emphasis> or via the API.</para>
        <para>The snapshot below shows you how to use the GUI to enable these services</para>

        <para>
        <mediaobject>
            <imageobject>
                <imagedata fileref="./images/ec2-s3-configuration.png"/>
            </imageobject>
            <textobject>
                <phrase>Use the GUI to set the configuration variable to <emphasis>true</emphasis></phrase>
            </textobject>
        </mediaobject>
        </para>

        <para>Using the &PRODUCT; API, the easiest is to use the so-called integration port on which you can make 
        unauthenticated calls. In Global Settings set the port to 8096 and subsequently call the <emphasis>updateConfiguration</emphasis> method.
        The following urls shows you how:</para>
    
        <para>
            <programlisting>
            http://localhost:8096/client/api?command=updateConfiguration&amp;name=enable.ec2.api&amp;value=true
            http://localhost:8096/client/api?command=updateConfiguration&amp;name=enable.ec2.api&amp;value=true
            </programlisting>
        </para>

        <para>Once you have enabled the services, restart the server.</para>
    </section>

    <section id="aws-ec2-service-offerings">
        <title>Creating EC2 Compatible Service Offerings</title>
        <para>You will also need to define compute service offerings with names compatible with the <ulink url="http://aws.amazon.com/ec2/instance-types/">
              Amazon EC2 instance types</ulink> API names (e.g m1.small,m1.large). This can be done via the &PRODUCT; GUI.
              Go under <emphasis>Service Offerings</emphasis> select <emphasis>Compute offering</emphasis> and either create
              a new compute offering or modify an existing one, ensuring that the name matches an EC2 instance type API name. The snapshot below shows you how:</para>
        <para>
            <mediaobject>
                <imageobject>
                    <imagedata fileref="./images/compute-service-offerings.png"/>
                </imageobject>
                <textobject>
                    <phrase>Use the GUI to set the name of a compute service offering to an EC2 instance
                    type API name.</phrase>
                </textobject>
            </mediaobject>
        </para>
    </section>
    <section id="aws-api-port-change">
        <title>Modifying the AWS API Port</title>
        <note>
            <para>(Optional) The AWS API listens for requests on port 7080. If you prefer AWS API to listen on another port, you can change it as follows:</para>
            <orderedlist numeration="loweralpha">
                <listitem><para>Edit the files /etc/cloud/management/server.xml, /etc/cloud/management/server-nonssl.xml,
                          and /etc/cloud/management/server-ssl.xml.</para></listitem>
                <listitem><para>In each file, find the tag &lt;Service name="Catalina7080"&gt;. Under this tag,
                          locate &lt;Connector executor="tomcatThreadPool-internal" port= ....&lt;.</para></listitem>
                <listitem><para>Change the port to whatever port you want to use, then save the files.</para></listitem>
                <listitem><para>Restart the Management Server.</para></listitem>
            </orderedlist>
            <para>If you re-install &PRODUCT;, you will have to re-enable the services and if need be update the port.</para>
        </note>
    </section> 

 </section>
