<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.service.amazon.ec2.ebs">
    <title>Zend_Service_Amazon_Ec2: Elastischer Block Speicher (EBS)</title>

    <para>
        Amazon Elastischer Block Speicher (Amazon EBS) ist ein neuer Typ an Speicher der speziell
        für Amazon EC2 Instanzen entwickelt wurde. Amazon EBS erlaubt es ein Volume zu erstellen
        das als Device von Amazon EC2 Instanzen gemountet werden kann. Amazon EBS Volums verhalten
        sich wie rohe unformatierte externe Block Devices. Sie haben einen vom Benutzer angegebenen
        Device Namen und bieten ein Block Device Interface. Man kann ein File System auf Amazon EBS
        Volums laden, oder Sie genauso verwenden wie man ein Block Device verwenden würde.
    </para>

    <para>
        Man kann bis zu zwanzig Amazon EBS Volums jeder Größe erstellen (von einem GiB bis zu einem
        TiB). Jedes Amazon EBS Volume kann jeder Amazon EC2 Instanz angehängt werden welche in der
        selben Availability Zone ist, oder kann auch un-angehängt bleiben.
    </para>

    <para>
        Amazon EBS bietet die Möglichkeit einen Snapshot der eigenen Amazon EBS Volums auf Amazon
        S3 zu erstellen. Man kann diese Snapshots als Startpunkt für neue Amazon EBS Volums
        verwenden und kann eigene Daten auf diese Art für eine lange Zeit schützen.
    </para>

    <sect2 id="zend.service.amazon.ec2.ebs.creating">
        <title>EBS Volums und Snapshots erstellen</title>

        <example id="zend.service.amazon.ec2.ebs.creating.volume">
            <title>Ein neues EBS Volume erstellen</title>

            <para>
                Um ein brandneues EBS Volume zu erstellen benötigt man die Größe und die Zone in
                der das EBS Volume sein soll.
            </para>
            <para>
                <code>createNewVolume</code> gibt ein Array zurück das Informationen über das neue
                Volume enthält. Diese beinhalten volumeId, size, zone, status und createTime.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->createNewVolume(40, 'us-east-1a');
]]></programlisting>
        </example>

        <example id="zend.service.amazon.ec2.ebs.creating.volumesnapshot">
            <title>Ein EBS Volume von einem Snapshot erstellen</title>

            <para>
                Um ein EBS Volume von einem Snapshot zu erstellen benötigt man die snapshot_id
                in die Zone in der man das EBS Volume haben will.
            </para>

            <para>
                <code>createVolumeFromSnapshot</code> gibt ein Array mit Informationen zurück.
                Diese enthalten volumeId, size, zone, status, createTime und snapshotId.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->createVolumeFromSnapshot('snap-78a54011', 'us-east-1a');
]]></programlisting>
        </example>

        <example id="zend.service.amazon.ec2.ebs.creating.snapshot">
            <title>Einen Snapshot von einem EBS Volume erstellen</title>

            <para>
                Um einen Snapshot von einem EBS Volume zu erstellen wird die volumeId des EBS
                Volums benötigt.
            </para>

            <para>
                <code>createSnapshot</code> gibt ein Array zurück das Informationen über den neuen
                Volume Snapshot enthält. Dieses beinhaltet snapshotId, volumeId, status, startTime
                und progress.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->createSnapshot('volumeId');
]]></programlisting>
        </example>
    </sect2>

    <sect2 id="zend.service.amazon.ec2.ebs.describing">
        <title>EBS Volumes und Snapshots beschreiben</title>

        <example id="zend.service.amazon.ec2.ebs.describing.volume">
            <title>Ein EBS Volume beschreiben</title>

            <para>
                <code>describeVolume</code> erlaubt es Informationen über ein EBS Volume oder ein
                Set von EBS Volums zu erhalten. Wenn nichts angegeben wird, werden alle EBS Volums
                zurück gegeben. Wenn nur ein EBS Volume beschrieben werden soll, kann ein String
                übergeben werden, während ein Array von EBS Volume Id's übergeben werden können um
                diese zu beschreiben.
            </para>

            <para>
                <code>describeVolume</code> gibt ein Array mit Informationen über jedes Volume
                zurück. Dieses enthält die volumeId, size, status und createTime. Wenn das Volume
                an eine Instanz angehängt ist, wird ein zusätzlicher Wert attachmentSet
                zurückgegeben. Ein gesetztes Attachment enthält Informationen über die Instanz
                bei der das EBS Volume angehängt ist. Diese enthalten volumeId, instanceId,
                device, status und attachTime.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->describeVolume('volumeId');
]]></programlisting>
        </example>

        <example id="zend.service.amazon.ec2.ebs.describing.attachedvolumes">
            <title>Angehängte Volumes beschreiben</title>

            <para>
                Um eine Liste der EBS Volumes, die einer laufenden Instanz aktuell angehängt sind,
                zurückzugeben kann man diese Methode aufrufen. Sie gibt nur EBS Volumes zurück die
                Instanzen angehängt sind, welche die übergebene instanceId haben.
            </para>

            <para>
                <code>describeAttachedVolumes</code> gibt die gleichen Informationen wie
                <code>describeVolume</code> zurück, allerdings nur für die EBS Volumes die der
                spezifizierten instanceId aktuell angehängt sind.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->describeAttachedVolumes('instanceId');
]]></programlisting>
        </example>

        <example id="zend.service.amazon.ec2.ebs.describing.snapshot">
            <title>Einen EBS Volume Snapshot beschreiben</title>

            <para>
                <code>describeSnapshot</code> erlaub es Informationen über einen EBS Volume
                Snapshot oder ein Set von EBS Volume Snapshots zu erhalten. Wenn nichts übergeben
                wurde, dann werden Informationen über alle EBS Volume Snapshots zurückgegeben. Wenn
                nur die Beschreibung eines EBS Volume Snapshot benötigt wird kann dessen snapshotId
                übergeben werden, während ein Array von EBS Volume Snapshot Id's übergeben werden
                kann um mehrere zu beschreiben.
            </para>

            <para>
                <code>describeSnapshot</code> gibt ein Array mit Informationen über jedes EBS
                Volume Snapshot zurück. Dieses enthält snapshotId, volumeId, status, startTime
                und progress.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->describeSnapshot('volumeId');
]]></programlisting>
        </example>
    </sect2>

    <sect2 id="zend.service.amazon.ec2.ebs.attachdetach">
        <title>Anhängen und Entfernen von Volumes an Instanzen</title>

        <example id="zend.service.amazon.ec2.ebs.attachdetach.attach">
            <title>Ein EBS Volume anhängen</title>

            <para>
                <code>attachVolume</code> hängt ein EBS Volume an eine laufende Instanz an. Um
                ein Volume anzuhängen muß man die volumeId, die instanceId und das device
                <emphasis>(ex: /dev/sdh)</emphasis> spezifizieren.
            </para>

            <para>
                <code>attachVolume</code> gibt ein Array mit Informationen über über den
                angehängten Status zurück. Dieses enthält volumeId, instanceId, device, status
                und attachTime.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->attachVolume('volumeId', 'instanceid', '/dev/sdh');
]]></programlisting>
        </example>

        <example id="zend.service.amazon.ec2.ebs.attachdetach.detach">
            <title>Ein EBS Volume entfernen</title>

            <para>
                <code>detachVolume</code> entfernt ein EBS Volume von einer laufenden Instanz.
                <code>detachVolume</code> benötigt die Spezifikation der volumeId mit der
                optionalen instanceId und dem device name die beim Anhängen des Volumes angegeben
                wurden. Wenn man das Entfernen erzwingen will kann man den vierten Parameter
                auf <constant>TRUE</constant> setzen und er wird das Volume zwangsweise entfernen.
            </para>

            <para>
                <code>detachVolume</code> gibt ein Array zurück das Statusinformationen über das
                EBS Volume enthält. Diese sind volumeId, instanceId, device, status und attachTime.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->detachVolume('volumeId');
]]></programlisting>
        </example>

        <note>
            <title>Erzwungene Entfernung</title>

            <para>
                Man sollte eine Entfernung nur dann erzwingen wenn der vorhergehende
                Entfernungsversuch nicht sauber durchgeführt wurde (Loggen in eine Instanz, das
                Volume unmounten, und normal entfernen). Diese Option kann zu Datenverlusten oder
                einem beschädigten Dateisystem führen. Diese Option sollte nur als letzter Weg
                verwendet werden um ein Volume von einer fehlerhaften Instanz zu entfernen. Die
                Instanz hat keine Möglichkeit die Caches vom Dateisystem zu flushen oder die
                Metadaten des Dateisystems. Wenn man diese Option verwendet muß man anschließend
                eine Prüfung des Dateisystems und Reparatur Maßnahmen durchführen.
            </para>
        </note>
    </sect2>

    <sect2 id="zend.service.amazon.ec2.ebs.deleting">
        <title>EBS Volumes und Snapshots löschen</title>

        <example id="zend.service.amazon.ec2.ebs.deleting.volume">
            <title>Löschen eines EBS Volums</title>

            <para>
                <code>deleteVolume</code> löscht ein entferntes EBS Volume.
            </para>

            <para>
                <code>deleteVolume</code> gibt ein boolsches <constant>TRUE</constant> oder
                <constant>FALSE</constant> zurück.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->deleteVolume('volumeId');
]]></programlisting>
        </example>

        <example id="zend.service.amazon.ec2.ebs.deleting.snapshot">
            <title>Löschen eines EBS Volume Snapshots</title>

            <para>
                <code>deleteSnapshot</code> löscht einen EBS Volume Snapshot.
            </para>

            <para>
                <code>deleteSnapshot</code> gibt ein boolsches <constant>TRUE</constant> oder
                <constant>FALSE</constant> zurück.
            </para>

            <programlisting language="php"><![CDATA[
$ec2_ebs = new Zend_Service_Amazon_Ec2_Ebs('aws_key','aws_secret_key');
$return = $ec2_ebs->deleteSnapshot('snapshotId');
]]></programlisting>
        </example>
    </sect2>
</sect1>
