在CDK中,可以通过使用CfnParameter(CloudFormation参数)来传递上下文值。下面是一个示例代码:
import * as cdk from 'aws-cdk-lib';
import * as core from 'aws-cdk-lib/core';
import * as s3 from 'aws-cdk-lib/aws-s3';
// 定义一个 CDK Stack
export class MyStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// 创建一个 CloudFormation 参数
const myParameter = new cdk.CfnParameter(this, 'MyParameter', {
type: 'String',
description: 'My parameter description',
});
// 创建一个 S3 存储桶,并使用上下文值作为存储桶名称的一部分
const myBucket = new s3.Bucket(this, 'MyBucket', {
bucketName: `${core.Aws.STACK_NAME}-${myParameter.valueAsString}`,
});
}
}
// 创建一个 CDK App
const app = new cdk.App();
// 获取上下文值,如果未提供,默认使用 'default-value'
const myContextValue = app.node.tryGetContext('myContextKey') || 'default-value';
// 创建一个 CDK Stack,并传递上下文值作为参数
new MyStack(app, 'MyStack', {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION,
},
context: {
myContextKey: myContextValue,
},
});
在上面的示例中,我们使用CfnParameter创建了一个名为MyParameter的 CloudFormation 参数。然后,我们创建了一个名为MyBucket的 S3 存储桶,并使用上下文值作为存储桶名称的一部分。
在创建 CDK App 的时候,我们使用app.node.tryGetContext方法获取上下文值,并将其传递给 CDK Stack 的context属性。这样,CDK Stack 在部署时就可以使用上下文值了。
请注意,上述示例是使用 TypeScript 编写的。如果您使用的是 JavaScript,只需将代码中的类型声明删除即可。