Referensikan sumber daya yang ada dan parameter Systems Manager dengan CloudFormation tipe parameter yang disediakan - AWS CloudFormation

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

Referensikan sumber daya yang ada dan parameter Systems Manager dengan CloudFormation tipe parameter yang disediakan

Saat membuat templat, Anda dapat membuat parameter yang mengharuskan pengguna memasukkan pengenal AWS sumber daya yang ada atau parameter Systems Manager dengan menggunakan tipe parameter khusus yang disediakan oleh CloudFormation.

Gambaran Umum

Di CloudFormation, Anda dapat menggunakan parameter untuk menyesuaikan tumpukan Anda dengan memberikan nilai input selama pembuatan atau pembaruan tumpukan. Fitur ini membuat template Anda dapat digunakan kembali dan fleksibel di berbagai skenario.

Parameter didefinisikan di Parameters bagian CloudFormation template. Setiap parameter memiliki nama dan tipe, dan dapat memiliki pengaturan tambahan seperti nilai default dan nilai yang diizinkan. Untuk informasi selengkapnya, lihat CloudFormation template Parameters sintaksis.

Jenis parameter menentukan jenis nilai input yang dapat diterima parameter. Misalnya, Number hanya menerima nilai numerik, sementara String menerima input teks.

CloudFormation menyediakan beberapa jenis parameter tambahan yang dapat Anda gunakan dalam template Anda untuk mereferensikan AWS sumber daya yang ada dan parameter Systems Manager.

Jenis parameter ini terbagi dalam dua kategori:

  • AWS Jenis parameter spesifik - CloudFormation menyediakan satu set tipe parameter yang membantu catch nilai yang tidak valid saat membuat atau memperbarui tumpukan. Saat Anda menggunakan tipe parameter ini, siapa pun yang menggunakan template Anda harus menentukan nilai yang valid dari Akun AWS dan Wilayah tempat mereka membuat tumpukan.

    Jika mereka menggunakan AWS Management Console, CloudFormation berikan daftar nilai yang ada yang sudah terisi sebelumnya dari akun dan Wilayah mereka. Dengan cara ini, pengguna tidak perlu mengingat dan mengetikkan nama atau ID tertentu dengan benar. Sebaliknya, mereka hanya memilih nilai dari daftar drop-down. Dalam beberapa kasus, mereka bahkan dapat mencari nilai berdasarkan ID, nama, atau nilai Name tag.

  • Jenis parameter Systems Manager — CloudFormation juga menyediakan tipe parameter yang sesuai dengan parameter yang ada di Systems Manager Parameter Store. Bila Anda menggunakan tipe parameter ini, siapa pun yang menggunakan template Anda harus menentukan kunci Parameter Store sebagai nilai tipe parameter Systems Manager, dan CloudFormation kemudian mengambil nilai terbaru dari Parameter Store untuk digunakan dalam tumpukan mereka. Ini dapat berguna ketika Anda perlu sering memperbarui aplikasi dengan nilai properti baru, seperti Amazon Machine Image baru (AMI)IDs. Untuk informasi tentang Parameter Store, lihat Systems Manager Parameter Store.

Setelah parameter Anda ditentukan di Parameters bagian, Anda dapat mereferensikan nilai parameter di seluruh CloudFormation template Anda menggunakan Ref fungsi.

Contoh

Contoh berikut menunjukkan template yang menggunakan jenis parameter berikut.

  • AWS::EC2::VPC::Id

  • AWS::EC2::Subnet::Id

  • AWS::EC2::KeyPair::KeyName

  • AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>

Untuk membuat tumpukan dari template ini, Anda harus menentukan VPC ID yang ada, subnet ID, dan nama key pair dari akun Anda. Anda juga dapat menentukan kunci Parameter Store yang ada yang mereferensikan AMI ID yang diinginkan atau menyimpan nilai default/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2. Parameter publik ini adalah alias untuk AMI ID regional untuk Amazon Linux 2 AMI terbaru. Untuk informasi selengkapnya tentang parameter publik, lihat Menemukan parameter publik di Penyimpanan Parameter di Panduan AWS Systems Manager Pengguna.

JSON

{ "Parameters": { "VpcId": { "Description": "ID of an existing Virtual Private Cloud (VPC).", "Type": "AWS::EC2::VPC::Id" }, "PublicSubnetId": { "Description": "ID of an existing public subnet within the specified VPC.", "Type": "AWS::EC2::Subnet::Id" }, "KeyName": { "Description": "Name of an existing EC2 key pair to enable SSH access to the instance.", "Type": "AWS::EC2::KeyPair::KeyName" }, "AMIId": { "Description": "Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI).", "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>", "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" } }, "Resources": { "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "VpcId": { "Ref": "VpcId" }, "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } }, "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "ImageId": { "Ref": "AMIId" }, "NetworkInterfaces": [ { "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "SubnetId": { "Ref": "PublicSubnetId" }, "GroupSet": [{ "Ref": "InstanceSecurityGroup" }] } ] } } }, "Outputs": { "InstanceId": { "Value": { "Ref": "Ec2Instance" } } } }

YAML

Parameters: VpcId: Description: ID of an existing Virtual Private Cloud (VPC). Type: 'AWS::EC2::VPC::Id' PublicSubnetId: Description: ID of an existing public subnet within the specified VPC. Type: 'AWS::EC2::Subnet::Id' KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance. Type: 'AWS::EC2::KeyPair::KeyName' AMIId: Description: Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI). Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 VpcId: !Ref VpcId SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 Ec2Instance: Type: 'AWS::EC2::Instance' Properties: KeyName: !Ref KeyName ImageId: !Ref AMIId NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !Ref PublicSubnetId GroupSet: - !Ref InstanceSecurityGroup Outputs: InstanceId: Value: !Ref Ec2Instance

AWS CLI perintah untuk membuat tumpukan

Berikut ini create-stackperintah membuat tumpukan berdasarkan contoh template.

aws cloudformation create-stack --stack-name MyStack \ --template-body file://sampletemplate.json \ --parameters \ ParameterKey="VpcId",ParameterValue="vpc-a123baa3" \ ParameterKey="PublicSubnetId",ParameterValue="subnet-123a351e" \ ParameterKey="KeyName",ParameterValue="MyKeyName" \ ParameterKey="AMIId",ParameterValue="MyParameterKey"

Untuk menggunakan tipe parameter yang menerima daftar string, sepertiList<AWS::EC2::Subnet::Id>, Anda harus keluar dari koma di dalam ParameterValue dengan garis miring terbalik ganda, seperti yang ditunjukkan pada contoh berikut.

--parameters ParameterKey="SubnetIDs",ParameterValue="subnet-5ea0c127\\,subnet-6194ea3b\\,subnet-c87f2be0"

Pertimbangan

Sangat disarankan agar Anda menggunakan referensi dinamis untuk membatasi akses ke definisi konfigurasi sensitif, seperti kredensi pihak ketiga. Untuk informasi selengkapnya, lihat Dapatkan nilai yang disimpan di layanan lain menggunakan referensi dinamis.

Jika Anda ingin mengizinkan pengguna template untuk menentukan nilai dari yang berbeda Akun AWS, jangan gunakan tipe parameter AWS-specific. Sebaliknya, tentukan parameter tipe String atauCommaDelimitedList.

Ada beberapa hal yang perlu diingat dengan tipe parameter Systems Manager:

  • Anda dapat melihat nilai parameter yang diselesaikan pada tab Parameter tumpukan di konsol, atau dengan menjalankan describe-stacks atau describe-change-set. Ingat, nilai-nilai ini ditetapkan ketika tumpukan dibuat atau diperbarui, sehingga mereka mungkin berbeda dari nilai terbaru di Parameter Store.

  • Untuk pembaruan tumpukan, saat Anda menggunakan opsi Use existing value (atau disetel UsePreviousValue ke true), ini berarti Anda ingin tetap menggunakan kunci Parameter Store yang sama, bukan nilainya. CloudFormation selalu mengambil nilai terbaru.

  • Jika Anda menentukan nilai yang diizinkan atau kendala lainnya, CloudFormation validasi terhadap kunci parameter yang Anda tentukan, tetapi bukan nilainya. Anda harus memvalidasi nilai di Parameter Store itu sendiri.

  • Saat Anda membuat atau memperbarui tumpukan dan membuat set perubahan, CloudFormation gunakan nilai apa pun yang ada di Parameter Store pada saat itu. Jika parameter tertentu tidak ada di Parameter Store di bawah pemanggil Akun AWS, CloudFormation mengembalikan kesalahan validasi.

  • Ketika Anda menjalankan set perubahan, CloudFormation menggunakan nilai-nilai yang ditentukan dalam set perubahan. Anda harus meninjau nilai-nilai ini sebelum mengeksekusi perubahan yang ditetapkan karena mereka mungkin berubah dalam Penyimpanan Parameter antara waktu saat Anda membuat perubahan set dan menjalankannya.

  • Untuk parameter Parameter Store yang disimpan dalam hal yang sama Akun AWS, Anda harus memberikan nama parameter. Untuk parameter Parameter Store yang dibagikan oleh yang lain Akun AWS, Anda harus memberikan parameter lengkapARN.

Jenis parameter AWS spesifik yang didukung

CloudFormation mendukung jenis AWS-spesifik berikut:

AWS::EC2::AvailabilityZone::Name

Availability Zone, seperti us-west-2a.

AWS::EC2::Image::Id

ID EC2 gambar Amazon, sepertiami-0ff8a91507f77f867. Perhatikan bahwa CloudFormation konsol tidak menampilkan daftar drop-down nilai untuk jenis parameter ini.

AWS::EC2::Instance::Id

ID EC2 instans Amazon, sepertii-1e731a32.

AWS::EC2::KeyPair::KeyName

Nama EC2 key pair Amazon.

AWS::EC2::SecurityGroup::GroupName

Nama grup VPC keamanan default, sepertimy-sg-abc.

AWS::EC2::SecurityGroup::Id

ID grup keamanan, seperti sg-a123fd85.

AWS::EC2::Subnet::Id

ID subnet, seperti subnet-123a351e.

AWS::EC2::Volume::Id

ID EBS volume Amazon, sepertivol-3cdd3f56.

AWS::EC2::VPC::Id

VPCID, sepertivpc-a123baa3.

AWS::Route53::HostedZone::Id

ID zona yang dihosting Amazon Route 53, sepertiZ23YXV4OVPL04A.

List<AWS::EC2::AvailabilityZone::Name>

Susunan Availability Zone untuk suatu wilayah, seperti us-west-2a, us-west-2b.

List<AWS::EC2::Image::Id>

Array EC2 gambar AmazonIDs, sepertiami-0ff8a91507f77f867, ami-0a584ac55a7631c0c. Perhatikan bahwa CloudFormation konsol tidak menampilkan daftar drop-down nilai untuk jenis parameter ini.

List<AWS::EC2::Instance::Id>

Array EC2 contoh AmazonIDs, sepertii-1e731a32, i-1e731a34.

List<AWS::EC2::SecurityGroup::GroupName>

Array nama grup VPC keamanan default, sepertimy-sg-abc, my-sg-def.

List<AWS::EC2::SecurityGroup::Id>

Sebuah array dari kelompok keamananIDs, seperti sg-a123fd85, sg-b456fd85

List<AWS::EC2::Subnet::Id>

Sebuah array subnetIDs, sepertisubnet-123a351e, subnet-456b351e.

List<AWS::EC2::Volume::Id>

Array EBS volume AmazonIDs, sepertivol-3cdd3f56, vol-4cdd3f56.

List<AWS::EC2::VPC::Id>

Sebuah array VPCIDs, sepertivpc-a123baa3, vpc-b456baa3.

List<AWS::Route53::HostedZone::Id>

Array zona yang dihosting Amazon Route 53IDs, sepertiZ23YXV4OVPL04A, Z23YXV4OVPL04B.

Jenis parameter Systems Manager yang Didukung

CloudFormation mendukung jenis parameter Systems Manager berikut:

AWS::SSM::Parameter::Name

Nama kunci parameter Systems Manager. Gunakan jenis parameter ini hanya untuk memeriksa apakah ada parameter yang diperlukan. CloudFormation tidak akan mengambil nilai aktual yang terkait dengan parameter.

AWS::SSM::Parameter::Value<String>

Parameter Systems Manager yang nilainya adalah string. Hal ini sesuai dengan String tipe parameter di Penyimpanan Parameter.

AWS::SSM::Parameter::Value<List<String>> atau AWS::SSM::Parameter::Value<CommaDelimitedList>

Parameter Systems Manager yang nilainya adalah daftar string. Hal ini sesuai dengan StringList tipe parameter di Penyimpanan Parameter.

AWS::SSM::Parameter::Value<AWS-specific parameter type>

Parameter Systems Manager yang nilainya adalah tipe parameter AWS-spesifik.

Sebagai contoh, berikut menentukan AWS::EC2::KeyPair::KeyName tipe:

  • AWS::SSM::Parameter::Value<AWS::EC2::KeyPair::KeyName>

AWS::SSM::Parameter::Value<List<AWS-specific parameter type>>

Parameter Systems Manager yang nilainya adalah daftar tipe parameter AWS-spesifik.

Sebagai contoh, berikut menentukan daftar AWS::EC2::KeyPair::KeyName tipe:

  • AWS::SSM::Parameter::Value<List<AWS::EC2::KeyPair::KeyName>>

Tipe parameter Systems Manager yang tidak didukung

CloudFormation tidak mendukung tipe parameter Systems Manager berikut:

  • Daftar tipe parameter Systems Manager — misalnya: List<AWS::SSM::Parameter::Value<String>>

Selain itu, CloudFormation tidak mendukung mendefinisikan parameter template sebagai tipe parameter SecureString Systems Manager. Namun, Anda dapat menentukan string aman sebagai nilai parameter untuk sumber daya tertentu. Untuk informasi selengkapnya, lihat Dapatkan nilai yang disimpan di layanan lain menggunakan referensi dinamis.