CloudFormation Mappingssintassi del modello - AWS CloudFormation

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

CloudFormation Mappingssintassi del modello

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 AWS::Region pseudo parametro è un valore che si CloudFormation risolve nella regione in cui viene creato lo stack. Gli pseudo parametri vengono risolti entro quando si crea lo stack. CloudFormation

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: Value1 Key2: Name: Value2 Key3: 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 String o List.

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

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 AMI IDs 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 cambia, utilizza un AWS Systems Manager parametro per recuperare l'ID AMI più recente quando lo stack viene creato o aggiornato. Le versioni più recenti di quelle comunemente utilizzate AMIs 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-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

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 seguente modello di esempio contiene una EC2 risorsa Amazon la cui InstanceType proprietà è assegnata dalla FindInMap funzione. La FindInMap funzione specifica key come Regione AWS punto in cui viene creato lo stack (utilizzando lo AWS::Region pseudo parametro) e InstanceType come nome del valore a cui mappare. ImageId utilizza un parametro Systems Manager per recuperare dinamicamente l’ultima AMI Amazon Linux 2. Per ulteriori informazioni sugli pseudoparametri, consulta Ottieni AWS valori 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 modello di esempio seguente mostra come creare un' EC2 istanza utilizzando più mappature. Il modello utilizza mappature annidate per selezionare automaticamente il tipo di istanza e il gruppo di sicurezza appropriati in base alla destinazione Regione AWS e al tipo di ambiente (o). Dev 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-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: !FindInMap [RegionAndEnvironmentToInstanceType, !Ref 'AWS::Region', !Ref EnvironmentType] SecurityGroupIds: - !FindInMap [RegionAndEnvironmentToSecurityGroup, !Ref 'AWS::Region', !Ref EnvironmentType]

Questi argomenti correlati possono essere utili per sviluppare modelli che utilizzano la funzione Fn::FindInMap.