Überblick über CloudFormation Makros - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Überblick über CloudFormation Makros

Die Bearbeitung von Vorlagen mit Makros besteht aus zwei wesentlichen Schritten: Erstellen des Makros selbst und dann Verwenden des Makros, um die Verarbeitung Ihrer Vorlagen durchzuführen.

Um eine Makrodefinition zu erstellen, müssen Sie Folgendes erstellen:

  • Eine Lambda-Funktion, die die Verarbeitung der Vorlage durchführt. Diese Lambda-Funktion akzeptiert entweder einen Ausschnitt oder eine ganze Vorlage und alle zusätzlichen Parameter, die Sie definieren. Sie gibt den bearbeiteten Vorlagenausschnitt oder die gesamte Vorlage als Antwort zurück.

  • Eine Ressource vom Typ AWS::CloudFormation::Macro, die es Benutzern ermöglicht, die Lambda-Funktion aus CloudFormation Vorlagen heraus aufzurufen. Diese Ressource spezifiziert den ARN der Lambda-Funktion, die für dieses Makro aufgerufen werden soll, und zusätzliche optionale Eigenschaften, die beim Debuggen helfen. Um diese Ressource in einem Konto zu erstellen, erstellen Sie eine Vorlage, die die AWS::CloudFormation::Macro Ressource enthält, und erstellen Sie dann entweder einen Stack oder ein Stack-Set mit selbstverwalteten Berechtigungen aus der Vorlage. CloudFormation StackSetsunterstützt derzeit nicht das Erstellen oder Aktualisieren von Stack-Sets mit vom Dienst verwalteten Berechtigungen anhand von Vorlagen, die auf Makros verweisen.

Um ein Makro zu verwenden, referenzieren Sie das Makro in Ihrer Vorlage:

  • Um einen Abschnitt oder einen Teil einer Vorlage zu bearbeiten, referenzieren Sie das Makro in einer Fn::Transform-Funktion, die sich relativ zu dem Inhalt der Vorlage befindet, den Sie umwandeln möchten. Bei Verwendung von Fn::Transform können Sie außerdem beliebige Parameter übergeben.

  • Um eine gesamte Vorlage zu bearbeiten, referenzieren Sie das Makro im Abschnitt Transform der Vorlage.

Als Nächstes erstellen Sie normalerweise einen Änderungssatz und führen diesen aus. (Durch die Verarbeitung von Makros können mehrere Ressourcen hinzugefügt werden, die Ihnen möglicherweise nicht bekannt sind. Um sicherzustellen, dass Sie alle durch Makros eingeführten Änderungen kennen, wird dringend empfohlen, Änderungssätze zu verwenden.) CloudFormation übergibt den angegebenen Vorlageninhalt zusammen mit allen zusätzlich angegebenen Parametern an die in der Makro-Ressource angegebene Lambda-Funktion. Die Lambda-Funktion gibt den bearbeiteten Vorlageninhalt zurück, sei es ein Ausschnitt oder eine ganze Vorlage.

Nachdem alle Makros in der Vorlage aufgerufen wurden, wird ein Änderungssatz CloudFormation generiert, der den verarbeiteten Vorlageninhalt enthält. Nachdem Sie den Änderungssatz überprüft haben, führen Sie ihn aus, um die Änderungen anzuwenden.

Verwenden Sie die intrinsische Funktion Fn::Transform oder den Abschnitt Transform der Vorlage, um den Vorlageninhalt und die zugehörigen Parameter an die dem Makro zugrunde liegende Lambda-Funktion zu übergeben, die den verarbeiteten Vorlageninhalt zurückgibt.

Wie Sie Stapel direkt erstellen

Um einen Stack mit einer Vorlage zu erstellen oder zu aktualisieren, die auf Makros verweist, erstellen Sie normalerweise einen Änderungssatz und führen ihn dann aus. Ein Änderungssatz beschreibt die Aktionen, die CloudFormation basierend auf der verarbeiteten Vorlage ausführen wird. Verarbeitungsmakros können mehrere Ressourcen hinzufügen, die Ihnen möglicherweise nicht bekannt sind. Um sicherzustellen, dass Sie alle Änderungen kennen, die durch Makros eingeführt werden, wird dringend die Verwendung von Änderungssätzen empfohlen. Nachdem Sie den Änderungssatz überprüft haben, können Sie ihn ausführen, um die Änderungen tatsächlich anzuwenden.

Ein Makro kann Ihrer Vorlage IAM-Ressourcen hinzufügen. Für diese Ressourcen erfordert CloudFormation, dass Sie ihre Funktionen angeben. Da Sie vor der Verarbeitung Ihrer Vorlage nicht wissen CloudFormation können, welche Ressourcen hinzugefügt wurden, müssen Sie bei der Erstellung des Änderungssatzes möglicherweise die IAM-Funktionen bestätigen, je nachdem, ob die referenzierten Makros IAM-Ressourcen enthalten. Wenn Sie den Änderungssatz ausführen, CloudFormation verfügt er auf diese Weise über die erforderlichen Funktionen, um IAM-Ressourcen zu erstellen.

Um einen Stack direkt aus einer verarbeiteten Vorlage zu erstellen oder zu aktualisieren, ohne zuvor die vorgeschlagenen Änderungen in einem Änderungssatz zu prüfen, geben Sie bei einer CreateStack- oder UpdateStack-Anfrage die CAPABILITY_AUTO_EXPAND-Fähigkeit an. Sie sollten Stacks nur dann direkt von einer Stack-Vorlage mit Makros erstellen, wenn Sie wissen, welche Verarbeitungsschritte das Makro ausführt. Sie können Änderungssätze nicht mit Stack-Set-Makros verwenden; Sie müssen Ihr Stack-Set direkt aktualisieren.

Weitere Informationen finden Sie unter CreateStack oder UpdateStack in der AWS CloudFormation API-Referenz.

Wichtig

Wenn Ihre Stack-Set-Vorlage auf ein oder mehrere Makros verweist, müssen Sie das Stack-Set direkt aus der verarbeiteten Vorlage erstellen, ohne vorher die resultierenden Änderungen in einem Änderungssatz zu überprüfen. Verarbeitungsmakros können mehrere Ressourcen hinzufügen, die Ihnen möglicherweise nicht bekannt sind. Bevor Sie einen Stack-Set aus einer Vorlage erstellen oder aktualisieren, die direkt auf Makros verweist, sollten Sie sicherstellen, dass Sie wissen, welche Verarbeitung die Makros ausführen.

Um die Anzahl der Schritte beim Starten von Stacks aus Vorlagen, die auf Makros verweisen, zu reduzieren, können Sie die package Befehle und verwenden. deploy AWS CLI Weitere Informationen erhalten Sie unter Lokale Artefakte in einen S3-Bucket mit der Bezeichnung AWS CLI hochladen und Erstellen Sie einen Stapel, der Transformationen enthält.

Überlegungen

Wenn Sie mit Makros arbeiten, beachten Sie bitte die folgenden Hinweise und Einschränkungen:

  • Makros werden nur dort unterstützt AWS-Regionen , wo Lambda verfügbar ist. Eine Liste der Regionen, in denen Lambda verfügbar ist, finden Sie unter AWS Lambda Endpunkte und Kontingente.

  • Alle verarbeiteten Vorlagenausschnitte müssen gültiges -JSON sein.

  • Alle verarbeiteten Vorlagenausschnitte müssen Validierungsprüfungen für eine Stack-Erstellung, Stack-Aktualisierung, Stack-Set-Erstellung oder einen Stack-Set-Aktualisierungs-Vorgang durchlaufen.

  • CloudFormation löst zuerst Makros auf und verarbeitet dann die Vorlage. Die resultierende Vorlage muss gültiger JSON-Code sein und darf nicht größer als das Vorlagengrößenlimit sein.

  • Aufgrund der Reihenfolge, in der Elemente in einer Vorlage CloudFormation verarbeitet werden, kann ein Makro keine Module in den verarbeiteten Vorlageninhalt aufnehmen, zu dem es zurückkehrt. CloudFormation Weitere Informationen finden Sie unter Makro-Bewertungsreihenfolge.

  • Wenn Sie die Funktion zum Aktualisieren des Rollbacks verwenden, CloudFormation wird eine Kopie der Originalvorlage verwendet. Es wird ein Rollback auf die ursprüngliche Vorlage ausgeführt, selbst wenn der Codeausschnitt geändert wurde.

  • Das Einfügen von Makros innerhalb von Makros funktioniert nicht, da wir Makros nicht rekursiv verarbeiten.

  • Die intrinsische Fn::ImportValue-Funktion wird derzeit in Makros nicht unterstützt.

  • Die in der Vorlage enthaltenen intrinsischen Funktionen werden nach allen Makros ausgewertet. Daher können die von Ihrem Makro zurückgegebenen verarbeiteten Vorlageninhalte Aufrufe von intrinsischen Funktionen beinhalten, die wie gewohnt ausgewertet werden.

  • StackSets unterstützt derzeit nicht das Erstellen oder Aktualisieren von Stack-Sets mit vom Service verwalteten Berechtigungen anhand von Vorlagen, die auf Makros verweisen. CloudFormation

Umfang und Berechtigungen des Makrokontos

Makros können Sie nur in dem Konto verwenden, in dem sie als Ressource angelegt wurden. Der Name des Makros muss innerhalb eines bestimmten Kontos eindeutig sein. Sie können jedoch die gleiche Funktionalität in mehreren Konten zur Verfügung stellen, indem Sie den kontenübergreifenden Zugriff auf die zugrundeliegende Lambda-Funktion aktivieren und dann Makrodefinitionen erstellen, die sich in mehreren Konten auf diese Funktion beziehen. Im folgenden Beispiel enthalten drei Konten Makrodefinitionen, die jeweils auf dieselbe Lambda-Funktion verweisen.

Indem Sie den kontoübergreifenden Zugriff auf die Lambda-Funktion zulassen, AWS können Sie Makros in mehreren Konten erstellen, die auf diese Funktion verweisen.

Um eine Makrodefinition zu erstellen, muss der Benutzer die Berechtigung haben, einen Stack oder Stack-Set innerhalb des angegebenen Kontos zu erstellen.

CloudFormation Um ein in einer Vorlage enthaltenes Makro erfolgreich ausführen zu können, muss der Benutzer über Invoke Berechtigungen für die zugrunde liegende Lambda-Funktion verfügen. Um eine mögliche Eskalation von Berechtigungen zu verhindern, gibt sich bei der CloudFormation Ausführung des Makros die Identität des Benutzers aus.

Weitere Informationen finden Sie unter Verwalten von Berechtigungen in AWS Lambda im AWS Lambda Entwicklerhandbuch und Aktionen, Ressourcen und Bedingungsschlüssel für AWS Lambda in der Service Authorization Reference.