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 Ihren Stack bereitzustellen – ohne Zeit damit verbringen zu müssen, herauszufinden, wie VPCs, 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:

  • Vorhersagbarkeit: Ein Modul muss dem Schema entsprechen, das es in der CloudFormation-Registrierung registriert, damit Sie wissen, welche Ressourcen es auflösen kann, sobald Sie es in Ihre Vorlage aufgenommen haben.

  • 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 aus einem Modul bereitgestellt wurden, sodass Sie die Quelle von Ressourcenänderungen leicht verstehen können.

  • Verwaltbarkeit: Sobald Sie ein Modul registriert haben, können Sie es über die CloudFormation-Registrierung verwalten, einschließlich Versionierung und Verfügbarkeit von Konten und Regionen.

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 zum Entwickeln von Modultypen finden Sie unter Entwickeln von Modelltypen im Benutzerhandbuch für die CloudFormation -Befehlszeilenschnittstelle.

Verwenden von Modulen in einer Vorlage

Um ein Modul zu verwenden, vergewissern Sie sich, dass es in dem Konto und in der Region registriert ist, 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 Ressourcen Ihrer Vorlage ein.

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

Wenn Sie einen Stack-Vorgang initiieren, CloudFormation generiert eine verarbeitete Vorlage, 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 Aktualisieren von Stacks mithilfe von Änderungssätzen.

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


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

CloudFormation verfolgt, welche Ressourcen in einem Stack 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 Informationen zum Definieren von Vorlagenparametern finden Sie unter Parameter.

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 setzt den AccessControl Parameter von My::S3::SampleBucketPrivate::MODULE auf Private.

  • 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 keine Durchsetzung von Einschränkungen. Weitere Informationen finden Sie unter Eigenschaften. Um eine Einschränkungs-Überprüfung für einen Modulparameter durchzuführen, erstellen Sie einen Vorlagenparameter mit den gewünschten Einschränkungen und referenzieren Sie dann in Ihrem Modulparameter auf diesen Vorlagenparameter.

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:

  • Suchen des Moduls in der CloudFormation Registrierung. Auf der Registerkarte Schema wird das Modulschema angezeigt.

  • Verwenden Sie die -DescribeTypeOperation, um die Moduldetails zurückzugeben, die das Schema enthalten.

// 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, z. B. die maximal zulässige Anzahl von Ressourcen in einem Stack 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 AWS CloudFormation Kontingente.

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

  • Hilfsskripte, die auf Modulebene angegeben sind, werden nicht an die einzelnen Ressourcen weitergegeben, die im Modul enthalten sind, wenn die Vorlage CloudFormation verarbeitet.

  • 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 zu Ausgaben finden Sie unter Outputs.

  • 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 Verwenden der AWS CloudFormation Registrierung.

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.

  • Während des Stack-Vorgangs CloudFormation verwendet jede Version des Moduls, die derzeit als Standardversion in dem Konto und der Region registriert ist, 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 So geben Sie mit AWS CLI eine private Version einer Erweiterung an, die verwendet werden soll..

  • Während des Stack-Vorgangs CloudFormation verwendet jede Version der Ressource, die derzeit als Standardversion in dem Konto und der Region registriert ist, 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 einen Stack-Vorgang mit einer Vorlage ausführen, die dieses Modul enthält, z. B. ein Stack-Update, CloudFormation verwendet die neue Standardversion im Vorgang.

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

  • Wenn Sie für Stack-Aktualisierungsvorgänge die Option Vorherige Vorlage verwenden angeben, verwendet CloudFormation die zuvor verarbeitete Vorlage für das Stack-Update und verarbeitet das Modul nicht für Änderungen, die Sie möglicherweise daran vorgenommen haben, erneut.

  • 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 zu Stack-Sets finden Sie unter Arbeiten mit AWS CloudFormation StackSets.

Weitere Informationen zum Registrieren neuer Versionen eines Moduls oder zum Ändern der Standardversion eines Moduls finden Sie unter Verwenden der AWS CloudFormation Registrierung.

Ö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 unter Modulanforderungen für die Veröffentlichung eines öffentlichen Moduls im CloudFormation CLI-Benutzerhandbuch.

Wenn Sie nicht die richtigen öffentlichen Erweiterungen und Erweiterungsversionen von Drittanbietern aktiviert haben, CloudFormation schlägt die Operation mit einem Fehler fehl, der die Erweiterungen und/oder Versionen auflistet, die aktiviert werden müssen, bevor das Modul erfolgreich aktiviert werden kann.