Successfully reported this slideshow.

Tech Talk: Cloud Computing

3,077 views

Published on

Tech Talk, Thema Cloud Computing (DLR Köln-Porz, 25. März 2008)

Published in: Technology
  • Be the first to comment

Tech Talk: Cloud Computing

  1. 1. Tech Talk: Cloud Computing Roland Gude, DLR Simulations- und Softwaretechnik 25. März 2008
  2. 2. Gliederung <ul><li>Einführung </li></ul><ul><li>Übersicht über Amazon Webservices </li></ul><ul><li>Beispiel </li></ul>
  3. 3. Einführung <ul><li>Cloud Computing </li></ul><ul><ul><li>Dynamische Cluster </li></ul></ul><ul><li>nutzen der Amazon Infrastructure (Web Services) </li></ul><ul><li>Virtuelle Maschinen (eigene Images) </li></ul><ul><li>verteilt und parallel </li></ul><ul><li>Skalierbar (auch automatisch) </li></ul>
  4. 4. AWS Überblick <ul><li>EC2: Elastic Cloud Computing </li></ul><ul><li>S3: Simple Storage Service </li></ul><ul><li>SQS: Simple Queue Service </li></ul><ul><li>SimpleDB </li></ul>
  5. 5. EC2: Elastic Cloud Computing <ul><li>Verwalten virtueller Maschinen </li></ul><ul><ul><li>Amazon Machine Image (AMI) </li></ul></ul><ul><li>Tools zum erstellen von AMI </li></ul><ul><li>Starten/stoppen von AMI Instanzen </li></ul><ul><ul><li>Small: 1,7 GB RAM, 1 EC2 Compute Unit* 160 GB „platte“, 32-Bit Platform ($0.10/h) </li></ul></ul><ul><ul><li>Large: 7,5 GB RAM, 4 EC2 Compute Units 850 GB „platte“, 64-Bit Platform ($0.40/h) </li></ul></ul><ul><ul><li>Extra Large: 15 GB RAM, 8 EC2 Compute Units 1690 GB „platte“, 64-Bit Platform ($0.80/h) </li></ul></ul><ul><li>* EC2 Compute Unit etwa 1.0 – 1.2 GHz 2007 Opteron oder Xeon </li></ul>
  6. 6. S3: Simple Storage Service <ul><li>Buckets (USA oder Europa – Preisunterschied!) </li></ul><ul><li>Speichern von Objekten </li></ul><ul><ul><li>UUID </li></ul></ul><ul><ul><li>Jeweils 1 Byte bis 5 GB </li></ul></ul><ul><ul><li>Anzahl unbegrenzt </li></ul></ul><ul><li>z.B. Speichern der AMI </li></ul><ul><li>EC2 Instanzen haben keinen persistenten Speicher </li></ul><ul><ul><li>Logs, Ergebnise etc </li></ul></ul><ul><li>Download via HTTP/Bittorrent </li></ul>
  7. 7. S3 Preise <ul><li>United States (Europa) </li></ul><ul><ul><li>Storage </li></ul></ul><ul><ul><ul><li>$0.15 ($0.18) pro GB pro Monat </li></ul></ul></ul><ul><ul><li>Data Transfer </li></ul></ul><ul><ul><ul><li>$0.10 pro GB In </li></ul></ul></ul><ul><ul><ul><li>$0.18 pro GB out (ersten 10 TB) </li></ul></ul></ul><ul><ul><ul><li>$0.16 pro GB out (nächsten 40 TB) </li></ul></ul></ul><ul><ul><ul><li>$0.13 pro GB out (über 50 TB) </li></ul></ul></ul><ul><ul><ul><li>$0.00 (wie normal) EC2 </li></ul></ul></ul><ul><ul><li>Requests </li></ul></ul><ul><ul><ul><li>$0.01 ($0.012) pro 1000 PUT oder LIST </li></ul></ul></ul><ul><ul><ul><li>$0.01 ($0.012) pro 10000 andere Requests (außer DELETE) </li></ul></ul></ul>
  8. 8. SQS: Simple Queue Service <ul><li>Erstellen von Message Queues </li></ul><ul><li>Verteilen von Tasks </li></ul><ul><li>Anzahl Queues unbegrenzt </li></ul><ul><li>Anzahl Nachrichten unbegrenzt </li></ul><ul><li>Nachrichten Größe bis zu 8 KB </li></ul><ul><li>Requests </li></ul><ul><ul><li>$0.01 pro 10000 Requests </li></ul></ul><ul><li>Data Transfer </li></ul><ul><ul><li>Wie S3 </li></ul></ul>
  9. 9. SimpleDB (Limited Beta) <ul><li>Speichern strukturierter Daten </li></ul><ul><ul><li>Domain </li></ul></ul><ul><ul><ul><li>Items (Attribute/Values) </li></ul></ul></ul><ul><li>Anzahl Domains unbegrenzt </li></ul><ul><li>Anzahl Items pro Domain unbegrenzt </li></ul><ul><li>256 Attribute pro Item </li></ul><ul><li>Value: 1 Byte bis 1024 Byte </li></ul><ul><li>Kein Schema </li></ul><ul><li>Query Operatoren: =, !=, <, >, <=, >=, STARTS-WITH, AND, OR, NOT, INTERSECTION, UNION </li></ul><ul><li>Preis: $0.14 pro Stunde Maschinennutzung (wird gemessen, normalisiert auf 1 EC2 Compute Unit) Data Transfer wie S3 (plus Overhead 45 Byte pro Item und Attribut) </li></ul>
  10. 10. Cloud Computing mit Boto <ul><li>Boto </li></ul><ul><ul><li>Python library (andere libraries verfügbar) </li></ul></ul><ul><ul><li>Boto = Delphinart im Amazonas </li></ul></ul><ul><li>Vorher: </li></ul><ul><ul><li>Generieren von SSH Keypair </li></ul></ul><ul><ul><li>Erstellen von AMI (standards existieren) </li></ul></ul><ul><ul><li>Keys/Certificates (AWS Homepage) </li></ul></ul><ul><ul><ul><li>AWS Access Key (login) </li></ul></ul></ul><ul><ul><ul><li>AWS Secret Access Key (login) </li></ul></ul></ul><ul><ul><ul><li>Amazon Account nummer (rechte) </li></ul></ul></ul><ul><ul><ul><li>X.509 Zertifikat (bundling von AMI) </li></ul></ul></ul>
  11. 11. Login und Öffentlicher Zugriff <ul><li>>>> from boto.ec2.connection import EC2Connection </li></ul><ul><li>>>> conn = EC2Connection(aws_access_key, aws_secret_key) </li></ul><ul><li>>>> key_pair = conn.create_key_pair(‚mein_key_pair_name‘) </li></ul><ul><li>>>> #privater key: </li></ul><ul><li>>>> print key_pair.material </li></ul><ul><li>… </li></ul><ul><li>(speichern, chmod 600) </li></ul>
  12. 12. Images und Instanzen <ul><li>>>> images = conn.get_all_images() </li></ul><ul><li>[…] # lange Liste </li></ul><ul><li>>>> for i, image in enumerate(images) </li></ul><ul><li>… if image.location.startswith(‚ec2-public-images‘): </li></ul><ul><li>… print „%s, %s“%(i, image.location) </li></ul><ul><li>22, ec2-public-images/fedora-core4-base.manifest.xml </li></ul><ul><li>… </li></ul><ul><li>159, ec2-public-images/getting-started.manifest.xml </li></ul><ul><li>(nummern variieren) </li></ul>
  13. 13. Images und Instanzen <ul><li>>>> image = images[22] </li></ul><ul><li>>>> print image.location </li></ul><ul><li>ec2-public-images/getting-started.manifest.xml </li></ul><ul><li>>>> reservation = image.run(key_name=‚my_key_pair_name‘) </li></ul><ul><li>>>> instance.state </li></ul><ul><li>u‘pending‘ </li></ul><ul><li>Warten </li></ul><ul><li>>>> instance.update() </li></ul><ul><li>>>> instance.state </li></ul><ul><li>u‘running‘ </li></ul>
  14. 14. Images und Instanzen <ul><li>>>> instance.stop() </li></ul><ul><li>>>> instance.update() </li></ul><ul><li>>>> instance.state() </li></ul><ul><li>u‘shutting down‘ </li></ul><ul><li>Warten </li></ul><ul><li>>>> instance.update() </li></ul><ul><li>>>> instance.state </li></ul><ul><li>u‘terminated‘ </li></ul>
  15. 15. IP-Adressen <ul><li>Public (von außen erreichbar) </li></ul><ul><li>Private (nur innerhalb AWS) </li></ul><ul><li>Zusätzlich Domain namen (public/private) </li></ul><ul><li>>>> print instance.dns_name </li></ul><ul><li>ec2-72-44-40-153.z-2.compute-1.amazonaws.com </li></ul><ul><li>>>> print instance.private_dns_name </li></ul><ul><li>domU-12-31-35-00-53-14.z-2.compute-1.internal </li></ul>
  16. 16. Firewall <ul><li>Nutzerdefinierte Security Groups </li></ul><ul><li>Bis zu 100 Regeln pro Gruppe </li></ul><ul><li>>>> rs = conn.get_all_security_groups() </li></ul><ul><li>>>> print rs </li></ul><ul><li>[SecurityGroup:default] </li></ul><ul><li>>>> default = rs[0] </li></ul><ul><li>Neue regel: </li></ul><ul><li>>>> default.authorize(‚tcp‘, 80, 80, ‚0.0.0.0/0‘) </li></ul><ul><li>Regel löschen </li></ul><ul><li>>>> default.revoke(‚tcp‘, 80, 80, ‚0.0.0.0/0‘) </li></ul>
  17. 17. Firewall <ul><li>Neue Gruppe </li></ul><ul><li>>>> web_test = conn.create_security_group(‚web_test‘, ‚testdescription‘) </li></ul><ul><li>>>> web_test.authorize(‚tcp‘, 80, 80, ‚0.0.0.0/0‘) </li></ul><ul><li>>>> web_test.authorize(‚tcp‘, 22, 22, ‚0.0.0.0/0‘) </li></ul><ul><li>Verbinden mit ssh </li></ul><ul><li>Ssh –i <pfad zum private key> root@PUBLIC_DNS_NAME </li></ul>
  18. 18. AMI erstellen <ul><li>Rechner installieren/konfigurieren (kann auch virtuelle Maschine sein) </li></ul><ul><li>AMI Tools installieren </li></ul><ul><li>X.509 Zertifikat kopieren </li></ul><ul><li>(Public Image als Basis) </li></ul><ul><li>ec2-bundle-vol –d <exclude pfad> -k <pfad zum key> -c <pfad zum zertifikat> </li></ul><ul><li>Erzeugt viele dateien… </li></ul><ul><li>AMI hochladen </li></ul><ul><li>Ec2-upload-bundle –b <bucket_name> -m <pfad zum manifest> -a <aws-access-key> -s <aws-secret-access-key> </li></ul>
  19. 19. Eigenes AMI nutzen <ul><li>>>> from boto.s3.connection import S3COnnection </li></ul><ul><li>>>> conn = S3Connection(aws_key, aws_secret_key) </li></ul><ul><li>>>> rs = conn.get_all_buckets() </li></ul><ul><li>>>> bucket = rs[0] # oder wo auch immer das AMI liegt </li></ul><ul><li>>>> id = conn.register_image(bucket.name + ‚/image.manifest.xml‘) </li></ul><ul><li>>>> for i, image in enumerate(images) </li></ul><ul><li>… if image.id = id </li></ul><ul><li>… print i </li></ul><ul><li>186 </li></ul><ul><li>>>> image = image[186] </li></ul>

×