Sintassi Mappings del modello CloudFormation
La sezione opzionale Mappings consente di creare coppie chiave-valore che possono essere utilizzate per specificare valori in base a determinate condizioni o dipendenze.
Un caso d’uso comune della sezione Mappings consiste nell’impostare i valori in base alla Regione AWS in cui viene distribuito lo stack. Ciò può essere ottenuto utilizzando lo pseudo parametro AWS::Region. Lo pseudo parametro AWS::Region è un valore che CloudFormation risolve come la regione in cui è stato creato lo stack. Gli pseudo parametri sono risolti da CloudFormation al momento della creazione dello stack.
Per recuperare i valori in una mappa, puoi utilizzare la funzione intrinseca Fn::FindInMap all’interno della sezione Resources del modello.
Sintassi
La sezione Mappings utilizza la sintassi seguente:
JSON
"Mappings" : { "MappingLogicalName" : { "Key1" : { "Name" : "Value1" }, "Key2" : { "Name" : "Value2" }, "Key3" : { "Name" : "Value3" } } }
YAML
Mappings:MappingLogicalName:Key1:Name:Value1Key2:Name:Value2Key3:Name:Value3
-
MappingLogicalNameè il nome logico per la mappatura. -
All’interno della mappatura, ogni mappa è una chiave seguita da un’altra mappatura.
-
La chiave deve essere una mappa di coppie nome-valore e univoca all’interno della mappatura.
-
La coppia nome-valore è un’etichetta e il valore da mappare. Se definisci i valori, puoi mappare più di un set di valori a una chiave.
-
Le chiavi nelle mappature devono essere stringhe letterali.
-
I valori possono essere di tipo
StringoList.
Nota
Non puoi includere parametri, pseudo parametri o funzioni intrinseche nella sezione Mappings.
Se i valori in una mappatura non vengono attualmente utilizzati dal proprio stack, non è possibile aggiornare la sola mappatura. Devi includere cambiamenti che comportano l’aggiunta, la modifica o l’eliminazione delle risorse.
Esempi
Argomenti
Mappatura di base
L’esempio seguente mostra una sezione Mappings con una mappa RegionToInstanceType, che contiene cinque chiavi mappate a coppie nome-valore contenenti singoli valori stringa. Le chiavi sono i nomi di Regione. Ogni coppia nome-valore è un tipo di istanza della famiglia T disponibile nella regione rappresentata dalla chiave. Le coppie nome-valore dispongono di un nome (InstanceType nell’esempio) e un valore.
JSON
"Mappings" : { "RegionToInstanceType" : { "us-east-1" : { "InstanceType" : "t2.micro" }, "us-west-1" : { "InstanceType" : "t2.micro" }, "eu-west-1" : { "InstanceType" : "t2.micro" }, "eu-north-1" : { "InstanceType" : "t3.micro" }, "me-south-1" : { "InstanceType" : "t3.micro" } } }
YAML
Mappings: RegionToInstanceType: us-east-1: InstanceType: t2.micro us-west-1: InstanceType: t2.micro eu-west-1: InstanceType: t2.micro eu-north-1: InstanceType: t3.micro me-south-1: InstanceType: t3.micro
Mappatura con più valori
L’esempio seguente fa riferimento a chiavi di regione mappate a due set di valori: uno denominato MyAMI1 e l’altro MyAMI2.
Nota
Gli ID AMI mostrati in questi esempi sono segnaposto a scopo dimostrativo. Quando possibile, prendi in considerazione l’utilizzo di riferimenti dinamici ai parametri AWS Systems Manager come alternativa alla sezione Mappings. Per evitare di aggiornare tutti i modelli con un nuovo ID ogni volta che l’AMI che desideri utilizzare viene modificata, utilizza un parametro AWS Systems Manager per recuperare l’ID AMI più recente quando lo stack viene creato o aggiornato. Le versioni più recenti delle AMI di uso comune sono disponibili anche come parametri pubblici in Systems Manager. Per ulteriori informazioni, consulta Get values stored in other services using dynamic references.
JSON
"Mappings" : { "RegionToAMI" : { "us-east-1" : { "MyAMI1" : "ami-12345678901234567", "MyAMI2" : "ami-23456789012345678" }, "us-west-1" : { "MyAMI1" : "ami-34567890123456789", "MyAMI2" : "ami-45678901234567890" }, "eu-west-1" : { "MyAMI1" : "ami-56789012345678901", "MyAMI2" : "ami-67890123456789012" }, "ap-southeast-1" : { "MyAMI1" : "ami-78901234567890123", "MyAMI2" : "ami-89012345678901234" }, "ap-northeast-1" : { "MyAMI1" : "ami-90123456789012345", "MyAMI2" : "ami-01234567890123456" } } }
YAML
Mappings: RegionToAMI: us-east-1: MyAMI1:ami-12345678901234567MyAMI2:ami-23456789012345678us-west-1: MyAMI1:ami-34567890123456789MyAMI2:ami-45678901234567890eu-west-1: MyAMI1:ami-56789012345678901MyAMI2:ami-67890123456789012ap-southeast-1: MyAMI1:ami-78901234567890123MyAMI2:ami-89012345678901234ap-northeast-1: MyAMI1:ami-90123456789012345MyAMI2:ami-01234567890123456
Restituzione di un valore da una mappatura
Puoi utilizzare la funzione Fn::FindInMap per restituire un valore denominato in base a una chiave specificata. Il modello di esempio seguente contiene una risorsa Amazon EC2 la cui proprietà InstanceType viene assegnata dalla funzione FindInMap. La funzione FindInMap specifica la chiave come la Regione AWS in cui viene creato lo stack (tramite lo pseudo parametro AWS::Region) e InstanceType come nome del valore a cui eseguire la mappatura. ImageId utilizza un parametro Systems Manager per recuperare dinamicamente l’ultima AMI Amazon Linux 2. Per ulteriori informazioni sugli pseudo parametri, consulta Ottenimento di valori AWS usando pseudo parametri.
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionToInstanceType" : { "us-east-1" : { "InstanceType" : "t2.micro" }, "us-west-1" : { "InstanceType" : "t2.micro" }, "eu-west-1" : { "InstanceType" : "t2.micro" }, "eu-north-1" : { "InstanceType" : "t3.micro" }, "me-south-1" : { "InstanceType" : "t3.micro" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType" : { "Fn::FindInMap" : [ "RegionToInstanceType", { "Ref" : "AWS::Region" }, "InstanceType" ]} } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionToInstanceType: us-east-1: InstanceType: t2.micro us-west-1: InstanceType: t2.micro eu-west-1: InstanceType: t2.micro eu-north-1: InstanceType: t3.micro me-south-1: InstanceType: t3.micro Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' InstanceType: !FindInMap [RegionToInstanceType, !Ref 'AWS::Region', InstanceType]
Parametro di input e Fn::FindInMap
Il seguente modello di esempio mostra come creare un’istanza EC2 utilizzando più mappature. Il modello utilizza mappature nidificate per selezionare automaticamente il tipo di istanza e il gruppo di sicurezza appropriati in base al tipo di destinazione Regione AWS e di ambiente (Dev o Prod). Utilizza anche un parametro Systems Manager per recuperare dinamicamente l’ultima AMI Amazon Linux 2.
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "EnvironmentType" : { "Description" : "The environment type (Dev or Prod)", "Type" : "String", "Default" : "Dev", "AllowedValues" : [ "Dev", "Prod" ] } }, "Mappings" : { "RegionAndEnvironmentToInstanceType" : { "us-east-1" : { "Dev" : "t3.micro", "Prod" : "c5.large" }, "us-west-1" : { "Dev" : "t2.micro", "Prod" : "m5.large" } }, "RegionAndEnvironmentToSecurityGroup" : { "us-east-1" : { "Dev" : "sg-12345678", "Prod" : "sg-abcdef01" }, "us-west-1" : { "Dev" : "sg-ghijkl23", "Prod" : "sg-45678abc" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType" : { "Fn::FindInMap": [ "RegionAndEnvironmentToInstanceType", { "Ref": "AWS::Region" }, { "Ref": "EnvironmentType" } ]}, "SecurityGroupIds" : [{ "Fn::FindInMap" : [ "RegionAndEnvironmentToSecurityGroup", { "Ref" : "AWS::Region" }, { "Ref" : "EnvironmentType" } ]}] } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: RegionAndEnvironmentToInstanceType: us-east-1: Dev: t3.micro Prod: c5.large us-west-1: Dev: t2.micro Prod: m5.large RegionAndEnvironmentToSecurityGroup: us-east-1: Dev:sg-12345678Prod:sg-abcdef01us-west-1: Dev:sg-ghijkl23Prod:sg-45678abcResources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' InstanceType: !FindInMap [RegionAndEnvironmentToInstanceType, !Ref 'AWS::Region', !Ref EnvironmentType] SecurityGroupIds: - !FindInMap [RegionAndEnvironmentToSecurityGroup, !Ref 'AWS::Region', !Ref EnvironmentType]
Risorse correlate
Questi argomenti correlati possono essere utili per sviluppare modelli che utilizzano la funzione Fn::FindInMap.