Fn::FindInMap - AWS CloudFormation

Ini adalah Panduan Referensi AWS CloudFormation Template baru. Harap perbarui bookmark dan tautan Anda. Untuk bantuan memulai CloudFormation, lihat Panduan AWS CloudFormation Pengguna.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fn::FindInMap

Fungsi intrinsik Fn::FindInMap mengembalikan nilai yang sesuai dengan kunci dalam peta dua tingkat yang dideklarasikan di bagian. Mappings

Pernyataan

JSON

{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }

YAML

Sintaks untuk nama fungsi penuh:

Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]

Sintaks untuk bentuk pendek:

!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
catatan

Anda tidak dapat me-nest dua instans dari dua fungsi dalam bentuk singkat.

Parameter

MapName

Nama logis dari pemetaan dinyatakan di bagian Pemetaan yang berisi kunci dan nilai.

TopLevelKey

Nama kunci tingkat atas. Nilainya adalah daftar pasangan nilai kunci.

SecondLevelKey

Nama kunci tingkat kedua, yang diatur ke salah satu kunci dari daftar yang ditetapkan untuk TopLevelKey.

Nilai yang dikembalikan

Nilai yang ditetapkan untukSecondLevelKey.

Contoh

Contoh berikut menunjukkan cara menggunakan fungsi Fn::FindInMap.

Gunakan Fn::FindInMap dengan nilai khusus wilayah

Contoh berikut menunjukkan cara menggunakan Fn::FindInMap dalam template yang mencakup dua pemetaan: AWSInstanceType2Arch dan. AWSRegionArch2AMI Ini juga mencakup InstanceType parameter yang memungkinkan Anda memilih antara t3.micro dant4g.nano. Defaultnya adalaht3.micro, tetapi ini dapat diganti selama pembuatan tumpukan.

Fn::FindInMappertama-tama menentukan arsitektur (HVM64atauARM64) berdasarkan jenis instance yang dipilih, dan kemudian mencari ID AMI yang benar untuk arsitektur tersebut saat ini Wilayah AWS.

catatan

AMI yang IDs ditunjukkan dalam contoh ini adalah placeholder untuk tujuan demonstrasi. Jika memungkinkan, pertimbangkan untuk menggunakan referensi dinamis ke AWS Systems Manager parameter sebagai alternatif untuk Mappings bagian tersebut. Untuk menghindari memperbarui semua template Anda dengan ID baru setiap kali AMI yang ingin Anda gunakan berubah, gunakan AWS Systems Manager parameter untuk mengambil ID AMI terbaru saat tumpukan dibuat atau diperbarui. Versi terbaru yang umum digunakan juga AMIs tersedia sebagai parameter publik di Systems Manager. Untuk informasi selengkapnya, lihat Mendapatkan nilai yang disimpan di layanan lain menggunakan referensi dinamis.

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

Gunakan Fn::FindInMap untuk konfigurasi khusus lingkungan

Contoh berikut menunjukkan bagaimana menggunakan Fn::FindInMap untuk template dengan Mappings bagian yang berisi peta tunggal,SecurityGroups. Ini juga berisi EnvironmentType parameter yang memungkinkan Anda menentukan apakah lingkungan tersebut Dev atauProd. Defaultnya Dev tetapi dapat diganti selama pembuatan tumpukan.

Fn::FindInMapmengembalikan yang sesuai SecurityGroupIds berdasarkan EnvironmentType parameter. Fn::Splitkemudian membagi string grup keamanan yang dipisahkan koma IDs ke dalam daftar, yang merupakan format yang diharapkan untuk. SecurityGroupIds

Jika Anda menerapkan tumpukan ini dengan EnvironmentType set toDev, SecurityGroupIds for EC2Instance akan menjadisg-12345678. Jika Anda mengatur EnvironmentType keProd, itu akan menggunakan sg-abcdef01 dansg-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 ]

Fungsi yang didukung

Anda dapat menggunakan fungsi berikut di fungsi Fn::FindInMap:

  • Fn::FindInMap

  • Ref

Sumber daya terkait

Untuk menggunakan fungsi intrinsik lainnya atau nilai default dalam suatu Fn::FindInMap fungsi, Anda harus mendeklarasikan AWS::LanguageExtensions transformasi dalam template Anda. Untuk informasi selengkapnya, lihat Fn::FindInMap enhancements.

Topik terkait ini dapat membantu saat Anda mengembangkan templat yang menggunakan Fn::FindInMap fungsi tersebut.