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
.
Utiliser Fn::FindInMap avec des valeurs spécifiques à la région
L'exemple suivant montre comment utiliser Fn::FindInMap
un modèle avec une Mappings
section contenant une seule carte RegionMap
associée à AMIs des AWS régions.
-
La carte comporte 5 clés de haut niveau qui correspondent à différentes AWS régions.
-
Chaque clé de niveau supérieur se voit attribuer une liste de deux clés
"HVM64"
de"HVMG2"
deuxième niveau correspondant à AMI son architecture. -
Un AMI nom approprié est attribué à chacune des touches de deuxième niveau.
Cet exemple de modèle contient une ressources AWS::EC2::Instance
dont la propriété ImageId
est définie par la fonction FindInMap
.
MapName
indique la carte d’intérêt ("RegionMap"
dans cet exemple). TopLevelKey
indique la région où la pile est créée, qui est déterminée à l’aide du pseudo-paramètre "AWS::Region"
. SecondLevelKey
est défini sur l’architecture souhaitée ("HVM64"
dans cet exemple).
FindInMap
renvoie la valeur AMI assignée àFindInMap
. Pour une HVM64 instance dans FindInMap
us-east-1, retournerait. "ami-0ff8a91507f77f867"
Note
Considérez AWS Systems Manager les paramètres comme une alternative à la Mappings
section. Pour éviter de mettre à jour tous vos modèles avec un nouvel identifiant chaque fois AMI que celui que vous souhaitez utiliser change, utilisez le type de AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
paramètre pour récupérer le dernier AMI identifiant 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 de plus amples informations, veuillez consulter Référencez les ressources existantes et les paramètres de Systems Manager avec les CloudFormation types de paramètres fournis.
JSON
{ ... "Mappings" : { "RegionMap" : { "us-east-1" : { "HVM64" : "ami-0ff8a91507f77f867", "HVMG2" : "ami-0a584ac55a7631c0c" }, "us-west-1" : { "HVM64" : "ami-0bdb828fd58c52235", "HVMG2" : "ami-066ee5fd4a9ef77f1" }, "eu-west-1" : { "HVM64" : "ami-047bb4163c506cd98", "HVMG2" : "ami-0a7c483d527806435" }, "ap-southeast-1" : { "HVM64" : "ami-08569b978cc4dfa10", "HVMG2" : "ami-0be9df32ae9f92309" }, "ap-northeast-1" : { "HVM64" : "ami-06cd52961ce9f0d85", "HVMG2" : "ami-053cdd503598e4a9d" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "HVM64" ] }, "InstanceType" : "t2.micro" } } } }
YAML
Mappings: RegionMap: us-east-1: HVM64: "ami-0ff8a91507f77f867" HVMG2: "ami-0a584ac55a7631c0c" us-west-1: HVM64: "ami-0bdb828fd58c52235" HVMG2: "ami-066ee5fd4a9ef77f1" eu-west-1: HVM64: "ami-047bb4163c506cd98" HVMG2: "ami-0a7c483d527806435" ap-southeast-1: HVM64: "ami-08569b978cc4dfa10" HVMG2: "ami-0be9df32ae9f92309" ap-northeast-1: HVM64: "ami-06cd52961ce9f0d85" HVMG2: "ami-053cdd503598e4a9d" Resources: myEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap - RegionMap - !Ref 'AWS::Region' - HVM64 InstanceType: t2.micro
Utiliser 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::FindInMap
renvoie la valeur appropriée SecurityGroupIds
en fonction du EnvironmentType
paramètre. Fn::Split
divise ensuite la chaîne du groupe de sécurité séparée par des virgules IDs en une liste, au 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
{ ... "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": "ami-0a70b9d193ae8a799", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }
YAML
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: ami-0a70b9d193ae8a799 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.