Verwenden von Modulen zur Kapselung und Wiederverwendung von Ressourcenkonfigurationen - 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.

Verwenden von Modulen zur Kapselung und Wiederverwendung von Ressourcenkonfigurationen

Module sind eine Möglichkeit für Sie, Ressourcenkonfigurationen für die Aufnahme in Stack-Vorlagen auf transparente, verwaltbare und wiederholbare Weise zu erstellen. Module können gängige Servicekonfigurationen und Best Practices als modulare, anpassbare Bausteine zusammenfassen, die Sie in Ihre Stack-Vorlagen aufnehmen können. Module ermöglichen es Ihnen, Ressourcenkonfigurationen, die Best Practices, Fachwissen und akzeptierte Richtlinien (für Bereiche wie Sicherheit, Compliance, Governance und Branchenvorschriften) in Ihre Vorlagen einbeziehen, ohne fundierte Kenntnisse über die Feinheiten der Ressourcenimplementierung erwerben zu müssen.

Beispielsweise könnte eine Fachkraft für Netzwerke ein Modul erstellen, das integrierte Sicherheitsgruppen und Regeln für eingehenden/ausgehenden Datenverkehr enthält, die den Sicherheitsrichtlinien entsprechen. Sie könnten dieses Modul dann in Ihre Vorlage aufnehmen, um eine sichere Netzwerkinfrastruktur in Ihrem Stack bereitzustellen — ohne Zeit damit verbringen zu müssen, herauszufindenVPCs, wie Subnetze, Sicherheitsgruppen und Gateways funktionieren. Und da Module versioniert sind, kann der Modulautor eine neue Version des Moduls erstellen, wenn sich die Sicherheitsrichtlinien im Laufe der Zeit ändern, die diese Änderungen enthält.

Zu den Merkmalen der Verwendung von Modulen in Ihren Vorlagen gehören:

  • Vorhersehbarkeit — Ein Modul muss sich an das Schema halten, das es in der CloudFormation Registrierung registriert, sodass Sie wissen, in welche Ressourcen es aufgelöst werden kann, wenn Sie es in Ihre Vorlage aufnehmen.

  • Wiederverwendbarkeit — Sie können dasselbe Modul für mehrere Vorlagen und Konten verwenden.

  • Rückverfolgbarkeit — CloudFormation Behält das Wissen darüber bei, welche Ressourcen in einem Stack über ein Modul bereitgestellt wurden, sodass Sie die Quelle der Ressourcenänderungen leicht nachvollziehen können.

  • Verwaltbarkeit — Sobald Sie ein Modul registriert haben, können Sie es über die CloudFormation Registrierung verwalten, einschließlich Versionierung sowie Konto- und Regionsverfügbarkeit.

Ein Modul kann enthalten:

  • Eine oder mehrere Ressourcen, die aus dem Modul bereitgestellt werden sollen, zusammen mit allen zugehörigen Daten wie Ausgaben oder Bedingungen.

  • Alle Modulparameter, mit denen Sie bei jeder Verwendung des Moduls benutzerdefinierte Werte angeben können.

Informationen zur Entwicklung von Modultypen finden Sie unter Entwickeln von Modultypen im Benutzerhandbuch für die CloudFormation Befehlszeilenschnittstelle.

Verwenden von Modulen in einer Vorlage

Um ein Modul verwenden zu können, stellen Sie sicher, dass es im AWS-Konto und Region, in der Sie es verwenden möchten. Weitere Informationen finden Sie unter Öffentliche Erweiterungen und private Erweiterungen.

Sie registrieren Module in der CloudFormation Registrierung als private Erweiterungen. Behandeln Sie sie dann genauso, wie Sie es mit einzelnen Ressourcen tun würden:

  • Fügen Sie das entsprechende Modul in den Bereich Resources Ihrer Vorlage ein.

  • Geben Sie alle erforderlichen Eigenschaften für das Modul an.

Wenn Sie einen Stack-Vorgang starten, CloudFormation wird eine verarbeitete Vorlage generiert, die alle enthaltenen Module in die entsprechenden Ressourcen auflöst. Verwenden Sie Änderungssätze, um eine Vorschau der Ressourcen anzuzeigen, die hinzugefügt oder aktualisiert werden sollen, bevor der Stack-Vorgang tatsächlich ausgeführt wird. Weitere Informationen finden Sie unter CloudFormation Stapel mithilfe von Änderungssätzen aktualisieren.

Betrachten Sie das folgende Beispiel: Sie haben eine Vorlage, die sowohl Ressourcen als auch Module enthält. Die Vorlage enthält eine einzelne Ressource sowie ein Modul. ResourceA ModuleParent Dieses Modul enthält zwei Ressourcen sowie ein verschachteltes Modul. ResourceB ResourceC ModuleChild ModuleChildenthält eine einzelne Ressource,ResourceD. Wenn Sie aus dieser Vorlage einen Stapel erstellen, CloudFormation verarbeitet die Vorlage und löst die Module in die entsprechenden Ressourcen auf. Der resultierende Stapel hat vier Ressourcen:ResourceA, ResourceBResourceC, undResourceD.

CloudFormation Löst während eines Stack-Vorgangs die beiden in der Stack-Vorlage enthaltenen Module in die entsprechenden vier Ressourcen auf.

CloudFormation verfolgt, welche Ressourcen in einem Stapel aus Modulen erstellt wurden. Sie können diese Informationen auf den Registerkarten Ereignisse, Ressourcen und Abweichungen für einen bestimmten Stack anzeigen und sie sind auch in der Änderungssatzvorschau enthalten.

Module sind von Ressourcen in einer Vorlage unterscheidbar, da sie der folgenden vierteiligen Namenskonvention entsprechen, im Gegensatz zu der typischen dreiteiligen Konvention, die von Ressourcen verwendet wird:

organization::service::use-case::MODULE

Verwenden von Parametern zur Angabe von Modulwerten

Module können Modulparameter enthalten. Ähnlich wie bei Vorlagenparametern können Sie mit Modulparametern benutzerdefinierte Werte aus der Vorlage (oder dem Modul) eingeben, in der/dem sie enthalten sind. Das Modul kann diese Werte dann verwenden, um Eigenschaften der enthaltenen Ressourcen festzulegen.

Sie können auch Vorlagenparameter definieren, die wiederum Moduleigenschaften festlegen, damit Benutzer Werte eingeben können, die zum Zeitpunkt des Stack-Vorgangs an das Modul übergeben werden. Weitere Hinweise zur Definition von Vorlagenparametern finden Sie unterParameters.

Wenn ein Modul ein verschachteltes Modul enthält, das Modulparameter enthält, können Sie ebenfalls:

  • Werte für die Parameter des verschachtelten Moduls direkt im übergeordneten Modul angeben.

  • Entsprechende Modulparameter im übergeordneten Modul definieren, die es ermöglichen, die Parameter des verschachtelten Moduls durch die Vorlage (oder das Modul) festzulegen, in der das übergeordnete Modul enthalten ist.

Verwenden von Vorlagenparametern zur Angabe von Modulparameterwerten

Das folgende Beispiel zeigt, wie Vorlagenparameter definiert werden, die Werte an ein Modul übergeben.

In diesem Fall definiert die Vorlage mit My::S3::SampleBucket::MODULE einen Vorlagenparameter, BucketName, der es dem Benutzer ermöglicht, während des Stack-Vorgangs einen S3-Bucket-Namen anzugeben.

# Template containing My::S3::SampleBucket::MODULE { "Parameters": { "BucketName": { "Description": "Name for your sample bucket", "Type": "String" } }, "Resources": { "MyBucket": { "Type": "My::S3::SampleBucket::MODULE", "Properties": { "BucketName": { "Ref": "BucketName" } } } } }

Festlegen von Eigenschaften für Ressourcen in einem untergeordneten Modul aus dem übergeordneten Modul

Das folgende Beispiel veranschaulicht, wie Parameterwerte in einem Modul angegeben werden, das in einem anderen Modul verschachtelt ist.

Dieses erste Modul, My::S3::SampleBucketPrivate::MODULE, ist das untergeordnete Modul. Es definiert zwei Parameter: BucketName und AccessControl. Die für diese Parameter angegebenen Werte werden verwendet, um die Eigenschaften BucketName und AccessControl der Ressource AWS::S3::Bucket, die das Modul enthält, anzugeben. Unten sehen Sie das Vorlagenfragment für My::S3::SampleBucketPrivate::MODULE.

# My::S3::SampleBucketPrivate::MODULE { "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample S3 Bucket with Versioning and DeletionPolicy.", "Parameters": { "BucketName": { "Description": "Name for the bucket", "Type": "String" }, "AccessControl": { "Description": "AccessControl for the bucket", "Type": "String" } }, "Resources": { "S3Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": { "Ref": "BucketName" }, "AccessControl": { "Ref": "AccessControl" }, "DeletionPolicy": "Retain", "VersioningConfiguration": { "Status": "Enabled" } } } } }

Als Nächstes ist das vorherige Modul in ein übergeordnetes Modul, My::S3::SampleBucket::MODULE, verschachtelt. Das übergeordnete Modul, My::S3::SampleBucket::MODULE, legt die Parameter des untergeordneten Moduls auf folgende Weise fest:

  • Es legt den AccessControl Parameter My::S3::SampleBucketPrivate::MODULE auf festPrivate.

  • Für BucketName definiert es einen Modulparameter, der es ermöglicht, den Bucket-Namen in der Vorlage (oder dem Modul) anzugeben, die/das My::S3::SampleBucket::MODULE enthält.

# My::S3::SampleBucket::MODULE { "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample S3 Bucket. With Private AccessControl.", "Parameters": { "BucketName": { "Description": "Name for your sample bucket", "Type": "String" } }, "Resources": { "MyBucket": { "Type": "My::S3::SampleBucketPrivate::MODULE", "Properties": { "BucketName": { "Ref": "BucketName" }, "AccessControl" : "Private" } } } }

Angeben von Beschränkungen für Modulparameter

Modulparameter unterstützen die Durchsetzung von Beschränkungen nicht. Um die Einschränkungsprüfung für einen Modulparameter durchzuführen, erstellen Sie einen Vorlagenparameter mit den gewünschten Einschränkungen. Verweisen Sie dann in Ihrem Modulparameter auf diesen Vorlagenparameter. Weitere Hinweise zur Definition von Vorlagenparametern finden Sie unterParameters.

Referenzieren von Ressourcen in einem Modul

Ressourcen in einem Modul können mit logischem Namen referenziert werden. Der vollständig qualifizierte logische Name einer in einem Modul enthaltenen Ressource kann erstellt werden, indem Folgendes kombiniert wird:

  • Der logische Name, der für das Modul in der enthaltenden Vorlage (oder dem enthaltenden Modul) angegeben wurde.

  • Der logische Name für die Ressource, der im Modul angegeben ist.

Der voll qualifizierte logische Name für die Ressource kann mit oder ohne Verwendung eines Zeitraums als Trennzeichen angegeben werden. Zum Beispiel sind beide nachstehenden logischen Namen gültig und funktionell gleichwertig:

  • ModuleLogicalName.ResourceLogicalName

  • ModuleLogicalNameResourceLogicalName

Auf diese Weise können Sie die intrinsischen Funktionen GetAtt und Ref verwenden, um auf Eigenschaftswerte für Modulressourcen zuzugreifen.

Im folgenden Beispiel verweist die Vorlage auf eine Eigenschaft in einem Modul, um eine entsprechende Eigenschaft für eine Ressource in der Vorlage selbst festzulegen.

Angenommen, das Modul My::S3::SampleBucket::MODULE enthält eine Ressource AWS::S3::Bucket mit dem logischen Namen S3Bucket. Um mithilfe der intrinsischen Funktion Ref auf den Bucket-Namen dieser Ressource zu verweisen, kombinieren Sie den logischen Namen, den das Modul in der Vorlage hat, MyBucket, mit dem logischen Namen der Ressource im Modul, S3Bucket, um den vollständig qualifizierten logischen Namen der Ressource zu erhalten: entweder MyBucket.S3Bucket oder MyBucketS3Bucket.

Die logischen Namen der in einem Modul enthaltenen Ressourcen werden im Schema des Moduls angegeben. Sie können auf folgende Arten auf dieses Schema zugreifen:

  • Das Modul in der CloudFormation Registrierung finden. Auf der Registerkarte Schema wird das Modulschema angezeigt.

  • Verwendung der DescribeTypeOperation zur Rückgabe der Moduldetails, einschließlich des Schemas.

# Template that uses My::S3::SampleBucket::MODULE { "Parameters": { "BucketName": { "Description": "Name for your sample bucket", "Type": "String" } }, "Resources": { "MyBucket": { "Type": "My::S3::SampleBucket::MODULE", "Properties": { "BucketName": { "Ref": "BucketName" } } }, "exampleQueue": { "Type": "AWS::SQS::Queue", "Properties": { "QueueName": { "Ref": "MyBucket.S3Bucket" } } } }, "Outputs": { "BucketArn": { "Value": { "Fn::GetAtt": [ "MyBucket", "S3Bucket.Arn" ] } } } }
Parameters: BucketName: Description: Name for your sample bucket Type: String Resources: MyBucket: Type: My::S3::SampleBucket::MODULE Properties: BucketName: !Ref BucketName exampleQueue: Type: AWS::SQS::Queue Properties: QueueName: !Ref MyBucket.S3Bucket Outputs: BucketArn: Value: !GetAtt MyBucket.S3Bucket.Arn

Überlegungen zur Verwendung von Modulen

  • Für die Nutzung von Modulen fallen keine zusätzlichen Kosten an. Sie zahlen nur für die Ressourcen, die diese Module in Ihren Stacks auflösen.

  • CloudFormation Kontingente, wie z. B. die maximale Anzahl von Ressourcen, die in einem Stapel zulässig sind, oder die maximale Größe des Vorlagentexts, gelten für die verarbeitete Vorlage, unabhängig davon, ob die in dieser Vorlage enthaltenen Ressourcen aus Modulen stammen oder nicht. Weitere Informationen finden Sie unter CloudFormation Kontingente verstehen.

  • Tags, die Sie auf Stack-Ebene angeben, werden den einzelnen Ressourcen zugewiesen, die vom Modul abgeleitet werden.

  • Auf Modulebene angegebene Hilfsskripten werden bei der Verarbeitung der Vorlage nicht auf die einzelnen Ressourcen übertragen, die im Modul enthalten sind. CloudFormation

  • Die im Modul angegebenen Ausgaben werden an Ausgaben auf Vorlagenebene weitergegeben.

    Jeder Ausgabe wird eine logische ID zugewiesen, die eine Verkettung des logischen Namens des Moduls und des Ausgabenamens ist, wie im Modul definiert. Weitere Informationen finden Sie unter Holen Sie sich exportierte Ausgaben aus einem bereitgestellten CloudFormation Stack.

  • Die im Modul angegebenen Parameter werden nicht an Parameter auf Vorlagenebene weitergegeben.

    Sie können jedoch Parameter auf Vorlagenebene erstellen, die auf Parameter auf Modulebene verweisen. Weitere Informationen finden Sie unter Verwenden von Parametern zur Angabe von Modulwerten.

Registrierung und Versionierung von Modulen

Sie registrieren und verwalten die Module in Ihrem Konto und Ihrer Region mithilfe der CloudFormation Registrierung. Weitere Informationen finden Sie unter Erweiterungen mit der CloudFormation Registry verwalten.

Sie können mehrere Versionen desselben Moduls in einem bestimmten Konto und einer Region registrieren. Beachten Sie folgende Überlegungen:

  • Ein Modul muss in dem Konto und der Region registriert sein, in der Sie es verwenden möchten.

  • CloudFormation Verwendet bei Stack-Vorgängen die Version des Moduls, die derzeit als Standardversion in der AWS-Konto und Region, in der der Stack-Vorgang ausgeführt wird. Dies schließt Module ein, die in anderen Modulen verschachtelt sind.

    Beachten Sie daher, dass die Verwendung derselben Vorlage zu unterschiedlichen Ergebnissen führen kann, wenn Sie verschiedene Versionen desselben Moduls als Standardversion in verschiedenen Konten oder Regionen registriert haben.

    Weitere Informationen finden Sie unter Geben Sie eine Version einer privaten Erweiterung an, die verwendet werden soll, indem Sie AWS CLI.

  • CloudFormation Verwendet bei Stack-Vorgängen die Version der Ressource, die derzeit als Standardversion in der AWS-Konto und Region, in der der Stack-Vorgang ausgeführt wird. Dies schließt die Ressourcen ein, die durch das Einschließen von Modulen generiert wurden.

  • Durch das Ändern der Standardversion eines Moduls wird kein Stack-Aktualisierungsvorgang ausgelöst. Wenn Sie jedoch das nächste Mal eine Stack-Operation mit einer beliebigen Vorlage ausführen, die dieses Modul enthält, z. B. ein Stack-Update, CloudFormation wird die neue Standardversion für den Vorgang verwendet.

    Die einzige Ausnahme besteht darin, ein Stack-Update mit der Option Vorherige Vorlagenoption verwenden durchzuführen, wie unten beschrieben.

  • Wenn Sie bei Stack-Aktualisierungsvorgängen die Option „Vorherige Vorlage verwenden“ angeben, wird die zuvor verarbeitete Vorlage für das Stack-Update CloudFormation verwendet und das Modul nicht erneut verarbeitet, wenn Sie Änderungen daran vorgenommen haben.

  • Um einheitliche Ergebnisse zu gewährleisten, sollten Sie, wenn Sie Module in eine Stack-Vorlage für die Verwendung mit Stack-Sets aufnehmen, sicherstellen, dass in allen Konten und Regionen, in denen Sie die Bereitstellung Ihrer Stack-Instances planen, dieselbe Version des Moduls als Standardversion angegeben ist. Dies gilt auch für Module, die in anderen Modulen verschachtelt sind. Weitere Informationen finden Sie unter Verwaltung von Stacks über Konten und Regionen hinweg mit StackSets.

Weitere Informationen zum Registrieren neuer Versionen eines Moduls oder zum Ändern der Standardversion eines Moduls finden Sie unterErweiterungen mit der CloudFormation Registry verwalten.

Öffentliche Module für die Verwendung in Ihrem Konto aktivieren

Um ein öffentliches Modul in Ihrem Konto und Ihrer Region erfolgreich zu aktivieren, muss für jede öffentliche Erweiterung (Ressource oder Modul) eines Drittanbieters, die im Modul enthalten ist, Folgendes zutreffen:

  • Die Erweiterung muss in Ihrem Konto und Ihrer Region bereits aktiviert sein.

    Wenn die Erweiterung im Modul einen Typnamen-Alias verwendet, muss die Erweiterung in Ihrem Konto und Ihrer Region unter Verwendung desselben Typnamen-Alias registriert werden. Weitere Informationen finden Sie unter Angeben von Aliasen, um auf Erweiterungen zu verweisen.

  • Die aktuell aktivierte Erweiterungsversion muss eine der unterstützten Hauptversionen der im Modul angegebenen Erweiterung sein. Weitere Informationen finden Sie im CloudFormationCLIBenutzerhandbuch unter Modulanforderungen für die Veröffentlichung eines öffentlichen Moduls.

Wenn Sie nicht die richtigen öffentlichen Erweiterungen und Erweiterungsversionen von Drittanbietern aktiviert haben, schlägt der Vorgang fehl und es CloudFormation wird eine Fehlermeldung angezeigt, in der die Erweiterungen und/oder Versionen aufgeführt werden, die aktiviert werden müssen, bevor das Modul erfolgreich aktiviert werden kann.