gpt4 book ai didi

amazon-web-services - AWS-CDK:有什么方法可以通过输入参数传递 vpc cidr?

转载 作者:行者123 更新时间:2023-12-04 13:11:39 34 4
gpt4 key购买 nike

我正在尝试将 vpc cidr 作为输入参数传递,如下所示:

import { Stack, StackProps, Construct, CfnParameter } from '@aws-cdk/core';
import { Vpc, SubnetType } from '@aws-cdk/aws-ec2';

export class VpcStructureCdkStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);

// VPC CIDR as input parameter
const vpcCidr = new CfnParameter(this, 'vpcCidr', {
type: 'String',
description: 'Please enter the IP range (CIDR notation) for this VPC',
allowedPattern: '((\d{1,3})\.){3}\d{1,3}/\d{1,2}'
})

// The code that defines your stack goes here
new Vpc(this, 'VPC', {
maxAzs: 3,
cidr: vpcCidr.valueAsString,
subnetConfiguration: [
{
name: 'App',
subnetType: SubnetType.PRIVATE,
cidrMask: 24
},
...
但收到以下错误:
Error: 'cidr' property must be a concrete CIDR string, got a Token (we need to parse it for automatic subdivision)
使用环境变量时出现同样的错误。
有没有办法不对 vpc cidr 进行硬编码?

最佳答案

来自 CDK Parameters 的文档:

A CfnParameter instance exposes its value to your AWS CDK app via a token.Like all tokens, the parameter's token is resolved at synthesis time, but it resolves to a reference to the parameter defined in the AWS CloudFormation template, which will be resolved at deploy time, rather than to a concrete value.[...] In general, we recommend against using AWS CloudFormation parameters with the AWS CDK.


尤其是最后一句很关键。
你现在是怎么解决的?
好吧,正如您已经说过的:通过您的编程语言使用环境变量。
我不知道你使用环境变量的方法,因为你没有展示它。
让我给你举个例子。
// file: lib/your_stack.ts

export class VpcStructureCdkStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
// reading the value from the env.
// Obviously, you have to set it before or pass it before you call any cdk command
const vpcCidr = process.env.VPC_CIDR;
new Vpc(this, 'VPC', {
maxAzs: 3,
// passing it
cidr: vpcCidr,
subnetConfiguration: [
{
name: 'App',
subnetType: SubnetType.PRIVATE,
cidrMask: 24
},
// ...
]
}
}
}
不过,这只是将可配置值放入 CDK 的一种方法。
更好且可调试的方法是在 Context 中设置所有动态/用户/域值。 .
为您自己的值(value)观做的最好的地方是在 cdk.json 内.如果它还不存在,只需创建它,不要忘记将它放入 Git(或您选择的 VCS)。
{
// ...
context: {
// ...
"VpcCidr": "10.0.0.0/8",
}
}
如果 cdk.json方法还不够,您还有另一种选择:
传递给 cdk synth/deploy作为参数通过 -c/--context vpcCidr=10.0.0.0/8 .
但是,这更难调试,因为它不一定是版本化的。
在您的堆栈中(恕我直言,最好的地方),您可以调用以下方法从上下文中检索实际值:
const vpcCidr = this.node.tryGetContext("VpcCidr");
并将其传递给您的 VPC 构造函数。

关于amazon-web-services - AWS-CDK:有什么方法可以通过输入参数传递 vpc cidr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64574020/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com