In diesem Dokument wird erläutert, wie Variablen, Variablenzuordnung und Abhängigkeiten in App Lifecycle Manager funktionieren.
Mit App Lifecycle Manager können Sie komplexe SaaS-Anwendungen bereitstellen und verwalten, indem Sie sie in modulare Einheiten unterteilen. Diese Einheiten, die durch Terraform Konfigurationen in Blueprints definiert werden, können über Abhängigkeiten miteinander verbunden werden, was eine ausgefeilte Orchestrierung und automatisierte Bereitstellung ermöglicht. Ein wichtiger Aspekt der Verwaltung dieser Einheiten und ihrer Interaktionen ist die Verwendung von Variablen und Variablenzuordnung.
Sie können komplexe, modulare und skalierbare Bereitstellungen mit automatisierter Bereitstellung, Kommunikation zwischen Einheiten und flexiblen Konfigurationsoptionen erstellen. Berücksichtigen Sie sorgfältig Ihre Variablenhierarchie, Abhängigkeitsbeziehungen und Variablenzuordnungen, um Ihre SaaS-Architektur und Verwaltungsabläufe in App Lifecycle Manager zu optimieren.
Einheiten und Variablen
Das Herzstück von App Lifecycle Manager sind Einheiten. Einheiten verwenden Variablen, um ihre Bereitstellung und ihr Verhalten anzupassen. Diese Variablen sind im Wesentlichen Terraform-Variablen, die Sie in der Datei variables.tf Ihres Blueprints definieren können. Damit können Sie Ihre Terraform-Konfigurationen parametrisieren, sodass sie in verschiedenen Umgebungen und Bereitstellungen wiederverwendet und angepasst werden können.
Erforderliche Variablen für die Bereitstellung von Einheiten
Sie können zwar benutzerdefinierte Variablen für Ihre Einheiten definieren, App Lifecycle Manager verwendet aber auch eine Reihe von erforderlichen Variablen. Diese Variablen werden von App Lifecycle Manager automatisch erkannt und verarbeitet, auch wenn sie nicht explizit in Ihrer Terraform-Konfiguration definiert sind.
Die erforderlichen Variablen sind:
project_idundproject_numberodertenant_project_idundtenant_project_number: Diese Variable gibt die Google Cloud Projekt-ID an, in der die Ressourcen Ihrer Einheit bereitgestellt werden. Sie können entwederproject_idundproject_numberodertenant_idundtenant_project_numberverwenden. Dieses Feld ist für die Ressourcenerstellung und ‑verwaltung im richtigen Google Cloud Projekt erforderlich.Sie finden Ihre Projekt-ID in der Google Cloud Google Cloud Console auf der Seite „Dashboard“. Suchen Sie im Bereich Cloud-Übersicht auf der Karte Projektinformationen nach dem Feld Projekt-ID.
project_numberodertenant_project_number: Ähnlich wieproject_id, stellt diese Variable die Google Cloud Projekt nummer dar. Sie könnenproject_numberodertenant_project_numberaustauschbar verwenden.Sie finden Ihre Projektnummer neben Ihrer Projekt-ID im Bereich Cloud-Übersicht auf der Karte Projektinformationen der Google Cloud Console Google Cloud Dashboardseite.
actuation_sa: Diese Variable stellt die E-Mail-Adresse des Aktivierungs-Dienstkontos dar. Dieses Dienstkonto ist ein vom Nutzer verwaltetes Dienstkonto, das von App Lifecycle Manager (über Infrastructure Manager) verwendet wird, um Ihre Terraform-Konfigurationen beim Bereitstellen, Aktualisieren oder Aufheben der Bereitstellung von Einheiten auszuführen.Wir empfehlen, ein dediziertes Aktivierungsdienstkonto pro Mandant (oder Einheit) zu verwenden, um das Prinzip der geringsten Berechtigung zu implementieren. Dadurch werden die potenziellen Auswirkungen von Sicherheitsverletzungen begrenzt und eine bessere Isolation zwischen Ihren Bereitstellungen erreicht.
Weitere Informationen zum Konfigurieren und Gewähren von Berechtigungen für Aktivierungs dienstkonten finden Sie unter Produktübersicht.
Hierarchie der Variablen für Einheiten
Variablen für Einheiten können an mehreren Stellen definiert und abgerufen werden. Wenn Sie App Lifecycle Manager verwenden, ist es wichtig, die Hierarchie der Variablenwerte zu verstehen, die bei Einheitsvorgängen verwendet werden.
Die Reihenfolge ist wie folgt (von der niedrigsten zur höchsten Priorität):
App Lifecycle Manager löst Variablenwerte in dieser Reihenfolge auf:
Vorhandene Eingabevariablen für die Einheit: Wenn eine Variable bereits für die Einheitsressource selbst definiert ist (z. B. aus einem vorherigen Vorgang oder einer vorherigen Konfiguration), hat dieser Wert die niedrigste Priorität. Wenn ein Variablenwert direkt für die Einheit festgelegt ist, wird er überschrieben, wenn Werte aus Quellen mit höherer Priorität in der Hierarchie gefunden werden.
Standardwerte für Releases: Standardwerte für Releases werden angewendet, wenn für eine Variable noch kein Wert für die Einheit festgelegt ist. Sie überschreiben jedoch vorhandene Variablen für Einheiten.
Einheitsvorgänge: Wenn Sie einen Einheitsvorgang wie
provisionoderupgradeausführen, können Sie Eingabevariablen explizit als Teil der Vorgangsanfrage angeben. Variablen, die in einem Einheitsvorgang angegeben werden, überschreiben Standardwerte für Releases und vorhandene Variablen für Einheiten.Zuordnungen von Eingabevariablen für Abhängigkeiten: Wenn eine Einheit von anderen Einheiten abhängig ist, können Variablenzuordnungen, die in der Art der Einheit definiert sind, Variablen werte aus den Ausgabevariablen der Abhängigkeitseinheiten abrufen. Dies ist die Quelle mit der höchsten Priorität. Variablen, die über Abhängigkeitszuordnungen abgerufen werden, überschreiben Werte aus Einheitsvorgängen, Standardwerte für Releases und vorhandene Variablen für Einheiten.
Dieser hierarchische Ansatz bietet Flexibilität und Kontrolle über die Variablenverwaltung. Sie können persistente Konfigurationen direkt für die Einheit festlegen (niedrigste Priorität), Standardwerte mit Releases definieren, Anpassungen für bestimmte Vorgänge vornehmen und die wichtigsten und überschreibenden Werte dynamisch aus Abhängigkeiten von Einheiten abrufen (höchste Priorität).
Abhängigkeiten der Einheit
Mit App Lifecycle Manager können Sie Abhängigkeiten zwischen Einheiten definieren. Dies ist wichtig für die Entwicklung komplexer SaaS-Anwendungen, bei denen verschiedene Komponenten voneinander abhängig sind. Abhängigkeiten sorgen dafür, dass verknüpfte Einheiten koordiniert bereitgestellt und verwaltet werden.
Sie definieren Abhängigkeiten innerhalb einer Art von Einheit. Wenn Sie eine Einheit einer bestimmten Art erstellen, verwaltet App Lifecycle Manager automatisch ihre Abhängigkeiten.
Abhängigkeitsdefinition in der Art der Einheit
In der Definition UnitKind geben Sie eine Liste von Abhängigkeiten an, die jeweils auf eine andere UnitKind verweisen und ihr einen Alias zuweisen. Dieser Alias wird verwendet, um in Variablenzuordnungen auf die Abhängigkeit zu verweisen:
message UnitKind {
// ... other fields ...
// List of other unit kinds that this release will depend on.
repeated Dependency dependencies = 4
[(.google.api.field_behavior) = OPTIONAL];
// ...
}
message Dependency {
// The unit kind of the dependency.
string unit_kind = 1 [
(.google.api.field_behavior) = REQUIRED,
(.google.api.field_behavior) = IMMUTABLE,
(.google.api.resource_reference) = {
type: "saasservicemgmt.googleapis.com/UnitKind"
}
];
// An alias for the dependency. Used for input variable mapping.
string alias = 2 [(.google.api.field_behavior) = REQUIRED];
}
Automatische Bereitstellung von Abhängigkeiten
Wenn Sie die Bereitstellung einer Einheit anfordern, für die in ihrer UnitKind Abhängigkeiten definiert sind, prüft App Lifecycle Manager automatisch, ob diese Abhängigkeitseinheiten vorhanden sind.
Wenn eine Abhängigkeitseinheit nicht gefunden wird, stellt App Lifecycle Manager sie automatisch bereit, bevor die abhängige Einheit bereitgestellt wird.
App Lifecycle Manager sorgt dafür, dass Abhängigkeitseinheiten vor ihren abhängigen Einheiten bereitgestellt werden, um die richtige Reihenfolge der Vorgänge einzuhalten.
Variablenzuordnung
Die Variablenzuordnung ist der Mechanismus zum Übergeben von Daten (Variablenwerten) zwischen abhängigen Einheiten und ihren Abhängigkeiten. Dies ist wichtig, um abhängige Einheiten basierend auf Ausgaben aus ihren Abhängigkeiten zu konfigurieren.
Die Variablenzuordnung wird innerhalb der abhängigen Art der Einheit definiert und verwendet FromMapping und ToMapping:
FromMapping:FromMappingwird verwendet, um Ausgabevariablen aus einer Abhängigkeitseinheit abzurufen und sie Eingabevariablen der abhängigen Einheit zuzuordnen. So kann eine abhängige Einheit Informationen von ihren Abhängigkeiten abrufen, z. B. Verbindungsendpunkte oder Ressourcen-IDs.message VariableMapping { // ... oneof mapping_type { // Output variables which will get their values from dependencies FromMapping from = 2 [(.google.api.field_behavior) = OPTIONAL]; // ... } } message FromMapping { // Alias of the dependency that the outputVariable will pass its value to string dependency = 1 [(.google.api.field_behavior) = REQUIRED]; // Name of the outputVariable on the dependency string output_variable = 2 [(.google.api.field_behavior) = REQUIRED]; }Im bereitgestellten Codelab-Beispiel hat die
App UnitKindeineFromMapping, um die Ausgabevariablecluster_endpointaus der AbhängigkeitCluster UnitKindabzurufen. So kann die Anwendung eine Verbindung zum neu bereitgestellten Kubernetes-Cluster herstellen.ToMapping:ToMappingwird verwendet, um Eingabevariablen von der abhängigen Einheit an die Eingabevariablen einer Abhängigkeitseinheit zu übergeben. So können Sie Abhängigkeitseinheiten basierend auf Parametern konfigurieren, die für die abhängige Einheit bereitgestellt wurden.message VariableMapping { // ... oneof mapping_type { // ... // Input variables whose values will be passed on to dependencies. ToMapping to = 3 [(.google.api.field_behavior) = OPTIONAL]; } } message ToMapping { // Alias of the dependency that the inputVariable will pass its value to string dependency = 1 [(.google.api.field_behavior) = REQUIRED]; // Name of the inputVariable on the dependency string input_variable = 2 [(.google.api.field_behavior) = REQUIRED]; // Tells EasySaaS if this mapping should be used during lookup or not bool ignore_for_lookup = 3 [(.google.api.field_behavior) = OPTIONAL]; }Im Codelab verwendet die
App UnitKindToMapping, um die Eingabevariablentenant_project_idundtenant_project_numberan die AbhängigkeitCluster UnitKindzu übergeben. So wird sichergestellt, dass der Kubernetes-Cluster im richtigen Projekt erstellt wird.ignore_for_lookupinToMapping: Das Feldignore_for_lookupinToMappingsteuert das Verhalten bei der Suche nach Abhängigkeiten. Es ist ein boolescher Wert:false(oder nicht angegeben): Wenn der Wert auffalsegesetzt ist, verwendet App Lifecycle Manager die inToMappingangegebenen Eingabevariablen als Suchschlüssel , um eine vorhandene Abhängigkeitseinheit zu finden. Wenn eine Einheit mit übereinstimmenden Eingabevariablen gefunden wird, wird sie als Abhängigkeit wiederverwendet. Wenn keine übereinstimmende Einheit gefunden wird, wird eine neue Abhängigkeitseinheit bereitgestellt. Dies ist nützlich, um freigegebene Ressourcen wie Cluster wiederzuverwenden.true: Wenn der Wert auftruegesetzt ist, wird die Eingabevariable inToMappingnicht für die Suche nach Abhängigkeiten verwendet. Das bedeutet, dass immer eine neue Abhängigkeitseinheit bereitgestellt wird, auch wenn bereits Einheiten mit denselben Eingabevariablen vorhanden sind. Dies ist nützlich, wenn Sie für jede abhängige Einheit dedizierte, nicht freigegebene Abhängigkeiten benötigen.
Beispiel: Freigegebener Kubernetes-Cluster
Wenn Sie einen Kubernetes-Cluster für mehrere Anwendungseinheiten im selben Projekt wiederverwenden möchten, verwenden Sie ToMapping mit ignore_for_lookup auf false gesetzt und ordnen Sie Variablen wie tenant_project_id und region der Art der Clustereinheit zu. Einheiten im selben Projekt und in derselben Region verwenden dann denselben Cluster.
Beispiel: Dedizierter Kubernetes-Cluster pro Anwendung
Wenn Sie für jede Anwendungseinheit einen dedizierten Kubernetes-Cluster benötigen, verwenden Sie ToMapping mit ignore_for_lookup auf true gesetzt oder vermeiden Sie die Suche nach ToMapping-Variablen ganz. Jede Anwendungseinheit löst dann die Bereitstellung eines neuen, isolierten Kubernetes-Clusters aus.
Secrets verwalten
App Lifecycle Manager-Variablen sind nicht zum Speichern vertraulicher Informationen wie Passwörter, API-Schlüssel oder Zertifikate vorgesehen. Das direkte Speichern von Secrets in Variablen birgt Sicherheitsrisiken. Variablenwerte können protokolliert und möglicherweise über Systemausgaben offengelegt werden, was die Wahrscheinlichkeit eines unbefugten Zugriffs erhöht.
Für die sichere Verwaltung von Secrets in Ihren App Lifecycle Manager-Anwendungen empfehlen wir dringend die Verwendung von Secret Manager.
Nächste Schritte
- Weitere Informationen zu App Lifecycle Manager finden Sie unter App Lifecycle Manager – Übersicht.
- Ein Tutorial finden Sie unter VM mit SaaS-Laufzeit bereitstellen.
- Details zum Definieren des SaaS-Angebots mit Terraform-Konfigurationen, siehe Blueprints in der SaaS-Laufzeit.