Il s'agit du nouveau guide AWS CloudFormation de référence des modèles. Veuillez mettre à jour vos favoris et vos liens. Pour obtenir de l'aide pour démarrer CloudFormation, consultez le guide de AWS CloudFormation l'utilisateur.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Fn::FindInMap
La fonction intrinsèque Fn::FindInMap renvoie la valeur correspondant aux clés dans un mappage à deux niveaux déclaré dans la section Mappings.
Déclaration
JSON
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
YAML
Syntaxe pour le nom complet de la fonction :
Fn::FindInMap: [MapName,TopLevelKey,SecondLevelKey]
Syntaxe pour la forme courte :
!FindInMap [MapName,TopLevelKey,SecondLevelKey]
Note
Vous ne pouvez pas imbriquer deux instances de deux fonctions sous une forme courte.
Paramètres
- MapName
-
Nom logique d'un mappage déclaré dans la section Mappings, qui contient les clés et les valeurs.
- TopLevelKey
-
Nom de la clé de niveau supérieur. Sa valeur est une liste des paires clé-valeur.
- SecondLevelKey
-
Nom de la clé de deuxième niveau, qui est l'une des clés de la liste assignée à
TopLevelKey.
Valeur renvoyée
La valeur qui est assignée à SecondLevelKey.
Exemples
Les exemples suivants montrent comment utiliser la fonction Fn::FindInMap.
Rubriques
Utilisation Fn::FindInMap avec des valeurs spécifiques à une région
L'exemple suivant montre comment utiliser Fn::FindInMap dans un modèle qui inclut deux mappages : AWSInstanceType2Arch etAWSRegionArch2AMI. Il inclut également un InstanceType paramètre qui vous permet de choisir entre t3.micro ett4g.nano. La valeur par défaut estt3.micro, mais elle peut être remplacée lors de la création de la pile.
Fn::FindInMapdétermine d'abord l'architecture (HVM64ouARM64) en fonction du type d'instance sélectionné, puis recherche l'ID d'AMI correct pour cette architecture dans l'actuelle Région AWS.
Note
Les AMI IDs présentées dans ces exemples sont des espaces réservés à des fins de démonstration. Dans la mesure du possible, envisagez d'utiliser des références dynamiques aux AWS Systems Manager paramètres comme alternative à la Mappings section. Pour éviter de mettre à jour tous vos modèles avec un nouvel identifiant chaque fois que l'AMI que vous souhaitez utiliser change, utilisez un AWS Systems Manager paramètre pour récupérer le dernier ID d'AMI lors de la création ou de la mise à jour de la pile. Les dernières versions des paramètres couramment utilisés AMIs sont également disponibles en tant que paramètres publics dans Systems Manager. Pour plus d'informations, voir Obtenir des valeurs stockées dans d'autres services à l'aide de références dynamiques.
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
Utilisation Fn::FindInMap pour des configurations spécifiques à l'environnement
L'exemple suivant montre comment utiliser Fn::FindInMap un modèle avec une Mappings section contenant une seule carte,SecurityGroups. Il contient également un EnvironmentType paramètre qui vous permet de spécifier si l'environnement est Dev ouProd. Elle est définie par défaut Dev mais peut être remplacée lors de la création de la pile.
Fn::FindInMaprenvoie la valeur appropriée SecurityGroupIds en fonction du EnvironmentType paramètre. Fn::Splitdivise ensuite la chaîne du groupe de sécurité séparée par des virgules IDs en une liste, selon le format attendu pour. SecurityGroupIds
Si vous déployez cette pile avec EnvironmentType set toDev, le SecurityGroupIds for EC2Instance serasg-12345678. Si vous EnvironmentType réglez surProd, il utilisera sg-abcdef01 etsg-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-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 ]
Fonctions prises en charge
Vous pouvez utiliser les fonctions suivantes dans une fonction Fn::FindInMap :
-
Fn::FindInMap -
Ref
Ressources connexes
Pour utiliser d'autres fonctions intrinsèques ou une valeur par défaut dans une Fn::FindInMap fonction, vous devez déclarer la AWS::LanguageExtensions transformation dans votre modèle. Pour de plus amples informations, veuillez consulter Fn::FindInMap
enhancements.
Ces rubriques connexes peuvent être utiles lorsque vous développez des modèles utilisant cette Fn::FindInMap fonction.
-
CloudFormationMappingssyntaxe du modèle dans le guide de AWS CloudFormation l'utilisateur