Bundles von cloudbasierten Anwendungen

Tipp

Diese Inhalte sind ein Auszug aus dem E-Book „Architecting Cloud Native .NET Applications for Azure“, verfügbar in der .NET-Dokumentation oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Eine wichtige Eigenschaft von cloudnativen Anwendungen ist, dass sie die Möglichkeiten der Cloud nutzen, um die Entwicklung zu beschleunigen. Dieser Entwurf bedeutet oft, dass eine vollständige Anwendung verschiedene Arten von Technologien verwendet. Anwendungen können in Docker-Containern ausgeliefert werden, einige Dienste können Azure Functions verwenden, während andere Komponenten direkt auf virtuellen Computern ausgeführt werden können, die auf großen Servern mit GPU-Hardwarebeschleunigung zugeordnet sind. Keine zwei cloudnativen Anwendungen sind identisch, sodass es schwierig war, einen einheitlichen Mechanismus für ihre Bereitstellung zu finden.

Die Docker-Container können auf Kubernetes mit einem Helm-Chart für die Bereitstellung ausgeführt werden. Azure Functions kann mithilfe von Terraform-Vorlagen zugewiesen werden. Schließlich können die virtuellen Computer mithilfe von Terraform zugeordnet, aber mit Ansible erstellt werden. Dies stellt eine große Vielfalt an Technologien dar, und es gab bisher keine Möglichkeit, sie alle in einem geeigneten Paket zusammenzufassen. Allerdings nur bis jetzt.

Cloudnative Anwendungspakete (Cloud Native Application Bundles, CNABs) sind eine gemeinsame Anstrengung vieler communityorientierter Unternehmen wie Microsoft, Docker und HashiCorp zur Entwicklung einer Spezifikation für die Paketierung verteilter Anwendungen.

Das Projekt wurde im Dezember 2018 angekündigt, sodass noch einiges an Arbeit zu leisten ist, um das Projekt der breiten Öffentlichkeit vorzustellen. Es gibt jedoch bereits eine offene Spezifikation und eine Referenzimplementierung, die als Duffle bezeichnet wird. Dieses Tool, das in Go geschrieben wurde, ist ein gemeinsames Projekt von Docker und Microsoft.

Die CNABs können verschiedene Arten von Installationstechnologien enthalten. Dieser Aspekt ermöglicht es, dass Komponenten wie Helm-Charts, Terraform-Vorlagen und Ansible-Playbooks im selben Paket koexistieren können. Nach dem Erstellen sind die Pakete eigenständig und portierbar. Sie können von einem USB-Stick aus installiert werden. Die Pakete sind kryptografisch signiert, um sicherzustellen, dass sie von der angegebenen Quelle stammen.

Der Kern eines cloudnativen Anwendungspakets (CNAB) ist eine Datei namens bundle.json. Diese Datei definiert den Inhalt des Pakets, seien es Terraform-Inhalte, Images oder andere Elemente. Abbildung 11-9 definiert ein CNAB, das einige Terraform-Inhalte aufruft. Beachten Sie jedoch, dass er tatsächlich ein Aufrufimage definiert, das zum Aufrufen des Terraform-Inhalts verwendet wird. Beim Verpacken wird die Docker-Datei, die sich im Verzeichnis cnab befindet, zu einem Docker-Image erstellt, das in das Paket aufgenommen wird. Da Terraform in einem Docker-Container im Paket installiert ist, müssen die Benutzer Terraform nicht auf ihrem Computer installiert haben, um das Paket auszuführen.

{
    "name": "terraform",
    "version": "0.1.0",
    "schemaVersion": "v1.0.0-WD",
    "parameters": {
        "backend": {
            "type": "boolean",
            "defaultValue": false,
            "destination": {
                "env": "TF_VAR_backend"
            }
        }
    },
    "invocationImages": [
        {
        "imageType": "docker",
        "image": "cnab/terraform:latest"
        }
    ],
    "credentials": {
        "tenant_id": {
            "env": "TF_VAR_tenant_id"
        },
        "client_id": {
            "env": "TF_VAR_client_id"
        },
        "client_secret": {
            "env": "TF_VAR_client_secret"
        },
        "subscription_id": {
            "env": "TF_VAR_subscription_id"
        },
        "ssh_authorized_key": {
            "env": "TF_VAR_ssh_authorized_key"
        }
    },
    "actions": {
        "status": {
            "modifies": true
        }
    }
}

Abbildung 10-18: Eine Terraform-Beispieldatei

Die bundle.json definiert auch eine Reihe von Parametern, die an den Terraform-Inhalt übergeben werden. Die Parametrisierung des Pakets ermöglicht die Installation in verschiedenen Umgebungen.

Das CNAB-Format ist außerdem flexibel, sodass es für jede beliebige Cloud verwendet werden kann. Es kann sogar für lokale Lösungen wie OpenStack verwendet werden.

DevOps-Entscheidungen

Heutzutage gibt es so viele großartige Tools im DevOps-Bereich und noch mehr ausgezeichnete Bücher und Abhandlungen über erfolgreiche Lösungen. Ein beliebtes Buch für den Einstieg in die DevOps-Journey ist The Phoenix Project (Das Phoenix-Projekt), das die Transformation eines fiktiven Unternehmens von NoOps zu DevOps beschreibt. Eine Sache ist sicher: DevOps ist bei der Bereitstellung komplexer, cloudnativer Anwendungen nicht länger nur wünschenswert. Es ist eine Voraussetzung und sollte zu Beginn eines jeden Projekts eingeplant und mit Ressourcen ausgestattet werden.

Referenzen