Dies ist das neue CloudFormation Template Reference Guide. Bitte aktualisieren Sie Ihre Lesezeichen und Links. Hilfe zu den ersten CloudFormation Schritten finden Sie im AWS CloudFormation Benutzerhandbuch.
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.
Lüfter:: FindInMap
Die intrinsische Fn::FindInMap-Funktion gibt die Werte von Schlüsseln in einer Zwei-Ebenen-Map zurück, die im Abschnitt Mappings deklariert ist.
Deklaration
JSON
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
Wenn Sie einen Fallback-Wert für den Fall angeben möchten, dass ein Schlüssel im Mapping nicht gefunden wird, fügen Sie Folgendes hinzu: DefaultValue
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey", {"DefaultValue": "DefaultValue"}] }
YAML
Syntax für den vollständigen Funktionsnamen:
Fn::FindInMap: [MapName,TopLevelKey,SecondLevelKey]
Syntax für die Kurzform:
!FindInMap [MapName,TopLevelKey,SecondLevelKey]
Wenn Sie einen Fallback-Wert für den Fall angeben möchten, dass ein Schlüssel in der Zuordnung nicht gefunden wird, fügen Sie Folgendes hinzu: DefaultValue
Syntax für den vollständigen Funktionsnamen:
Fn::FindInMap: -MapName-TopLevelKey-SecondLevelKey- DefaultValue:DefaultValue
Syntax für die Kurzform:
!FindInMap -MapName-TopLevelKey-SecondLevelKey- DefaultValue:DefaultValue
Anmerkung
Zwei Instances von zwei Funktionen dürfen nicht im Kurzformat geschachtelt werden.
Parameters
- MapName
-
Gibt den logischen Namen einer im Abschnitt "Mappings" deklarierten Zuweisung an, die die Schlüssel und Werte enthält.
- TopLevelKey
-
Gibt den Namen des Schlüssels der obersten Ebene an. Sein Wert ist eine Auflistung von Schlüssel-Wert-Paaren.
- SecondLevelKey
-
Gibt den Namen des Schlüssels der zweiten Ebene an. Dabei handelt es sich um einen der Schlüssel aus der dem Parameter
TopLevelKeyzugewiesenen Liste. - DefaultValue
-
Der Wert, der
Fn::FindInMapzurückgegebenSecondLevelKeywird, wenn entweder dasTopLevelKeyoder nicht in der angegebenen Zuordnung gefunden wird. Dieser Parameter ist optional. Wenn er weggelassen wirdFn::FindInMap, wird ein Fehler ausgelöst, wenn ein Schlüssel nicht gefunden wird.Der vierte Parameter muss eine Map mit dem Schlüssel sein
DefaultValue. Beispiel:{"DefaultValue": "us-east-1"}.
Rückgabewert
Zurückgegeben wird der Wert, der dem SecondLevelKey-Parameter zugewiesen ist. Wenn das TopLevelKey oder nicht gefunden SecondLevelKey wird und a angegeben DefaultValue ist, DefaultValue wird stattdessen das zurückgegeben.
Beispiele
Das folgende Beispiele zeigt, wie die Fn::FindInMap-Funktion verwendet wird.
Themen
Verwenden Sie Fn:: FindInMap mit regionsspezifischen Werten
Das folgende Beispiel zeigt, wie Sie Fn::FindInMap in einer Vorlage verwenden, die zwei Mappings enthält: AWSInstanceType2Arch und AWSRegionArch2AMI. Es enthält auch einen Parameter InstanceType, mit dem Sie zwischen t3.micro und t4g.nanowählen können. Die Vorgabe ist,t3.micro aber das kann bei der Stack-Erstellung überschrieben werden.
Fn::FindInMap bestimmt zunächst die Architektur (HVM64 oder ARM64) anhand des ausgewählten Instancetyps und sucht dann die richtige AMI-ID für diese Architektur im aktuellen AWS-Region.
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 alle Ihre Vorlagen bei jeder Änderung des AMI, das Sie verwenden möchten, mit einer neuen ID aktualisiert werden, 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
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "InstanceType": { "Description": "The EC2 instance type", "Type": "String", "AllowedValues": [ "t3.micro", "t4g.nano" ], "Default": "t3.micro" } }, "Mappings": { "AWSInstanceType2Arch": { "t3.micro": { "Arch": "HVM64" }, "t4g.nano": { "Arch": "ARM64" } }, "AWSRegionArch2AMI": { "us-east-1" : { "HVM64" : "ami-12345678901234567", "ARM64" : "ami-23456789012345678" }, "us-west-1" : { "HVM64" : "ami-34567890123456789", "ARM64" : "ami-45678901234567890" }, "eu-west-1" : { "HVM64" : "ami-56789012345678901", "ARM64" : "ami-67890123456789012" }, "ap-southeast-1" : { "HVM64" : "ami-78901234567890123", "ARM64" : "ami-89012345678901234" }, "ap-northeast-1" : { "HVM64" : "ami-90123456789012345", "ARM64" : "ami-01234567890123456" } } }, "Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "InstanceType" : { "Ref": "InstanceType" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ]}] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: InstanceType: Description: The EC2 instance type Type: String AllowedValues: - t3.micro - t4g.nano Default: t3.micro Mappings: AWSInstanceType2Arch: t3.micro: Arch: HVM64 t4g.nano: Arch: ARM64 AWSRegionArch2AMI: us-east-1: HVM64:ami-12345678901234567ARM64:ami-23456789012345678us-west-1: HVM64:ami-34567890123456789ARM64:ami-45678901234567890eu-west-1: HVM64:ami-56789012345678901ARM64:ami-67890123456789012ap-southeast-1: HVM64:ami-78901234567890123ARM64:ami-89012345678901234ap-northeast-1: HVM64:ami-90123456789012345ARM64:ami-01234567890123456Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: Fn::FindInMap: - AWSRegionArch2AMI - Ref: AWS::Region - Fn::FindInMap: - AWSInstanceType2Arch - Ref: InstanceType - Arch
Verwenden Sie Fn:: FindInMap für umgebungsspezifische Konfigurationen
Das folgende Beispiel zeigt, wie Sie Fn::FindInMap für eine Vorlage mit einem Abschnitt Mappings verwenden, der eine einzelne Karte SecurityGroupsenthält. Sie enthält auch einen Parameter EnvironmentType, mit dem Sie angeben können, ob die Umgebung Dev oder Prodist. Der Standardwert ist Dev, kann aber bei der Stack-Erstellung überschrieben werden.
Fn::FindInMap gibt das entsprechende SecurityGroupIds auf der Grundlage des Parameters EnvironmentType zurück. Fn::Split teilt dann die durch Komma getrennte Zeichenfolge der Sicherheitsgruppen-IDs in eine Liste auf, die das erwartete Format für SecurityGroupIdsist.
Wenn Sie diesen Stack mit EnvironmentType auf Deveinstellen, wird SecurityGroupIds für EC2Instance zu sg-12345678. Wenn Sie EnvironmentType auf Prodsetzen, werden sg-abcdef01 und sg-ghijkl23verwendet.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters":{ "EnvironmentType":{ "Description":"The environment type (Dev or Prod)", "Type":"String", "Default":"Dev", "AllowedValues":[ "Dev", "Prod" ] } }, "Mappings":{ "SecurityGroups":{ "Dev":{ "SecurityGroupIds":"sg-12345678" }, "Prod":{ "SecurityGroupIds":"sg-abcdef01,sg-ghijkl23" } } }, "Resources":{ "Ec2Instance":{ "Type":"AWS::EC2::Instance", "Properties":{ "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: SecurityGroups: Dev: SecurityGroupIds:sg-12345678Prod: SecurityGroupIds:sg-abcdef01,sg-ghijkl23Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' InstanceType: t2.micro SecurityGroupIds: Fn::Split: - "," - Fn::FindInMap: [ SecurityGroups, !Ref EnvironmentType, SecurityGroupIds ]
Verwenden Sie Fn: FindInMap mit einem Standardwert
Im folgenden Beispiel wird a DefaultValue als Fallback verwendet, wenn ein Schlüssel im Mapping nicht gefunden wird. Wenn der aktuelle Wert im RegionMap Mapping nicht definiert AWS-Region ist, Fn::FindInMap kehrt er zurück, t3.micro anstatt einen Fehler auszulösen.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Mappings": { "RegionMap": { "us-east-1": { "InstanceType": "t3.large" }, "eu-west-1": { "InstanceType": "t3.medium" } } }, "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "InstanceType", { "DefaultValue": "t3.micro" } ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionMap: us-east-1: InstanceType: t3.large eu-west-1: InstanceType: t3.medium Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' InstanceType: !FindInMap - RegionMap - !Ref AWS::Region - InstanceType - DefaultValue: t3.micro
Unterstützte Funktionen
Sie können die folgenden Funktionen in einer Fn::FindInMap-Funktion verwenden:
-
Fn::FindInMap -
Ref
Zugehörige Ressourcen
Um systeminterne Funktionen außerhalb Fn::FindInMap und Ref in den Parametern einer Fn::FindInMap Funktion zu verwenden, müssen Sie die AWS::LanguageExtensions Transformation in Ihrer Vorlage deklarieren. Weitere Informationen finden Sie unter Fn:: FindInMap Verbesserungen.
Diese verwandten Themen können hilfreich sein, wenn Sie Vorlagen entwickeln, die die Funktion Fn::FindInMap verwenden.
-
CloudFormationMappingsVorlagensyntax im Benutzerhandbuch AWS CloudFormation