CloudFormation Vorlage Mappings-Syntax - AWS CloudFormation

CloudFormation Vorlage Mappings-Syntax

Der optionale Abschnitt Mappings hilft Ihnen bei der Erstellung von Schlüssel-Wert-Paaren, mit denen Sie Werte basierend auf bestimmten Bedingungen oder Abhängigkeiten angeben können.

Ein üblicher Anwendungsfall für den Abschnitt Mappings ist die Festlegung von Werten auf der Grundlage von AWS-Region, wo der Stack eingesetzt wird. Dies kann durch die Verwendung des Pseudoparameters AWS::Region erreicht werden. Der Pseudoparameter AWS::Region ist ein Wert, den CloudFormation in die Region auflöst, in der der Stack erstellt wird. Pseudoparameter werden von CloudFormation beim Erstellen des Stacks aufgelöst.

Um Werte in einer Map abzurufen, können Sie die intrinsische Funktion Fn::FindInMap im Abschnitt Resources Ihrer Vorlage verwenden.

Syntax

Der Abschnitt Mappings verwendet die folgende Syntax:

JSON

"Mappings" : { "MappingLogicalName" : { "Key1" : { "Name" : "Value1" }, "Key2" : { "Name" : "Value2" }, "Key3" : { "Name" : "Value3" } } }

YAML

Mappings: MappingLogicalName: Key1: Name: Value1 Key2: Name: Value2 Key3: Name: Value3
  • MappingLogicalName ist der logische Name für die Zuordnung.

  • Innerhalb der Zuordnung ist jede Karte ein Schlüssel, gefolgt von einer anderen Zuordnung.

  • Der Schlüssel muss eine Zuordnung von Name-Wert-Paaren darstellen und innerhalb der Zuordnung eindeutig sein.

  • Das Name-Wert-Paar ist ein Etikett und der Zuweisungswert. Durch die Benennung der Werte können Sie einem Schlüssel mehr als einen Satz Werte zuweisen.

  • Die Schlüssel in Zuweisungen müssen Literalzeichenfolgen sein.

  • Die Werte können vom Typ String oder Listsein.

Anmerkung

Im Abschnitt Mappings dürfen keine Parameter, Pseudoparameter oder intrinsischen Funktionen verwendet werden.

Wenn die Werte in einem Mapping derzeit nicht von Ihrem Stack verwendet werden, können Sie das Mapping nicht allein aktualisieren. Sie müssen Änderungen einbeziehen, die Ressourcen hinzufügen, ändern oder löschen.

Beispiele

Grundlegende Zuweisungen

Das folgende Beispiel zeigt einen Mappings-Abschnitt mit einer Map RegionToInstanceType, die fünf Schlüssel enthält. Diesen Schlüsseln sind Name-Wert-Paare mit jeweils einem einzigen Zeichenfolgewert zugewiesen. Die Schlüssel sind Namen von Regionen. Jedes Name-Wert-Paar ist ein Instancetyp aus der T-Familie, der in der Region verfügbar ist, die durch den Schlüssel repräsentiert wird. Die Name-Wert-Paare haben einen Namen (InstanceType in diesem Beispiel) und einen Wert.

JSON

"Mappings" : { "RegionToInstanceType" : { "us-east-1" : { "InstanceType" : "t2.micro" }, "us-west-1" : { "InstanceType" : "t2.micro" }, "eu-west-1" : { "InstanceType" : "t2.micro" }, "eu-north-1" : { "InstanceType" : "t3.micro" }, "me-south-1" : { "InstanceType" : "t3.micro" } } }

YAML

Mappings: RegionToInstanceType: us-east-1: InstanceType: t2.micro us-west-1: InstanceType: t2.micro eu-west-1: InstanceType: t2.micro eu-north-1: InstanceType: t3.micro me-south-1: InstanceType: t3.micro

Zuweisung mit mehreren Werten

Das folgende Beispiel hat Regionsschlüssel, die zwei Gruppen von Werten zugeordnet sind: eine mit dem Namen MyAMI1 und die andere mit MyAMI2.

Anmerkung

Die in diesen Beispielen gezeigten AMI-IDs sind Platzhalter für Demonstrationszwecke. Wann immer möglich, sollten Sie dynamische Verweise auf AWS Systems Manager-Parameter als Alternative zum Mappings-Abschnitt verwenden. Um zu vermeiden, dass Sie alle Ihre Vorlagen jedes Mal mit einer neuen ID aktualisieren, wenn sich das AMI, das Sie verwenden möchten, ändert, verwenden Sie einen AWS Systems Manager-Parameter, um die neueste AMI-ID abzurufen, wenn der Stack erstellt oder aktualisiert wird. Die neuesten Versionen der häufig verwendeten AMIs sind auch als öffentliche Parameter in Systems Manager verfügbar. Weitere Informationen finden Sie unter Abrufen von in anderen Diensten gespeicherten Werten unter Verwendung dynamischer Referenzen.

JSON

"Mappings" : { "RegionToAMI" : { "us-east-1" : { "MyAMI1" : "ami-12345678901234567", "MyAMI2" : "ami-23456789012345678" }, "us-west-1" : { "MyAMI1" : "ami-34567890123456789", "MyAMI2" : "ami-45678901234567890" }, "eu-west-1" : { "MyAMI1" : "ami-56789012345678901", "MyAMI2" : "ami-67890123456789012" }, "ap-southeast-1" : { "MyAMI1" : "ami-78901234567890123", "MyAMI2" : "ami-89012345678901234" }, "ap-northeast-1" : { "MyAMI1" : "ami-90123456789012345", "MyAMI2" : "ami-01234567890123456" } } }

YAML

Mappings: RegionToAMI: us-east-1: MyAMI1: ami-12345678901234567 MyAMI2: ami-23456789012345678 us-west-1: MyAMI1: ami-34567890123456789 MyAMI2: ami-45678901234567890 eu-west-1: MyAMI1: ami-56789012345678901 MyAMI2: ami-67890123456789012 ap-southeast-1: MyAMI1: ami-78901234567890123 MyAMI2: ami-89012345678901234 ap-northeast-1: MyAMI1: ami-90123456789012345 MyAMI2: ami-01234567890123456

Zurückgeben eines Werts aus einer Zuweisung

Sie können die Funktion Fn::FindInMap verwenden, um einen benannten Wert auf Basis eines angegebenen Schlüssels zurückzugeben. Die folgende Beispielvorlage enthält eine Amazon EC2-Ressource, deren Eigenschaft InstanceType durch die Funktion FindInMap festgelegt wird. Die Funktion FindInMap gibt den Schlüssel als AWS-Region an, auf dem der Stapel erstellt wird (unter Verwendung des Pseudoparameters AWS::Region ) und InstanceType als den Namen des Wertes, der zugeordnet werden soll. Der ImageId verwendet einen Systems Manager-Parameter, um dynamisch das neueste Amazon Linux 2 AMI abzurufen. Weitere Informationen zu Pseudoparametern finden Sie unter Erhalten Sie AWS-Werte mit Pseudo-Parametern.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionToInstanceType" : { "us-east-1" : { "InstanceType" : "t2.micro" }, "us-west-1" : { "InstanceType" : "t2.micro" }, "eu-west-1" : { "InstanceType" : "t2.micro" }, "eu-north-1" : { "InstanceType" : "t3.micro" }, "me-south-1" : { "InstanceType" : "t3.micro" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType" : { "Fn::FindInMap" : [ "RegionToInstanceType", { "Ref" : "AWS::Region" }, "InstanceType" ]} } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionToInstanceType: us-east-1: InstanceType: t2.micro us-west-1: InstanceType: t2.micro eu-west-1: InstanceType: t2.micro eu-north-1: InstanceType: t3.micro me-south-1: InstanceType: t3.micro Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' InstanceType: !FindInMap [RegionToInstanceType, !Ref 'AWS::Region', InstanceType]

Eingabeparameter und Fn::FindInMap

Die folgende Beispielvorlage zeigt, wie Sie eine EC2-Instance mit mehreren Mappings erstellen. Die Vorlage verwendet verschachtelte Zuordnungen, um automatisch den geeigneten Instancetyp und die Sicherheitsgruppe auf der Grundlage des Ziels AWS-Region und des Umgebungstyps (Dev oder Prod) auszuwählen. Außerdem verwendet es einen Systems Manager-Parameter, um dynamisch das neueste Amazon Linux 2 AMI abzurufen.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "EnvironmentType" : { "Description" : "The environment type (Dev or Prod)", "Type" : "String", "Default" : "Dev", "AllowedValues" : [ "Dev", "Prod" ] } }, "Mappings" : { "RegionAndEnvironmentToInstanceType" : { "us-east-1" : { "Dev" : "t3.micro", "Prod" : "c5.large" }, "us-west-1" : { "Dev" : "t2.micro", "Prod" : "m5.large" } }, "RegionAndEnvironmentToSecurityGroup" : { "us-east-1" : { "Dev" : "sg-12345678", "Prod" : "sg-abcdef01" }, "us-west-1" : { "Dev" : "sg-ghijkl23", "Prod" : "sg-45678abc" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType" : { "Fn::FindInMap": [ "RegionAndEnvironmentToInstanceType", { "Ref": "AWS::Region" }, { "Ref": "EnvironmentType" } ]}, "SecurityGroupIds" : [{ "Fn::FindInMap" : [ "RegionAndEnvironmentToSecurityGroup", { "Ref" : "AWS::Region" }, { "Ref" : "EnvironmentType" } ]}] } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: RegionAndEnvironmentToInstanceType: us-east-1: Dev: t3.micro Prod: c5.large us-west-1: Dev: t2.micro Prod: m5.large RegionAndEnvironmentToSecurityGroup: us-east-1: Dev: sg-12345678 Prod: sg-abcdef01 us-west-1: Dev: sg-ghijkl23 Prod: sg-45678abc Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' InstanceType: !FindInMap [RegionAndEnvironmentToInstanceType, !Ref 'AWS::Region', !Ref EnvironmentType] SecurityGroupIds: - !FindInMap [RegionAndEnvironmentToSecurityGroup, !Ref 'AWS::Region', !Ref EnvironmentType]

Diese verwandten Themen können hilfreich sein, wenn Sie Vorlagen entwickeln, die die Funktion Fn::FindInMap verwenden.