Parameter - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDK v1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.

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

Parameter

Parameter adalah nilai khusus yang disediakan pada waktu penerapan. Parameter adalah fitur dari AWS CloudFormation. Karena AWS CloudFormation template AWS Cloud Development Kit (AWS CDK) mensintesis, ia juga menawarkan dukungan untuk parameter waktu penerapan.

Tentang parameter

Dengan menggunakan AWS CDK, Anda dapat menentukan parameter, yang kemudian dapat digunakan dalam properti konstruksi yang Anda buat. Anda juga dapat menerapkan tumpukan yang berisi parameter.

Saat menerapkan AWS CloudFormation template menggunakan AWS CDK Toolkit, Anda memberikan nilai parameter pada baris perintah. Jika Anda menerapkan template melalui AWS CloudFormation konsol, Anda akan diminta untuk nilai parameter.

Secara umum, kami merekomendasikan untuk tidak menggunakan AWS CloudFormation parameter dengan AWS CDK. Cara biasa untuk meneruskan nilai ke dalam AWS CDK aplikasi adalah nilai konteks dan variabel lingkungan. Karena tidak tersedia pada waktu sintesis, nilai parameter tidak dapat dengan mudah digunakan untuk kontrol aliran dan tujuan lain di aplikasi CDK Anda.

catatan

Untuk melakukan aliran kontrol dengan parameter, Anda dapat menggunakan CfnConditionkonstruksi, meskipun ini canggung dibandingkan dengan pernyataan asli. if

Menggunakan parameter mengharuskan Anda untuk memperhatikan bagaimana kode yang Anda tulis berperilaku pada waktu penerapan, dan juga pada waktu sintesis. Hal ini membuat lebih sulit untuk memahami dan bernalar tentang AWS CDK aplikasi Anda, dalam banyak kasus untuk sedikit manfaat.

Secara umum, lebih baik meminta aplikasi CDK Anda menerima informasi yang diperlukan dengan cara yang terdefinisi dengan baik dan menggunakannya langsung untuk mendeklarasikan konstruksi di aplikasi CDK Anda. AWS CloudFormation Template AWS CDK yang dihasilkan ideal adalah konkret, tanpa nilai yang tersisa untuk ditentukan pada waktu penerapan.

Namun, ada kasus penggunaan yang AWS CloudFormation parameternya cocok secara unik. Jika Anda memiliki tim terpisah yang mendefinisikan dan menerapkan infrastruktur, misalnya, Anda dapat menggunakan parameter untuk membuat templat yang dihasilkan lebih berguna secara luas. Juga, karena AWS CDK mendukung AWS CloudFormation parameter, Anda dapat menggunakan AWS CDK dengan AWS layanan yang menggunakan AWS CloudFormation template (seperti Service Catalog). AWS Layanan ini menggunakan parameter untuk mengonfigurasi template yang sedang digunakan.

Mendefinisikan parameter

Gunakan CfnParameterkelas untuk menentukan parameter. Anda akan ingin menentukan setidaknya jenis dan deskripsi untuk sebagian besar parameter, meskipun keduanya secara teknis opsional. Deskripsi muncul ketika pengguna diminta untuk memasukkan nilai parameter di AWS CloudFormation konsol. Untuk informasi selengkapnya tentang jenis yang tersedia, lihat Jenis.

catatan

Anda dapat menentukan parameter dalam lingkup apa pun. Namun, kami merekomendasikan untuk menentukan parameter pada tingkat tumpukan sehingga ID logisnya tidak berubah saat Anda memfaktorkan ulang kode Anda.

TypeScript
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
JavaScript
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
Python
upload_bucket_name = CfnParameter(self, "uploadBucketName", type="String", description="The name of the Amazon S3 bucket where uploaded files will be stored.")
Java
CfnParameter uploadBucketName = CfnParameter.Builder.create(this, "uploadBucketName") .type("String") .description("The name of the Amazon S3 bucket where uploaded files will be stored") .build();
C#
var uploadBucketName = new CfnParameter(this, "uploadBucketName", new CfnParameterProps { Type = "String", Description = "The name of the Amazon S3 bucket where uploaded files will be stored" });

Menggunakan parameter

Sebuah CfnParameter instance mengekspos nilainya ke AWS CDK aplikasi Anda melalui token. Seperti semua token, token parameter diselesaikan pada waktu sintesis. Tapi itu menyelesaikan referensi ke parameter yang ditentukan dalam AWS CloudFormation template (yang akan diselesaikan pada waktu penerapan), bukan ke nilai konkret.

Anda dapat mengambil token sebagai contoh dari Token kelas, atau dalam string, daftar string, atau pengkodean numerik. Pilihan Anda tergantung pada jenis nilai yang dibutuhkan oleh kelas atau metode yang ingin Anda gunakan parameternya.

TypeScript
Properti jenis nilai
value Tokencontoh kelas
valueAsList Token direpresentasikan sebagai daftar string
valueAsNumber Token direpresentasikan sebagai angka
valueAsString Token direpresentasikan sebagai string
JavaScript
Properti jenis nilai
value Tokencontoh kelas
valueAsList Token direpresentasikan sebagai daftar string
valueAsNumber Token direpresentasikan sebagai angka
valueAsString Token direpresentasikan sebagai string
Python
Properti jenis nilai
value Tokencontoh kelas
value_as_list Token direpresentasikan sebagai daftar string
value_as_number Token direpresentasikan sebagai angka
value_as_string Token direpresentasikan sebagai string
Java
Properti jenis nilai
getValue() Tokencontoh kelas
getValueAsList() Token direpresentasikan sebagai daftar string
getValueAsNumber() Token direpresentasikan sebagai angka
getValueAsString() Token direpresentasikan sebagai string
C#
Properti jenis nilai
Value Tokencontoh kelas
ValueAsList Token direpresentasikan sebagai daftar string
ValueAsNumber Token direpresentasikan sebagai angka
ValueAsString Token direpresentasikan sebagai string

Misalnya, untuk menggunakan parameter dalam Bucket definisi:

TypeScript
const bucket = new Bucket(this, "myBucket", { bucketName: uploadBucketName.valueAsString});
JavaScript
const bucket = new Bucket(this, "myBucket", { bucketName: uploadBucketName.valueAsString});
Python
bucket = Bucket(self, "myBucket", bucket_name=upload_bucket_name.value_as_string)
Java
Bucket bucket = Bucket.Builder.create(this, "myBucket") .bucketName(uploadBucketName.getValueAsString()) .build();
C#
var bucket = new Bucket(this, "myBucket") { BucketName = uploadBucketName.ValueAsString };

Menyebarkan dengan parameter

Saat Anda menerapkan AWS CloudFormation template yang dihasilkan melalui AWS CloudFormation konsol, Anda akan diminta untuk memberikan nilai untuk setiap parameter.

Anda juga dapat memberikan nilai parameter menggunakan CLI cdk deploy perintah CDK, atau dengan menentukan nilai parameter dalam file tumpukan proyek CDK Anda.

Memberikan nilai parameter dengan cdk deploy

Saat Anda menerapkan menggunakan CLI cdk deploy perintah CDK, Anda dapat memberikan nilai parameter saat penerapan dengan opsi. --parameters

Berikut ini adalah contoh struktur cdk deploy perintah:

$ cdk deploy stack-logical-id --parameters stack-name:parameter-name=parameter-value

Jika aplikasi CDK Anda berisi satu tumpukan, Anda tidak perlu memberikan argumen ID logis tumpukan atau stack-name nilai dalam --parameters opsi. CDK CLI akan secara otomatis menemukan dan memberikan nilai-nilai ini. Berikut ini adalah contoh yang menentukan uploadbucket nilai untuk uploadBucketName parameter tumpukan tunggal di aplikasi CDK kami:

$ cdk deploy --parameters uploadBucketName=uploadbucket

Memberikan nilai parameter dengan cdk deploy untuk aplikasi multi-stack

Berikut ini adalah contoh aplikasi CDK TypeScript yang berisi dua tumpukan CDK. Setiap tumpukan berisi instance bucket Amazon S3 dan parameter untuk menyetel nama bucket Amazon S3:

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; // Define the CDK app const app = new cdk.App(); // First stack export class MyFirstStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Set a default parameter name const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', { type: 'String', default: 'myfirststackdefaultbucketname' }); // Define an S3 bucket new s3.Bucket(this, 'MyFirstBucket', { bucketName: bucketNameParam.valueAsString }); } } // Second stack export class MySecondStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Set a default parameter name const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', { type: 'String', default: 'mysecondstackdefaultbucketname' }); // Define an S3 bucket new s3.Bucket(this, 'MySecondBucket', { bucketName: bucketNameParam.valueAsString }); } } // Instantiate the stacks new MyFirstStack(app, 'MyFirstStack', { stackName: 'MyFirstDeployedStack', }); new MySecondStack(app, 'MySecondStack', { stackName: 'MySecondDeployedStack', });

Untuk aplikasi CDK yang berisi banyak tumpukan, Anda dapat melakukan hal berikut:

  • Menyebarkan satu tumpukan dengan parameter — Untuk menyebarkan tumpukan tunggal dari aplikasi multi-tumpukan, berikan ID logis tumpukan sebagai argumen.

    Berikut ini adalah contoh yang menyebarkan MySecondStack dengan mynewbucketname sebagai nilai parameter untukbucketNameParam:

    $ cdk deploy MySecondStack --parameters bucketNameParam='mynewbucketname'
  • Terapkan semua tumpukan dan tentukan nilai parameter untuk setiap tumpukan — Berikan '*' wildcard atau --all opsi untuk menyebarkan semua tumpukan. Berikan --parameters opsi beberapa kali dalam satu perintah untuk menentukan nilai parameter untuk setiap tumpukan. Berikut adalah contohnya:

    $ cdk deploy '*' --parameters MyFirstDeployedStack:bucketNameParam='mynewfirststackbucketname' --parameters MySecondDeployedStack:bucketNameParam='mynewsecondstackbucketname'
  • Terapkan semua tumpukan dan tentukan nilai parameter untuk satu tumpukan — Berikan '*' wildcard atau --all opsi untuk menyebarkan semua tumpukan. Kemudian, tentukan tumpukan untuk menentukan parameter untuk dalam --parameters opsi. Berikut ini adalah contoh yang menerapkan semua tumpukan dalam aplikasi CDK dan menentukan nilai parameter untuk tumpukan. MySecondDeployedStack AWS CloudFormation Semua tumpukan lain akan menyebarkan dan menggunakan nilai parameter default:

    $ cdk deploy '*' --parameters MySecondDeployedStack:bucketNameParam='mynewbucketname' $ cdk deploy --all --parameters MySecondDeployedStack:bucketNameParam='mynewbucketname'

Menyediakan nilai parameter dengan cdk deploy untuk aplikasi dengan tumpukan bersarang

CLIPerilaku CDK saat bekerja dengan aplikasi yang berisi tumpukan bersarang mirip dengan aplikasi multi-tumpukan. Perbedaan utamanya adalah, jika Anda ingin menyebarkan semua tumpukan bersarang, gunakan wildcard. '**' '*'Wildcard menyebarkan semua tumpukan tetapi tidak akan menyebarkan tumpukan bersarang. '**'Wildcard menyebarkan semua tumpukan, termasuk tumpukan bersarang.

Berikut ini adalah contoh yang menyebarkan tumpukan bersarang sambil menentukan nilai parameter untuk satu tumpukan bersarang:

$ cdk deploy '**' --parameters MultiStackCdkApp/SecondStack:bucketNameParam='mysecondstackbucketname'

Untuk informasi selengkapnya tentang opsi cdk deploy perintah, lihatcdk deploy.