Übersicht der 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.

Übersicht der 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 mit der Benutzer die Lambda-Funktion aus CloudFormation-Vorlagen heraus aufrufen können. 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 innerhalb eines Kontos zu erstellen, verfassen Sie eine Vorlage, die die Ressource AWS::CloudFormation::Macro enthält, und erstellen dann entweder einen Stapel oder einen Stapelsatz mit selbstverwalteten Berechtigungen aus der Vorlage. CloudFormation StackSets unterstützt derzeit nicht das Erstellen oder Aktualisieren von Stack-Sets mit serviceverwalteten Berechtigungen aus 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. (Die Verarbeitung von Makros kann mehrere Ressourcen hinzufügen, die Sie möglicherweise nicht kennen. Um sicherzustellen, dass Sie alle durch Makros eingeführten Änderungen kennen, raten wir Ihnen dringend, Änderungssätze zu verwenden). CloudFormation übergibt den angegebenen Vorlageninhalt zusammen mit allen zusätzlich angegebenen Parametern an die in der Makroressource 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, erzeugt CloudFormation einen Änderungssatz, 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 verlangt CloudFormation, dass Sie ihre Fähigkeiten bestätigen. Da CloudFormation nicht wissen kann, welche Ressourcen vor der Verarbeitung Ihrer Vorlage hinzugefügt werden, müssen Sie möglicherweise IAM-Fähigkeiten bestätigen, wenn Sie das Änderungsset erstellen, je nachdem, ob die referenzierten Makros IAM-Ressourcen enthalten. Auf diese Weise verfügt CloudFormation bei der Ausführung des Änderungssatzes über die notwendigen Fähigkeiten, um IAM-Ressourcen zu erstellen.

Um einen Stapel 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 zum Starten von Stapeln aus Vorlagen, die auf Makros verweisen, zu reduzieren, können Sie die Befehle package und deploy AWS CLI verwenden. Weitere Informationen finden 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 in AWS-Regionen unterstützt, wenn 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 die 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 CloudFormation Elemente in einer Vorlage verarbeitet, kann ein Makro keine Module in den verarbeiteten Vorlageninhalt aufnehmen, den es an CloudFormation zurückgibt. Weitere Informationen finden Sie unter Makro-Bewertungsreihenfolge.

  • Wenn Sie das Update-Rollback-Feature verwenden, verwendet CloudFormation eine Kopie der ursprünglichen Vorlage. 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 Service-verwalteten Berechtigungen aus Vorlagen, die auf CloudFormation-Makros verweisen.

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 erlauben, können Sie mit AWS 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.

Damit CloudFormation ein in einer Vorlage enthaltenes Makro erfolgreich ausführen kann, muss der Benutzer über Invoke-Berechtigungen für die zugrunde liegende Lambda-Funktion verfügen. Um eine mögliche Eskalation der Berechtigungen zu verhindern, gibt sich CloudFormation bei der Ausführung des Makros als Benutzer 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.