View a markdown version of this page

Fn:: FindInMap - AWS CloudFormation

Ini adalah Panduan Referensi 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"] }

Jika Anda ingin menentukan nilai fallback ketika kunci tidak ditemukan dalam pemetaan, sertakan: DefaultValue

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

YAML

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]

Jika Anda ingin menentukan nilai fallback ketika kunci tidak ditemukan dalam pemetaan, sertakan: DefaultValue

Sintaks untuk nama fungsi penuh:

Fn::FindInMap: - MapName - TopLevelKey - SecondLevelKey - DefaultValue: DefaultValue

Sintaks untuk bentuk pendek:

!FindInMap - MapName - TopLevelKey - SecondLevelKey - DefaultValue: DefaultValue
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.

DefaultValue

Nilai yang Fn::FindInMap mengembalikan jika salah satu TopLevelKey atau SecondLevelKey tidak ditemukan dalam pemetaan tertentu. Parameter ini bersifat opsional. Jika dihilangkan, Fn::FindInMap menimbulkan kesalahan ketika kunci tidak ditemukan.

Parameter keempat harus berupa peta dengan kunciDefaultValue. Sebagai contoh: {"DefaultValue": "us-east-1"}.

Nilai yang dikembalikan

Nilai yang ditetapkan untukSecondLevelKey. Jika TopLevelKey atau SecondLevelKey tidak ditemukan dan a DefaultValue ditentukan, DefaultValue dikembalikan sebagai gantinya.

Contoh

Contoh berikut menunjukkan cara menggunakan fungsi Fn::FindInMap.

Gunakan Fn:: FindInMap dengan nilai spesifik 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

ID AMI yang ditampilkan 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 dari AMI yang umum digunakan juga 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 ID grup keamanan yang dipisahkan koma 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 ]

Gunakan Fn:: FindInMap dengan nilai default

Contoh berikut menggunakan a DefaultValue untuk memberikan fallback ketika kunci tidak ditemukan dalam pemetaan. Jika arus tidak Wilayah AWS ditentukan dalam RegionMap pemetaan, Fn::FindInMap kembali t3.micro alih-alih menimbulkan kesalahan.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Mappings": { "RegionMap": { "us-east-1": { "InstanceType": "t3.large" }, "eu-west-1": { "InstanceType": "t3.medium" } } }, "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "InstanceType", { "DefaultValue": "t3.micro" } ] } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionMap: us-east-1: InstanceType: t3.large eu-west-1: InstanceType: t3.medium Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' InstanceType: !FindInMap - RegionMap - !Ref AWS::Region - InstanceType - DefaultValue: t3.micro

Fungsi yang didukung

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

  • Fn::FindInMap

  • Ref

Sumber daya terkait

Untuk menggunakan fungsi intrinsik di luar Fn::FindInMap dan Ref dalam parameter Fn::FindInMap fungsi, Anda harus mendeklarasikan AWS::LanguageExtensions transformasi dalam template Anda. Untuk informasi selengkapnya, lihat Fn:: perangkat tambahan FindInMap.

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