Pilih preferensi cookie Anda

Kami menggunakan cookie penting serta alat serupa yang diperlukan untuk menyediakan situs dan layanan. Kami menggunakan cookie performa untuk mengumpulkan statistik anonim sehingga kami dapat memahami cara pelanggan menggunakan situs dan melakukan perbaikan. Cookie penting tidak dapat dinonaktifkan, tetapi Anda dapat mengklik “Kustom” atau “Tolak” untuk menolak cookie performa.

Jika Anda setuju, AWS dan pihak ketiga yang disetujui juga akan menggunakan cookie untuk menyediakan fitur situs yang berguna, mengingat preferensi Anda, dan menampilkan konten yang relevan, termasuk iklan yang relevan. Untuk menerima atau menolak semua cookie yang tidak penting, klik “Terima” atau “Tolak”. Untuk membuat pilihan yang lebih detail, klik “Kustomisasi”.

Token dan AWS CDK

Mode fokus
Token dan AWS CDK - 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.

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.

Di dalamnya AWS Cloud Development Kit (AWS CDK), token adalah placeholder untuk nilai yang tidak diketahui saat mendefinisikan konstruksi atau mensintesis tumpukan. Nilai-nilai ini akan sepenuhnya diselesaikan pada penerapan, ketika infrastruktur Anda yang sebenarnya dibuat. Saat mengembangkan AWS CDK aplikasi, Anda akan bekerja dengan token untuk mengelola nilai-nilai ini di seluruh aplikasi Anda.

Contoh token

Berikut ini adalah contoh tumpukan CDK yang mendefinisikan konstruksi untuk bucket Amazon Simple Storage Service (Amazon S3). Karena nama bucket kami belum diketahui, nilai untuk bucketName disimpan sebagai token:

TypeScript
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class CdkDemoAppStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // Store value of the S3 bucket name const myBucketName = myBucket.bucketName; // Print the current value for the S3 bucket name at synthesis console.log("myBucketName: " + bucketName); } }
JavaScript
const { Stack, Duration } = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); class CdkDemoAppStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // Store value of the S3 bucket name const myBucketName = myBucket.bucketName; // Print the current value for the S3 bucket name at synthesis console.log("myBucketName: " + myBucketName); } } module.exports = { CdkDemoAppStack }
Python
from aws_cdk import ( Stack ) from constructs import Construct from aws_cdk import aws_s3 as s3 class CdkDemoAppStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define an S3 bucket my_bucket = s3.Bucket(self, "myBucket") # Store the value of the S3 bucket name my_bucket_name = my_bucket.bucket_name # Print the current value for the S3 bucket name at synthesis print(f"myBucketName: {my_bucket_name}")
Java
package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.services.s3.Bucket; import java.util.Map; public class CdkDemoAppStack extends Stack { public CdkDemoAppStack(final Construct scope, final String id) { this(scope, id, null); } public CdkDemoAppStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define an S3 bucket Bucket myBucket = Bucket.Builder.create(this, "myBucket") .build(); // Store the token for the bucket name String myBucketName = myBucket.getBucketName(); // Print the token at synthesis System.out.println("myBucketName: " + myBucketName); } }
C#
using Amazon.CDK; using Constructs; using Amazon.CDK.AWS.S3; namespace CdkDemoApp { public class CdkDemoAppStack : Stack { internal CdkDemoAppStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define an S3 bucket var myBucket = new Bucket(this, "myBucket"); // Store the token for the bucket name var myBucketName = myBucket.BucketName; // Print the token at synthesis System.Console.WriteLine($"myBucketName: {myBucketName}"); } } }
Go
package main import ( "fmt" "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/aws-cdk-go/awscdk/v2/awss3" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) type CdkDemoAppStackProps struct { awscdk.StackProps } func NewCdkDemoAppStack(scope constructs.Construct, id string, props *CdkDemoAppStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Define an S3 bucket myBucket := awss3.NewBucket(stack, jsii.String("myBucket"), &awss3.BucketProps{}) // Store the token for the bucket name myBucketName := myBucket.BucketName() // Print the token at synthesis fmt.Println("myBucketName: ", *myBucketName) return stack } // ...
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class CdkDemoAppStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // Store value of the S3 bucket name const myBucketName = myBucket.bucketName; // Print the current value for the S3 bucket name at synthesis console.log("myBucketName: " + bucketName); } }

Ketika kita menjalankan cdk synth untuk mensintesis tumpukan kita, nilai untuk myBucketName akan ditampilkan dalam format token. ${Token[TOKEN.1234]} Format token ini adalah hasil dari cara AWS CDK mengkodekan token. Dalam contoh ini, token dikodekan sebagai string:

$ cdk synth --quiet myBucketName: ${Token[TOKEN.21]}

Karena nilai untuk nama bucket kami tidak diketahui saat sintesis, token dirender sebagaimyBucket<unique-hash>. AWS CloudFormation Template kami menggunakan fungsi Ref intrinsik untuk mereferensikan nilainya, yang akan diketahui saat penerapan:

Resources: myBucket5AF9C99B: # ... Outputs: bucketNameOutput: Description: The name of the S3 bucket Value: Ref: myBucket5AF9C99B

Untuk informasi lebih lanjut tentang bagaimana hash unik dihasilkan, lihatDihasilkan logis IDs di AWS CloudFormation template Anda.

Melewati token

Token dapat diedarkan seolah-olah itu adalah nilai aktual yang mereka wakili. Berikut ini adalah contoh yang meneruskan token untuk nama bucket kami ke konstruksi untuk suatu AWS Lambda fungsi:

TypeScript

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; import * as lambda from 'aws-cdk-lib/aws-lambda'; export class CdkDemoAppStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // ... // Define a Lambda function const myFunction = new lambda.Function(this, "myFunction", { runtime: lambda.Runtime.NODEJS_20_X, handler: "index.handler", code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `), functionName: myBucketName + "Function", // Pass token for the S3 bucket name environment: { BUCKET_NAME: myBucketName, // Pass token for the S3 bucket name } }); } }
JavaScript
const { Stack, Duration } = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); const lambda = require('aws-cdk-lib/aws-lambda'); class CdkDemoAppStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // ... // Define a Lambda function const myFunction = new lambda.Function(this, 'myFunction', { runtime: lambda.Runtime.NODEJS_20_X, handler: 'index.handler', code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `), functionName: myBucketName + 'Function', // Pass token for the S3 bucket name environment: { BUCKET_NAME: myBucketName, // Pass token for the S3 bucket name } }); } } module.exports = { CdkDemoAppStack }
Python
from aws_cdk import ( Stack ) from constructs import Construct from aws_cdk import aws_s3 as s3 from aws_cdk import aws_lambda as _lambda class CdkDemoAppStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define an S3 bucket my_bucket = s3.Bucket(self, "myBucket") # ... # Define a Lambda function my_function = _lambda.Function(self, "myFunction", runtime=_lambda.Runtime.NODEJS_20_X, handler="index.handler", code=_lambda.Code.from_inline(""" exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; """), function_name=f"{my_bucket_name}Function", # Pass token for the S3 bucket name environment={ "BUCKET_NAME": my_bucket_name # Pass token for the S3 bucket name } )
Java
package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.services.s3.Bucket; import software.amazon.awscdk.services.lambda.Code; import software.amazon.awscdk.services.lambda.Function; import software.amazon.awscdk.services.lambda.Runtime; import java.util.Map; public class CdkDemoAppStack extends Stack { public CdkDemoAppStack(final Construct scope, final String id) { this(scope, id, null); } public CdkDemoAppStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define an S3 bucket Bucket myBucket = Bucket.Builder.create(this, "myBucket") .build(); // ... // Define a Lambda function Function myFunction = Function.Builder.create(this, "myFunction") .runtime(Runtime.NODEJS_20_X) .handler("index.handler") .code(Code.fromInline( "exports.handler = async function(event) {" + "return {" + "statusCode: 200," + "body: JSON.stringify('Hello World!')," + "};" + "};" )) .functionName(myBucketName + "Function") // Pass the token for the s3 bucket to the function construct .environment(Map.of("BUCKET_NAME", myBucketName)) // Pass the bucket name as environment variable .build(); } }
C#
using Amazon.CDK; using Constructs; using Amazon.CDK.AWS.S3; using Amazon.CDK.AWS.Lambda; using System; using System.Collections.Generic; namespace CdkDemoApp { public class CdkDemoAppStack : Stack { internal CdkDemoAppStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define an S3 bucket var myBucket = new Bucket(this, "myBucket"); // ... // Define a Lambda function var myFunction = new Function(this, "myFunction", new FunctionProps { Runtime = Runtime.NODEJS_20_X, Handler = "index.handler", Code = Code.FromInline(@" exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; "), // Pass the token for the S3 bucket name Environment = new Dictionary<string, string> { { "BUCKET_NAME", myBucketName } }, FunctionName = $"{myBucketName}Function" // Pass the token for the s3 bucket to the function construct }); } } }
Go
package main import ( "fmt" "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/aws-cdk-go/awscdk/v2/awslambda" "github.com/aws/aws-cdk-go/awscdk/v2/awss3" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) type CdkDemoAppStackProps struct { awscdk.StackProps } func NewCdkDemoAppStack(scope constructs.Construct, id string, props *CdkDemoAppStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Define an S3 bucket myBucket := awss3.NewBucket(stack, jsii.String("myBucket"), &awss3.BucketProps{}) // ... // Define a Lambda function myFunction := awslambda.NewFunction(stack, jsii.String("myFunction"), &awslambda.FunctionProps{ Runtime: awslambda.Runtime_NODEJS_20_X(), Handler: jsii.String("index.handler"), Code: awslambda.Code_FromInline(jsii.String(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `)), FunctionName: jsii.String(fmt.Sprintf("%sFunction", *myBucketName)), // Pass the token for the S3 bucket to the function name Environment: &map[string]*string{ "BUCKET_NAME": myBucketName, }, }) return stack } // ...

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; import * as lambda from 'aws-cdk-lib/aws-lambda'; export class CdkDemoAppStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // ... // Define a Lambda function const myFunction = new lambda.Function(this, "myFunction", { runtime: lambda.Runtime.NODEJS_20_X, handler: "index.handler", code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `), functionName: myBucketName + "Function", // Pass token for the S3 bucket name environment: { BUCKET_NAME: myBucketName, // Pass token for the S3 bucket name } }); } }

Saat kita mensintesis template kita, fungsi Ref dan Fn::Join intrinsik digunakan untuk menentukan nilai, yang akan diketahui saat penerapan:

Resources: myBucket5AF9C99B: Type: AWS::S3::Bucket # ... myFunction884E1557: Type: AWS::Lambda::Function Properties: # ... Environment: Variables: BUCKET_NAME: Ref: myBucket5AF9C99B FunctionName: Fn::Join: - "" - - Ref: myBucket5AF9C99B - Function # ...

Cara kerja pengkodean token

Token adalah objek yang mengimplementasikan IResolvable antarmuka, yang berisi satu resolve metode. Selama sintesis, AWS CDK memanggil metode ini untuk menghasilkan nilai akhir untuk token dalam CloudFormation template Anda.

catatan

Anda jarang akan bekerja secara langsung dengan IResolvable antarmuka. Anda kemungkinan besar hanya akan melihat versi token yang disandikan string.

Jenis pengkodean token

Token berpartisipasi dalam proses sintesis untuk menghasilkan nilai arbitrer dari jenis apa pun. Fungsi lain biasanya hanya menerima argumen tipe dasar, seperti string ataunumber. Untuk menggunakan token dalam kasus ini, Anda dapat menyandikannya menjadi salah satu dari tiga jenis dengan menggunakan metode statis pada cdk.Token kelas.

Ini mengambil nilai arbitrer, yang bisa berupaIResolvable, dan menyandikannya menjadi nilai primitif dari tipe yang ditunjukkan.

penting

Karena salah satu tipe sebelumnya berpotensi menjadi token yang dikodekan, berhati-hatilah saat Anda mengurai atau mencoba membaca isinya. Misalnya, jika Anda mencoba mengurai string untuk mengekstrak nilai darinya, dan string adalah token yang dikodekan, penguraian Anda gagal. Demikian pula, jika Anda mencoba menanyakan panjang array atau melakukan operasi matematika dengan angka, Anda harus terlebih dahulu memverifikasi bahwa itu bukan token yang dikodekan.

Cara memeriksa token di aplikasi Anda

Untuk memeriksa apakah suatu nilai memiliki token yang belum terselesaikan di dalamnya, panggil metode Token.isUnresolved (Pythonis_unresolved:). Berikut ini adalah contoh yang memeriksa apakah nilai untuk nama bucket Amazon S3 kami adalah token. Jika bukan token, kami kemudian memvalidasi panjang nama bucket:

TypeScript

// ... export class CdkDemoAppStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // ... // Check if bucket name is a token. If not, check if length is less than 10 characters if (cdk.Token.isUnresolved(myBucketName)) { console.log("Token identified."); } else if (!cdk.Token.isUnresolved(myBucketName) && myBucketName.length > 10) { throw new Error('Maximum length for name is 10 characters.'); }; // ...
JavaScript
const { Stack, Duration, Token, CfnOutput } = require('aws-cdk-lib'); // ... class CdkDemoAppStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // ... // Check if bucket name is a token. If not, check if length is less than 10 characters if (Token.isUnresolved(myBucketName)) { console.log("Token identified."); } else if (!Token.isUnresolved(myBucketName) && myBucketName.length > 10) { throw new Error('Maximum length for name is 10 characters.'); }; // ...
Python

from aws_cdk import ( Stack, Token ) # ... class CdkDemoAppStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define an S3 bucket my_bucket = s3.Bucket(self, "myBucket") # ... # Check if bucket name is a token. If not, check if length is less than 10 characters if Token.is_unresolved(my_bucket_name): print("Token identified.") elif not Token.is_unresolved(my_bucket_name) and len(my_bucket_name) < 10: raise ValueError("Maximum length for name is 10 characters.") # ...
Java
// ... import software.amazon.awscdk.Token; // ... public class CdkDemoAppStack extends Stack { public CdkDemoAppStack(final Construct scope, final String id) { this(scope, id, null); } public CdkDemoAppStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define an S3 bucket Bucket myBucket = Bucket.Builder.create(this, "myBucket") .build(); // ... // Check if the bucket name is a token. If not, check if length is less than 10 characters if (Token.isUnresolved(myBucketName)) { System.out.println("Token identified."); } else if (!Token.isUnresolved(myBucketName) && myBucketName.length() > 10) { throw new IllegalArgumentException("Maximum length for name is 10 characters."); } // ... } }
C#
using Amazon.CDK; using Constructs; using Amazon.CDK.AWS.S3; using Amazon.CDK.AWS.Lambda; using System; using System.Collections.Generic; namespace CdkDemoApp { public class CdkDemoAppStack : Stack { internal CdkDemoAppStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define an S3 bucket var myBucket = new Bucket(this, "myBucket"); // ... // Check if bucket name is a token. If not, check if length is less than 10 characters if (Token.IsUnresolved(myBucketName)) { System.Console.WriteLine("Token identified."); } else if (!Token.IsUnresolved(myBucketName) && myBucketName.Length > 10) { throw new System.Exception("Maximum length for name is 10 characters."); } // ...
Go
// ... func NewCdkDemoAppStack(scope constructs.Construct, id string, props *CdkDemoAppStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Define an S3 bucket myBucket := awss3.NewBucket(stack, jsii.String("myBucket"), &awss3.BucketProps{}) // ... // Check if the bucket name is unresolved (a token) if tokenUnresolved := awscdk.Token_IsUnresolved(myBucketName); tokenUnresolved != nil && *tokenUnresolved { fmt.Println("Token identified.") } else if tokenUnresolved != nil && !*tokenUnresolved && len(*myBucketName) > 10 { panic("Maximum length for name is 10 characters.") } // ...

// ... export class CdkDemoAppStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Define an S3 bucket const myBucket = new s3.Bucket(this, 'myBucket'); // ... // Check if bucket name is a token. If not, check if length is less than 10 characters if (cdk.Token.isUnresolved(myBucketName)) { console.log("Token identified."); } else if (!cdk.Token.isUnresolved(myBucketName) && myBucketName.length > 10) { throw new Error('Maximum length for name is 10 characters.'); }; // ...

Ketika kita menjalankan cdk synthmyBucketName, diidentifikasi sebagai token:

$ cdk synth --quiet Token identified.
catatan

Anda dapat menggunakan pengkodean token untuk keluar dari sistem tipe. Misalnya, Anda dapat mengkodekan string token yang menghasilkan nilai angka pada waktu sintesis. Jika Anda menggunakan fungsi-fungsi ini, Anda bertanggung jawab untuk memastikan bahwa template Anda menyelesaikan ke status yang dapat digunakan setelah sintesis.

Bekerja dengan token yang disandikan string

Token yang disandikan string terlihat seperti berikut ini.

${TOKEN[Bucket.Name.1234]}

Mereka dapat diteruskan seperti string biasa, dan dapat digabungkan, seperti yang ditunjukkan pada contoh berikut.

TypeScript
const functionName = bucket.bucketName + 'Function';
JavaScript
const functionName = bucket.bucketName + 'Function';
Python
function_name = bucket.bucket_name + "Function"
Java
String functionName = bucket.getBucketName().concat("Function");
C#
string functionName = bucket.BucketName + "Function";
Go
functionName := *bucket.BucketName() + "Function"
const functionName = bucket.bucketName + 'Function';

Anda juga dapat menggunakan interpolasi string, jika bahasa Anda mendukungnya, seperti yang ditunjukkan pada contoh berikut.

TypeScript
const functionName = `${bucket.bucketName}Function`;
JavaScript
const functionName = `${bucket.bucketName}Function`;
Python
function_name = f"{bucket.bucket_name}Function"
Java
String functionName = String.format("%sFunction". bucket.getBucketName());
C#
string functionName = $"${bucket.bucketName}Function";
Go

Gunakan fmt.Sprintf untuk fungsionalitas serupa:

functionName := fmt.Sprintf("%sFunction", *bucket.BucketName())
const functionName = `${bucket.bucketName}Function`;

Hindari memanipulasi string dengan cara lain. Misalnya, mengambil substring string kemungkinan akan merusak token string.

Bekerja dengan token yang dikodekan daftar

Token yang dikodekan daftar terlihat seperti berikut:

["#{TOKEN[Stack.NotificationArns.1234]}"]

Satu-satunya hal yang aman untuk dilakukan dengan daftar ini adalah meneruskannya langsung ke konstruksi lain. Token dalam bentuk daftar string tidak dapat digabungkan, juga elemen tidak dapat diambil dari token. Satu-satunya cara aman untuk memanipulasinya adalah dengan menggunakan fungsi AWS CloudFormation intrinsik seperti fn.Select.

Bekerja dengan token yang dikodekan angka

Token yang dikodekan angka adalah sekumpulan angka floating-point negatif kecil yang terlihat seperti berikut ini.

-1.8881545897087626e+289

Seperti halnya token daftar, Anda tidak dapat mengubah nilai angka, karena hal itu kemungkinan akan merusak token angka.

Berikut ini adalah contoh konstruksi yang berisi token yang dikodekan sebagai angka:

TypeScript
import { Stack, Duration, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as rds from 'aws-cdk-lib/aws-rds'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; export class CdkDemoAppStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Define a new VPC const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 3, // Maximum number of availability zones to use }); // Define an RDS database cluster const dbCluster = new rds.DatabaseCluster(this, 'MyRDSCluster', { engine: rds.DatabaseClusterEngine.AURORA, instanceProps: { vpc, }, }); // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // Print the value for our token at synthesis console.log("portToken: " + portToken); } }
JavaScript
const { Stack, Duration } = require('aws-cdk-lib'); const lambda = require('aws-cdk-lib/aws-lambda'); const rds = require('aws-cdk-lib/aws-rds'); const ec2 = require('aws-cdk-lib/aws-ec2'); class CdkDemoAppStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define a new VPC const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 3, // Maximum number of availability zones to use }); // Define an RDS database cluster const dbCluster = new rds.DatabaseCluster(this, 'MyRDSCluster', { engine: rds.DatabaseClusterEngine.AURORA, instanceProps: { vpc, }, }); // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // Print the value for our token at synthesis console.log("portToken: " + portToken); } } module.exports = { CdkDemoAppStack }
Python
from aws_cdk import ( Duration, Stack, ) from aws_cdk import aws_rds as rds from aws_cdk import aws_ec2 as ec2 from constructs import Construct class CdkDemoAppStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define a new VPC vpc = ec2.Vpc(self, 'MyVpc', max_azs=3 # Maximum number of availability zones to use ) # Define an RDS database cluster db_cluster = rds.DatabaseCluster(self, 'MyRDSCluster', engine=rds.DatabaseClusterEngine.AURORA, instance_props=rds.InstanceProps( vpc=vpc ) ) # Get the port token (this is a token encoded as a number) port_token = db_cluster.cluster_endpoint.port # Print the value for our token at synthesis print(f"portToken: {port_token}")
Java
package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.services.ec2.Vpc; import software.amazon.awscdk.services.rds.DatabaseCluster; import software.amazon.awscdk.services.rds.DatabaseClusterEngine; import software.amazon.awscdk.services.rds.InstanceProps; public class CdkDemoAppStack extends Stack { public CdkDemoAppStack(final Construct scope, final String id) { this(scope, id, null); } public CdkDemoAppStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define a new VPC Vpc vpc = Vpc.Builder.create(this, "MyVpc") .maxAzs(3) // Maximum number of availability zones to use .build(); // Define an RDS database cluster DatabaseCluster dbCluster = DatabaseCluster.Builder.create(this, "MyRDSCluster") .engine(DatabaseClusterEngine.AURORA) .instanceProps(InstanceProps.builder() .vpc(vpc) .build()) .build(); // Get the port token (this is a token encoded as a number) Number portToken = dbCluster.getClusterEndpoint().getPort(); // Print the value for our token at synthesis System.out.println("portToken: " + portToken); } }
C#
using Amazon.CDK; using Constructs; using Amazon.CDK.AWS.EC2; using Amazon.CDK.AWS.RDS; using System; using System.Collections.Generic; namespace CdkDemoApp { public class CdkDemoAppStack : Stack { internal CdkDemoAppStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define a new VPC var vpc = new Vpc(this, "MyVpc", new VpcProps { MaxAzs = 3 // Maximum number of availability zones to use }); // Define an RDS database cluster var dbCluster = new DatabaseCluster(this, "MyRDSCluster", new DatabaseClusterProps { Engine = DatabaseClusterEngine.AURORA, // Remove parentheses InstanceProps = new Amazon.CDK.AWS.RDS.InstanceProps // Specify RDS InstanceProps { Vpc = vpc } }); // Get the port token (this is a token encoded as a number) var portToken = dbCluster.ClusterEndpoint.Port; // Print the value for our token at synthesis System.Console.WriteLine($"portToken: {portToken}"); } } }
Go
package main import ( "fmt" "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/aws-cdk-go/awscdk/v2/awsec2" "github.com/aws/aws-cdk-go/awscdk/v2/awsrds" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) type CdkDemoAppStackProps struct { awscdk.StackProps } func NewCdkDemoAppStack(scope constructs.Construct, id string, props *CdkDemoAppStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Define a new VPC vpc := awsec2.NewVpc(stack, jsii.String("MyVpc"), &awsec2.VpcProps{ MaxAzs: jsii.Number(3), // Maximum number of availability zones to use }) // Define an RDS database cluster dbCluster := awsrds.NewDatabaseCluster(stack, jsii.String("MyRDSCluster"), &awsrds.DatabaseClusterProps{ Engine: awsrds.DatabaseClusterEngine_AURORA(), InstanceProps: &awsrds.InstanceProps{ Vpc: vpc, }, }) // Get the port token (this is a token encoded as a number) portToken := dbCluster.ClusterEndpoint().Port() // Print the value for our token at synthesis fmt.Println("portToken: ", portToken) return stack } // ...
import { Stack, Duration, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as rds from 'aws-cdk-lib/aws-rds'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; export class CdkDemoAppStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Define a new VPC const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 3, // Maximum number of availability zones to use }); // Define an RDS database cluster const dbCluster = new rds.DatabaseCluster(this, 'MyRDSCluster', { engine: rds.DatabaseClusterEngine.AURORA, instanceProps: { vpc, }, }); // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // Print the value for our token at synthesis console.log("portToken: " + portToken); } }

Saat kita menjalankancdk synth, nilai untuk ditampilkan sebagai token yang portToken dikodekan angka:

$ cdk synth --quiet portToken: -1.8881545897087968e+289

Lulus token yang dikodekan nomor

Saat Anda meneruskan token yang dikodekan angka ke konstruksi lain, mungkin masuk akal untuk mengonversinya menjadi string terlebih dahulu. Misalnya, jika Anda ingin menggunakan nilai string yang dikodekan angka sebagai bagian dari string gabungan, mengonversinya membantu keterbacaan.

Dalam contoh berikut, portToken adalah token yang dikodekan angka yang ingin kita teruskan ke fungsi Lambda kita sebagai bagian dari: connectionString

TypeScript
import { Stack, Duration, CfnOutput, StackProps } from 'aws-cdk-lib'; // ... import * as lambda from 'aws-cdk-lib/aws-lambda'; export class CdkDemoAppStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // ... // Example connection string with the port token as a number const connectionString = `jdbc:mysql://mydb.cluster.amazonaws.com:${portToken}/mydatabase`; // Use the connection string as an environment variable in a Lambda function const myFunction = new lambda.Function(this, 'MyLambdaFunction', { runtime: lambda.Runtime.NODEJS_20_X, handler: 'index.handler', code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `), environment: { DATABASE_CONNECTION_STRING: connectionString, // Using the port token as part of the string }, }); // Output the value of our connection string at synthesis console.log("connectionString: " + connectionString); // Output the connection string new CfnOutput(this, 'ConnectionString', { value: connectionString, }); } }
JavaScript
const { Stack, Duration, CfnOutput } = require('aws-cdk-lib'); // ... const lambda = require('aws-cdk-lib/aws-lambda'); class CdkDemoAppStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // ... // Example connection string with the port token as a number const connectionString = `jdbc:mysql://mydb.cluster.amazonaws.com:${portToken}/mydatabase`; // Use the connection string as an environment variable in a Lambda function const myFunction = new lambda.Function(this, 'MyLambdaFunction', { runtime: lambda.Runtime.NODEJS_20_X, handler: 'index.handler', code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `), environment: { DATABASE_CONNECTION_STRING: connectionString, // Using the port token as part of the string }, }); // Output the value of our connection string at synthesis console.log("connectionString: " + connectionString); // Output the connection string new CfnOutput(this, 'ConnectionString', { value: connectionString, }); } } module.exports = { CdkDemoAppStack }
Python
from aws_cdk import ( Duration, Stack, CfnOutput, ) from aws_cdk import aws_lambda as _lambda # ... class CdkDemoAppStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define a new VPC # ... # Define an RDS database cluster # ... # Get the port token (this is a token encoded as a number) port_token = db_cluster.cluster_endpoint.port # ... # Example connection string with the port token as a number connection_string = f"jdbc:mysql://mydb.cluster.amazonaws.com:{port_token}/mydatabase" # Use the connection string as an environment variable in a Lambda function my_function = _lambda.Function(self, 'MyLambdaFunction', runtime=_lambda.Runtime.NODEJS_20_X, handler='index.handler', code=_lambda.Code.from_inline(""" exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; """), environment={ 'DATABASE_CONNECTION_STRING': connection_string # Using the port token as part of the string } ) # Output the value of our connection string at synthesis print(f"connectionString: {connection_string}") # Output the connection string CfnOutput(self, 'ConnectionString', value=connection_string )
Java

// ... import software.amazon.awscdk.CfnOutput; import software.amazon.awscdk.services.lambda.Function; import software.amazon.awscdk.services.lambda.Runtime; import software.amazon.awscdk.services.lambda.Code; import java.util.Map; public class CdkDemoAppStack extends Stack { public CdkDemoAppStack(final Construct scope, final String id) { this(scope, id, null); } public CdkDemoAppStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) Number portToken = dbCluster.getClusterEndpoint().getPort(); // ... // Example connection string with the port token as a number String connectionString = "jdbc:mysql://mydb.cluster.amazonaws.com:" + portToken + "/mydatabase"; // Use the connection string as an environment variable in a Lambda function Function myFunction = Function.Builder.create(this, "MyLambdaFunction") .runtime(Runtime.NODEJS_20_X) .handler("index.handler") .code(Code.fromInline( "exports.handler = async function(event) {\n" + " return {\n" + " statusCode: 200,\n" + " body: JSON.stringify('Hello World!'),\n" + " };\n" + "};")) .environment(Map.of( "DATABASE_CONNECTION_STRING", connectionString // Using the port token as part of the string )) .build(); // Output the value of our connection string at synthesis System.out.println("connectionString: " + connectionString); // Output the connection string CfnOutput.Builder.create(this, "ConnectionString") .value(connectionString) .build(); } }
C#
// ... using Amazon.CDK.AWS.Lambda; namespace CdkDemoApp { public class CdkDemoAppStack : Stack { internal CdkDemoAppStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define a new VPC // ... // Define an RDS database cluster var dbCluster = new DatabaseCluster(this, "MyRDSCluster", new DatabaseClusterProps // ... // Get the port token (this is a token encoded as a number) var portToken = dbCluster.ClusterEndpoint.Port; // ... // Example connection string with the port token as a number var connectionString = $"jdbc:mysql://mydb.cluster.amazonaws.com:{portToken}/mydatabase"; // Use the connection string as an environment variable in a Lambda function var myFunction = new Function(this, "MyLambdaFunction", new FunctionProps { Runtime = Runtime.NODEJS_20_X, Handler = "index.handler", Code = Code.FromInline(@" exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; "), Environment = new Dictionary<string, string> { { "DATABASE_CONNECTION_STRING", connectionString } // Using the port token as part of the string } }); // Output the value of our connection string at synthesis Console.WriteLine($"connectionString: {connectionString}"); // Output the connection string new CfnOutput(this, "ConnectionString", new CfnOutputProps { Value = connectionString }); } } }
Go
// ... "github.com/aws/aws-cdk-go/awscdk/v2/awslambda" ) type CdkDemoAppStackProps struct { awscdk.StackProps } func NewCdkDemoAppStack(scope constructs.Construct, id string, props *CdkDemoAppStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) portToken := dbCluster.ClusterEndpoint().Port() // ... // Example connection string with the port token as a number connectionString := fmt.Sprintf("jdbc:mysql://mydb.cluster.amazonaws.com:%s/mydatabase", portToken) // Use the connection string as an environment variable in a Lambda function myFunction := awslambda.NewFunction(stack, jsii.String("MyLambdaFunction"), &awslambda.FunctionProps{ Runtime: awslambda.Runtime_NODEJS_20_X(), Handler: jsii.String("index.handler"), Code: awslambda.Code_FromInline(jsii.String(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `)), Environment: &map[string]*string{ "DATABASE_CONNECTION_STRING": jsii.String(connectionString), // Using the port token as part of the string }, }) // Output the value of our connection string at synthesis fmt.Println("connectionString: ", connectionString) // Output the connection string awscdk.NewCfnOutput(stack, jsii.String("ConnectionString"), &awscdk.CfnOutputProps{ Value: jsii.String(connectionString), }) return stack } // ...
import { Stack, Duration, CfnOutput, StackProps } from 'aws-cdk-lib'; // ... import * as lambda from 'aws-cdk-lib/aws-lambda'; export class CdkDemoAppStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // ... // Example connection string with the port token as a number const connectionString = `jdbc:mysql://mydb.cluster.amazonaws.com:${portToken}/mydatabase`; // Use the connection string as an environment variable in a Lambda function const myFunction = new lambda.Function(this, 'MyLambdaFunction', { runtime: lambda.Runtime.NODEJS_20_X, handler: 'index.handler', code: lambda.Code.fromInline(` exports.handler = async function(event) { return { statusCode: 200, body: JSON.stringify('Hello World!'), }; }; `), environment: { DATABASE_CONNECTION_STRING: connectionString, // Using the port token as part of the string }, }); // Output the value of our connection string at synthesis console.log("connectionString: " + connectionString); // Output the connection string new CfnOutput(this, 'ConnectionString', { value: connectionString, }); } }

Jika kita meneruskan nilai iniconnectionString, nilai output saat kita menjalankan cdk synth mungkin membingungkan karena string yang dikodekan angka:

$ cdk synth --quiet connectionString: jdbc:mysql://mydb.cluster.amazonaws.com:-1.888154589708796e+289/mydatabase

Untuk mengonversi token yang dikodekan angka menjadi string, gunakan. cdk.Tokenization.stringifyNumber(token) Dalam contoh berikut, kita mengubah token yang dikodekan angka menjadi string sebelum mendefinisikan string koneksi kita:

TypeScript
import { Stack, Duration, Tokenization, CfnOutput, StackProps } from 'aws-cdk-lib'; // ... export class CdkDemoAppStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // ... // Convert the encoded number to an encoded string for use in the connection string const portAsString = Tokenization.stringifyNumber(portToken); // Example connection string with the port token as a string const connectionString = `jdbc:mysql://mydb.cluster.amazonaws.com:${portAsString}/mydatabase`; // Use the connection string as an environment variable in a Lambda function const myFunction = new lambda.Function(this, 'MyLambdaFunction', { // ... environment: { DATABASE_CONNECTION_STRING: connectionString, // Using the port token as part of the string }, }); // Output the value of our connection string at synthesis console.log("connectionString: " + connectionString); // Output the connection string new CfnOutput(this, 'ConnectionString', { value: connectionString, }); } }
JavaScript
const { Stack, Duration, Tokenization, CfnOutput } = require('aws-cdk-lib'); // ... class CdkDemoAppStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // ... // Convert the encoded number to an encoded string for use in the connection string const portAsString = Tokenization.stringifyNumber(portToken); // Example connection string with the port token as a string const connectionString = `jdbc:mysql://mydb.cluster.amazonaws.com:${portAsString}/mydatabase`; // Use the connection string as an environment variable in a Lambda function const myFunction = new lambda.Function(this, 'MyLambdaFunction', { // ... environment: { DATABASE_CONNECTION_STRING: connectionString, // Using the port token as part of the string }, }); // Output the value of our connection string at synthesis console.log("connectionString: " + connectionString); // Output the connection string new CfnOutput(this, 'ConnectionString', { value: connectionString, }); } } module.exports = { CdkDemoAppStack }
Python
from aws_cdk import ( Duration, Stack, Tokenization, CfnOutput, ) # ... class CdkDemoAppStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # Define a new VPC # ... # Define an RDS database cluster # ... # Get the port token (this is a token encoded as a number) port_token = db_cluster.cluster_endpoint.port # Convert the encoded number to an encoded string for use in the connection string port_as_string = Tokenization.stringify_number(port_token) # Example connection string with the port token as a string connection_string = f"jdbc:mysql://mydb.cluster.amazonaws.com:{port_as_string}/mydatabase" # Use the connection string as an environment variable in a Lambda function my_function = _lambda.Function(self, 'MyLambdaFunction', # ... environment={ 'DATABASE_CONNECTION_STRING': connection_string # Using the port token as part of the string } ) # Output the value of our connection string at synthesis print(f"connectionString: {connection_string}") # Output the connection string CfnOutput(self, 'ConnectionString', value=connection_string )
Java
// ... import software.amazon.awscdk.Tokenization; public class CdkDemoAppStack extends Stack { public CdkDemoAppStack(final Construct scope, final String id) { this(scope, id, null); } public CdkDemoAppStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) Number portToken = dbCluster.getClusterEndpoint().getPort(); // ... // Convert the encoded number to an encoded string for use in the connection string String portAsString = Tokenization.stringifyNumber(portToken); // Example connection string with the port token as a string String connectionString = "jdbc:mysql://mydb.cluster.amazonaws.com:" + portAsString + "/mydatabase"; // Use the connection string as an environment variable in a Lambda function Function myFunction = Function.Builder.create(this, "MyLambdaFunction") // ... .environment(Map.of( "DATABASE_CONNECTION_STRING", connectionString // Using the port token as part of the string )) .build(); // Output the value of our connection string at synthesis System.out.println("connectionString: " + connectionString); // Output the connection string CfnOutput.Builder.create(this, "ConnectionString") .value(connectionString) .build(); } }
C#
// ... namespace CdkDemoApp { public class CdkDemoAppStack : Stack { internal CdkDemoAppStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) var portToken = dbCluster.ClusterEndpoint.Port; // ... // Convert the encoded number to an encoded string for use in the connection string var portAsString = Tokenization.StringifyNumber(portToken); // Example connection string with the port token as a string var connectionString = $"jdbc:mysql://mydb.cluster.amazonaws.com:{portAsString}/mydatabase"; // Use the connection string as an environment variable in a Lambda function var myFunction = new Function(this, "MyLambdaFunction", new FunctionProps { // ... Environment = new Dictionary<string, string> { { "DATABASE_CONNECTION_STRING", connectionString } // Using the port token as part of the string } }); // Output the value of our connection string at synthesis Console.WriteLine($"connectionString: {connectionString}"); // Output the connection string new CfnOutput(this, "ConnectionString", new CfnOutputProps { Value = connectionString }); } } }
Go
// ... func NewCdkDemoAppStack(scope constructs.Construct, id string, props *CdkDemoAppStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) portToken := dbCluster.ClusterEndpoint().Port() // ... // Convert the encoded number to an encoded string for use in the connection string portAsString := awscdk.Tokenization_StringifyNumber(portToken) // Example connection string with the port token as a string connectionString := fmt.Sprintf("jdbc:mysql://mydb.cluster.amazonaws.com:%s/mydatabase", portAsString) // Use the connection string as an environment variable in a Lambda function myFunction := awslambda.NewFunction(stack, jsii.String("MyLambdaFunction"), &awslambda.FunctionProps{ // ... Environment: &map[string]*string{ "DATABASE_CONNECTION_STRING": jsii.String(connectionString), // Using the port token as part of the string }, }) // Output the value of our connection string at synthesis fmt.Println("connectionString: ", connectionString) // Output the connection string awscdk.NewCfnOutput(stack, jsii.String("ConnectionString"), &awscdk.CfnOutputProps{ Value: jsii.String(connectionString), }) fmt.Println(myFunction) return stack } // ...
import { Stack, Duration, Tokenization, CfnOutput, StackProps } from 'aws-cdk-lib'; // ... export class CdkDemoAppStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Define a new VPC // ... // Define an RDS database cluster // ... // Get the port token (this is a token encoded as a number) const portToken = dbCluster.clusterEndpoint.port; // ... // Convert the encoded number to an encoded string for use in the connection string const portAsString = Tokenization.stringifyNumber(portToken); // Example connection string with the port token as a string const connectionString = `jdbc:mysql://mydb.cluster.amazonaws.com:${portAsString}/mydatabase`; // Use the connection string as an environment variable in a Lambda function const myFunction = new lambda.Function(this, 'MyLambdaFunction', { // ... environment: { DATABASE_CONNECTION_STRING: connectionString, // Using the port token as part of the string }, }); // Output the value of our connection string at synthesis console.log("connectionString: " + connectionString); // Output the connection string new CfnOutput(this, 'ConnectionString', { value: connectionString, }); } }

Saat kami menjalankancdk synth, nilai untuk string koneksi kami direpresentasikan dalam format yang lebih bersih dan lebih jelas:

$ cdk synth --quiet connectionString: jdbc:mysql://mydb.cluster.amazonaws.com:${Token[TOKEN.242]}/mydatabase

Nilai malas

Selain mewakili nilai deploy-time, seperti AWS CloudFormation parameter, token juga biasa digunakan untuk mewakili nilai malas waktu sintesis. Ini adalah nilai yang nilai akhirnya akan ditentukan sebelum sintesis selesai, tetapi tidak pada titik di mana nilai dibangun. Gunakan token untuk meneruskan string literal atau nilai angka ke konstruksi lain, sedangkan nilai aktual pada waktu sintesis mungkin bergantung pada beberapa perhitungan yang belum terjadi.

Anda dapat membuat token yang mewakili nilai malas synth-time menggunakan metode statis pada Lazy kelas, seperti dan. Lazy.string Lazy.number Metode ini menerima objek yang produce propertinya adalah fungsi yang menerima argumen konteks dan mengembalikan nilai akhir ketika dipanggil.

Contoh berikut membuat grup Auto Scaling yang kapasitasnya ditentukan setelah pembuatannya.

TypeScript
let actualValue: number; new AutoScalingGroup(this, 'Group', { desiredCapacity: Lazy.numberValue({ produce(context) { return actualValue; } }) }); // At some later point actualValue = 10;
JavaScript
let actualValue; new AutoScalingGroup(this, 'Group', { desiredCapacity: Lazy.numberValue({ produce(context) { return (actualValue); } }) }); // At some later point actualValue = 10;
Python
class Producer: def __init__(self, func): self.produce = func actual_value = None AutoScalingGroup(self, "Group", desired_capacity=Lazy.number_value(Producer(lambda context: actual_value)) ) # At some later point actual_value = 10
Java
double actualValue = 0; class ProduceActualValue implements INumberProducer { @Override public Number produce(IResolveContext context) { return actualValue; } } AutoScalingGroup.Builder.create(this, "Group") .desiredCapacity(Lazy.numberValue(new ProduceActualValue())).build(); // At some later point actualValue = 10;
C#
public class NumberProducer : INumberProducer { Func<Double> function; public NumberProducer(Func<Double> function) { this.function = function; } public Double Produce(IResolveContext context) { return function(); } } double actualValue = 0; new AutoScalingGroup(this, "Group", new AutoScalingGroupProps { DesiredCapacity = Lazy.NumberValue(new NumberProducer(() => actualValue)) }); // At some later point actualValue = 10;
let actualValue: number; new AutoScalingGroup(this, 'Group', { desiredCapacity: Lazy.numberValue({ produce(context) { return actualValue; } }) }); // At some later point actualValue = 10;

Konversi ke JSON

Terkadang Anda ingin menghasilkan string JSON dari data arbitrer, dan Anda mungkin tidak tahu apakah data tersebut berisi token. Untuk mengkodekan struktur data dengan benar JSON, terlepas dari apakah itu berisi token, gunakan metode inistack.toJsonString, seperti yang ditunjukkan pada contoh berikut.

TypeScript
const stack = Stack.of(this); const str = stack.toJsonString({ value: bucket.bucketName });
JavaScript
const stack = Stack.of(this); const str = stack.toJsonString({ value: bucket.bucketName });
Python
stack = Stack.of(self) string = stack.to_json_string(dict(value=bucket.bucket_name))
Java
Stack stack = Stack.of(this); String stringVal = stack.toJsonString(java.util.Map.of( // Map.of requires Java 9+ put("value", bucket.getBucketName())));
C#
var stack = Stack.Of(this); var stringVal = stack.ToJsonString(new Dictionary<string, string> { ["value"] = bucket.BucketName });
const stack = Stack.of(this); const str = stack.toJsonString({ value: bucket.bucketName });
PrivasiSyarat situsPreferensi cookie
© 2025, Amazon Web Services, Inc. atau afiliasinya. Semua hak dilindungi undang-undang.