Einblicke in EC2 Container Serivce

Auf der re:Invent 2014 wurde ein neuer Dienst von AWS vorgestellt: EC2 Container Service. Mit diesem neuen Service soll Docker in das AWS Universum integriert werden. Gute Nachrichten für alle, die keine Lust auf Lock-In-Effekte haben und auf eine Standardisierung im Cloud Computing hoffen.

Wie der Name schon vermuten lässt ist der EC2 Container Service eine Erweiterung der bisherigen EC2- und VPC-Infrastruktur. Um ein Gefühl für die neuen Möglichkeiten eines Services zu bekommen lohnt es sich immer selbst einen Blick zu riskieren. Wie man ein kleines Testsetup aufsetzt möchte ich im Folgenden kurz beschreiben. Dies ist eine übersetzte, gekürzte und leicht angepasste Version aus dem offiziellen How-To.

Vorbereitungen

Die folgenden Vorbereitungen sind notwendig, damit der EC2 Container Service beispielhaft ausprobiert werden kann.

  • Unter http://aws.amazon.com/de/ecs/preview/ beantragt man einen Zugang für den EC2 Container Service. Dies ist notwendig, da sich der Service zur Zeit noch in einer Testphase (Preview) befindet. Die Freischaltung sollte nicht mehr als 24 Stunden in Anspruch nehmen.
  • AWS Web Console öffnen und in die Region US East (N. Virginia) oder auch us-east-1 wechseln.
  • IAM Role für Docker-Instanzen erstellen.

    • Neue Rolle erstellen
    • Tab Set Role Name: eindeutigen Namen vergeben
    • Tab Select Role Type: Amazon EC2 auswählen
    • Tab Set Permissions: Option Custom Policy auswählen
    • Box Policy Document: mit folgender Policy befüllen

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ecs:CreateCluster",
                      "ecs:RegisterContainerInstance",
                      "ecs:DeregisterContainerInstance",
                      "ecs:DiscoverPollEndpoint",
                      "ecs:Submit*",
                      "ecs:Poll"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      
    • Anlegen der Rolle abschließen
  • SecurityGroup anlegen (SSH, HTTP und HTTPS für Inbound freigeben)
  • Keypair mit SSH-Key anlegen oder importieren
  • AWS CLI Preview installieren
    • amazon-ecs-cli-preview.tar.gz herunterladen und entpacken
    • im entpackten Verzeichnis awscli-bundle den Befehl python ./install ausführen
    • Ausgabe You can now run: /home/ec2-user/.local/lib/aws/bin/aws --version beachten
    • Zeile alias aws2='/home/ec2-user/.local/lib/aws/bin/aws' in Datei ~/.bash_profile einfügen (Pfad entsprechend der Ausgabe von oben anpassen)

Cluster bestücken

Damit Docker-Container über den EC2 Container Service ausgeführt werden können muss zuerst ein Cluster mit einer oder mehreren EC2-Instanzen bestückt werden.

  • EC2-Instanz starten
  • Communiy AMI ami-34ddbe5c suchen und auswählen
  • IAM Role (siehe Vorbereitungen) wählen
  • Auto-assign Public IP auswählen
  • SecurityGroup (siehe Vorbereitungen) wählen
  • Keypair (siehe Vorbereitungen) wählen
  • EC2-Instanz starten und 2-3 Minuten warten

Dieser Vorgang kann beliebig oft wiederholt werden. Es können zum Test auch verschiedene Instanz-Typen gestartet werden.

Container ausführen

  • aws2 ecs list-container-instances --region us-east-1 ausführen und überprüfen ob EC2-Instanzen im Cluster angemeldet sind.

    {
            "containerInstanceArns": [
                    "arn:aws:ecs:us-east-1:166876438428:container-instance/6f8d7aa0-4136-40d3-b427-f79290b879cb", 
                    "arn:aws:ecs:us-east-1:166876438428:container-instance/a66323c9-d51e-4de2-9d35-73b6bff09c65"
            ]
    }
    
  • Task-Definition für EC2 Container Service anlegen

    • Datei task.json mit folgendem Inhalt anlegen

      [
          {
              "image": "tutum/wordpress-stackable",
              "name": "wordpress",
              "cpu": 10,
              "memory": 400,
              "essential": true,
              "links": [
                  "db"
              ],
              "entryPoint": [
                  "/bin/sh",
                  "-c"
              ],
              "environment": [
                  {
                      "name": "DB_USER",
                      "value": "root"
                  },
                  {
                      "name": "DB_PASS",
                      "value": "fQaxZRCGgqgfhdjN8okf6vxYLmfNuq"
                  }
              ],
              "portMappings": [
                  {
                      "containerPort": 80,
                      "hostPort": 80
                  }
              ]
          },
          {
              "image": "mysql",
              "name": "db",
              "cpu": 10,
              "memory": 400,
              "essential": true,
              "entryPoint": [
                  "/entrypoint.sh"
              ],
              "environment": [
                  {
                      "name": "MYSQL_ROOT_PASSWORD",
                      "value": "fQaxZRCGgqgfhdjN8okf6vxYLmfNuq"
                  }
              ],
              "portMappings": []
          }
      ]
      
    • Task-Definition erstellen (Pfad zur Datei task.json anpassen) aws ecs register-task-definition --family wordpress --container-definitions file://task.json --region us-east-1
    • Task starten aws2 ecs run-task --task-definition wordpress:1 --region us-east-1
    • Tasks anzeigen

      aws2 ecs list-tasks --region us-east-1
      {
          "taskArns": [
                  "arn:aws:ecs:us-east-1:166876438428:task/a27ba03e-bf28-4a5b-bbce-647920e4fc0b"
          ]
      }
      
    • Task beschreiben (ID aus vorheriger Ausgabe übernehmen)

      aws2 ecs describe-tasks  --tasks a27ba03e-bf28-4a5b-bbce-647920e4fc0b --region us-east-1
      

      In Ausgabe nach containerInstanceArn suchen.

    • Details zur Container-Instance abfragen aws2 ecs describe-container-instances --container-instances a66323c9-d51e-4de2-9d35-73b6bff09c65 --region us-east-1und dabei die ID aus vorheriger Abfrage einsetzen. In der Ausgabe befindet sich die Instance-ID der EC2-Instanz.
    • EC2-Instanz über Web Console suchen und öffentliche IP im Browser öffnen.
    • Es sollte der Setup-Wizard von Wordpress erscheinen.

Ähnliche Tags

ECS aws

Teilen

           

RSS

  RSS

Newsletter


Andreas Wittig

Andreas Wittig

Ich bin Autor von Author of Amazon Web Services in Action. Ich arbeite als Software Engineer und unabhängiger Berater mit dem Fokus auf AWS und DevOps. Engagiere mich!

Fehlt etwas in meinem Artikel? Ich freue mich auf dein Feedback! @andreaswittig oder andreas@widdix.de.


Veröffentlicht am
Tags aws, ECS,