Fn::FindInMap - AWS CloudFormation

Dies ist der neue AWS CloudFormation Vorlagen-Referenzleitfaden. 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.

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.

Parameter

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.

Wird mit regionsspezifischen Werten verwendet Fn::FindInMap

Das folgende Beispiel zeigt die Verwendung Fn::FindInMap in einer Vorlage, die zwei Zuordnungen enthält: und. AWSInstanceType2Arch AWSRegionArch2AMI Es enthält auch einen InstanceType Parameter, mit dem Sie zwischen und t3.micro wählen können. t4g.nano Die Standardeinstellung istt3.micro, kann aber bei der Stapelerstellung außer Kraft gesetzt werden.

Fn::FindInMapbestimmt zuerst die Architektur (HVM64oderARM64) auf der Grundlage des ausgewählten Instance-Typs und sucht dann in der aktuellen Version nach der richtigen AMI-ID für diese Architektur AWS-Region.

Anmerkung

Die in diesen Beispielen IDs gezeigten AMI sind Platzhalter zu Demonstrationszwecken. Erwägen Sie, wann immer möglich, dynamische Verweise auf AWS Systems Manager Parameter als Alternative zum Mappings Abschnitt zu 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 mithilfe dynamischer Verweise.

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

Wird Fn::FindInMap für umgebungsspezifische Konfigurationen verwendet

Das folgende Beispiel zeigt die Verwendung Fn::FindInMap für eine Vorlage mit einem Mappings Abschnitt, der eine einzelne Map enthält,. SecurityGroups Es enthält auch einen EnvironmentType Parameter, mit dem Sie angeben können, ob die Umgebung Dev oder istProd. Es ist standardmäßig aktiviert, kann Dev aber bei der Stack-Erstellung überschrieben werden.

Fn::FindInMapgibt auf der SecurityGroupIds Grundlage des Parameters den entsprechenden Wert zurück. EnvironmentType 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 der EnvironmentType Einstellung auf bereitstellenDev, lautet der Wert SecurityGroupIds fürEC2Instance. sg-12345678 Wenn Sie EnvironmentType auf einstellenProd, verwendet er sg-abcdef01 undsg-ghijkl23.

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 systeminterne 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 bei der Entwicklung von Vorlagen, die diese Funktion verwenden, hilfreich sein. Fn::FindInMap