Fn::FindInMap - AWS CloudFormation

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 CloudFormationBenutzerhandbuch.

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.

Fn::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"] }

YAML

Syntax für den vollständigen Funktionsnamen:

Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]

Syntax für die Kurzform:

!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
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 TopLevelKey zugewiesenen Liste.

Rückgabewert

Zurückgegeben wird der Wert, der dem SecondLevelKey-Parameter zugewiesen ist.

Beispiele

Das folgende Beispiele zeigt, wie die Fn::FindInMap-Funktion verwendet wird.

Verwenden Sie Fn::FindInMap mit regionalspezifischen 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 IDs gezeigten AMI sind Platzhalter zu Demonstrationszwecken. 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 von Common Used 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-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

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::FindInMapgibt auf der SecurityGroupIds Grundlage des EnvironmentType Parameters den entsprechenden Wert zurück. Fn::Splitteilt dann die durch Kommas getrennte Zeichenfolge der Sicherheitsgruppe IDs in eine Liste auf, was das erwartete Format für ist. SecurityGroupIds

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-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 ]

Unterstützte Funktionen

Sie können die folgenden Funktionen in einer Fn::FindInMap-Funktion verwenden:

  • Fn::FindInMap

  • Ref

Zugehörige Ressourcen

Um andere intrinsische Funktionen oder einen Standardwert in einer Fn::FindInMap-Funktion zu verwenden, müssen Sie die AWS::LanguageExtensions-Transformation in Ihrer Vorlage deklarieren. Weitere Informationen finden Sie unter Fn::FindInMap enhancements.

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