AWS Container Service auf beliebiger Infrastruktur ausführen ECS Anywhere Workloads unter Ubuntu Server
Mit ECS Anywhere lässt sich der Container-Service von AWS außerhalb der Amazon-Cloud nutzen. Den On-Premises-Betrieb auf einem Ubuntu Server beschreiben wir in diesem Beitrag.

Container standortunabhängig, On-Premises oder in der Cloud verwalten – das ermöglicht seit kurzem ECS Anywhere. Wer Ubuntu als Basis-Betriebssystem für seine ECS-Cluster im eigenen Rechenzentrum oder anderswo verwendet, kann sich auf Ubuntus Hardware-Support, Professional Services und das umfangreiche Ökosystem stützen. Das wiederum führt dazu, dass diese ECS-Cluster überall, wo sie benötigt werden, mit optimaler Leistung laufen.
Nachfolgend wird der Betrieb des ECS Anywhere-Agenten auf einem Ubuntu-Server in einer On-Premises-Installation beschrieben. Mithilfe von Multipass wird dafür ein On-Premises-Server simuliert. Diese Vorgehensweise ist aber auf jeder unterstützten Ubuntu-Version möglich, egal ob im eigenen Rechenzentrum oder einer Public Cloud.
Voraussetzungen
Um dieser Anleitung folgen zu können, muss das AWS-CLI-Dienstprogramm auf dem zu verwendenden Rechner installiert und konfiguriert sein. Multipass wird hier verwendet, um eine Ubuntu-VM zu erstellen. Diese Anweisungen können aber auch direkt auf den eigenen Ubuntu-Servern ausgeführt werden, auf denen die ECS Anywhere-Workloads ausgeführt werden sollen.
Mit Multipass kann man einfach und schnell offizielle Ubuntu-VMs für Windows, macOS und Linux erhalten. Die Installation von Multipass unter Linux gelingt wie folgt:
sudo snap install multipass
Launch-Variablen setzen und IAM-Profil erstellen
Im ersten Schritt müssen auf dem Linux-Rechner, auf dem AWS CLI installiert ist (nicht unbedingt der Rechner, auf dem die ECS Anywhere-Arbeitslasten ausgeführt werden sollen), die Umgebungsvariablen festgelegt werden:
AWS_DEFAULT_REGION=eu-west-1
ROLE_NAME=ecsMithrilRole
CLUSTER_NAME=test-ecs-anywhere
SERVICE_NAME=test-ecs-anywhere-svc
Nun wird eine Datei namens ssm-trust-policy.json mit dem folgenden Inhalt erzeugt:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": [
"ssm.amazonaws.com"
]},
"Action": "sts:AssumeRole"
}
}
Anschließend wird das Profil erzeugt und verifiziert:
aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://ssm-trust-policy.json
aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role
# Verify
aws iam list-attached-role-policies --role-name $ROLE_NAME
Erstellen des ECS-Anywhere-Clusters
Nun erstellen wir den ECS-Anywhere-Cluster und den Aktivierungsschlüssel:
aws ecs create-cluster --cluster-name $CLUSTER_NAME
aws ssm create-activation --iam-role $ROLE_NAME | tee ssm-activation.json
Starten einer Ubuntu-VM mit Multipass (optional)
Nun geht es daran, eine Ubuntu 20.04-VM mit Multipass zu erstellen. Dieser Schritt ist nicht erforderlich, wenn bereits ein Ubuntu-Server vorhanden ist, auf dem die ECS Anywhere-Workloads ausgeführt werden sollen.
Dies könnte eine beliebige Ubuntu-VM oder Bare-Metal-Maschine im eigenen Rechenzentrum sein oder sogar eine Ubuntu-Instanz, die in einer anderen PUblic Cloud läuft. In diesem Fall werden diese Befehle einfach direkt auf diesem Server ausgeführt:
multipass launch focal -n ecs-anywhere-ubuntu
Installation des ECS-Anywhere-Agenten und der erforderlichen Software unter Ubuntu
Jetzt wird der ECS Anywhere-Agent auf dem Ubuntu-Server installiert. Dabei muss sichergestellt werden, dass die ACTIVATION_ID und der ACTIVATION_CODE durch die in den vorherigen Schritten generierten Werte ersetzt werden:
# Führen Sie alle Befehle auf dem Ubuntu-System aus, auf dem Sie die ECS-Workloads ausführen werden
export ACTIVATION_ID=<your activation ID>
export ACTIVATION_CODE=<your activation code>
# Download the ecs-anywhere install Script
curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent-packages-preview.s3.eu-west-1.amazonaws.com/ecs-anywhere-install.sh" && sudo chmod +x ecs-anywhere-install.sh
# (Optional) Check integrity of the shell script
curl -o "ecs-anywhere-install.sh.sha256" "https://amazon-ecs-agent-packages-preview.s3.eu-west-1.amazonaws.com/ecs-anywhere-install.sh.sha256" && sha256sum -c ecs-anywhere-install.sh.sha256
# Run the install script
sudo ./ecs-anywhere-install.sh \
--cluster test-ecs-anywhere \
--activation-id $ACTIVATION_ID \
--activation-code $ACTIVATION_CODE \
--region eu-west-1
Installation validieren
Nach Abschluss der Installation wird die SSH-Sitzung beendet und zurückgegangen zu dem Rechner, auf dem die ursprünglichen AWS-CLI-Befehle ausgeführt wurden. Nun muss man überprüfen, ob die Instanzen verbunden sind und laufen:
aws ssm describe-instance-information
aws ecs list-container-instances --cluster $CLUSTER_NAME
Task-Definition registrieren und Task jetzt über die Befehlszeile ausführen
In diesem Schritt wird eine Datei namens external-task-definition.json erzeugt; sie hat die folgenden Inhalte:
{
"requiresCompatibilities": [
"EXTERNAL"
],
"containerDefinitions": [
{
"name": "nginx",
"image": "nginx:latest",
"memory": 256,
"cpu": 256,
"essential": true,
"portMappings": [
{
"containerPort": 80,
"hostPort": 8080,
"protocol": "tcp"
}
]
}
],
"networkMode": "bridge",
"family": "nginx"
}
Anschließend gilt es, eine neue Aufgabendefinition für den ECS Anywhere-Cluster zu registrieren und diese Aufgabe auf dem eigenen Ubuntu-Server auszuführen.
#Register the task definition
aws ecs register-task-definition --cli-input-json file://external-task-definition.json
#Run the task
aws ecs run-task --cluster $CLUSTER_NAME --launch-type EXTERNAL --task-definition nginx
#Get the Task ID
TEST_TASKID=$(aws ecs list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns[0]')
#Verify Task is Running
aws ecs describe-tasks --cluster $CLUSTER_NAME --tasks $TEST_TASKID
Nun können wir überprüfen, ob der Container „zuhört“. Hierfür gehen wir auf http://<your VM IP>:8080 und sollten nun nginx lokal in Betrieb sehen.
Aufräumen
Für das Aufräumen sind die folgenden Schritte auszuführen:
# Cleanup SSM
aws ssm describe-activations | jq ".ActivationList | .[] | .ActivationId" | xargs -L 1 aws ssm delete-activation --activation-id
aws ssm describe-instance-information | jq ".InstanceInformationList | .[] | .InstanceId" | grep "mi-" | xargs -L 1 aws ssm deregister-managed-instance --instance-id
# Cleanup ECS resources
aws ecs list-container-instances --cluster $CLUSTER_NAME | jq ".containerInstanceArns | .[]" | xargs -L 1 aws ecs deregister-container-instance --cluster $CLUSTER_NAME --force --container-instance
aws ecs delete-cluster --cluster $CLUSTER_NAME
# Verify all items deleted are empty
aws ssm describe-activations
aws ssm describe-instance-information
aws ecs list-container-instances --cluster $CLUSTER_NAME
#Remove Multipass VM (optional)
multipass stop ecs-anywhere-ubuntu
multipass delete ecs-anywhere-ubuntu
Fazit
Mit ECS Anywhere können Anwender AWS ECS-Container auf einem beliebigen Ubuntu-Server ausführen, sei es im eigenen Rechenzentrum oder in einer beliebigen Public Cloud. In diesem Beispiel wurde eine Anwendung als eigenständige Aufgabe bereitgestellt.
In der AWS-Dokumentation finden sich Beispiele dafür, wie man eine ECS-Anwendung so bereitstellt, dass sie kontinuierlich ausgeführt wird, oder wie man sie hinter einem Load Balancer platziert. Durch die Kombination von ECS Anywhere mit Ubuntu Advantage erhalten Anwender die Sicherheit von Kernel-Live-Patching, volle Unterstützung für Tausende von Paketen, FIPS-Module und eine Reihe anderer Vorteile.
* Tytus Kurek ist Produktmanager bei Canonical, dem Herausgeber von Ubuntu. Als Autor bereichert er regelmäßig unser Ubuntu- und Open-Source-Special von Canonical mit neuen Beiträgen.
(ID:47481234)