我如何将 cdk python 部署到多个环境 self.node.try_get_context('env') 和一些逻辑来指定堆栈的部署位置
How can I deploy cdk python to multiple environment to self.node.try_get_context('env') and some logic to specify where the stack gets deployed
我使用 python aws cdk 创建了以下 vpc class,我需要帮助了解如何通过 self.node.try_get_context('env') 动态设置环境变量到表示将部署堆栈的环境,例如 prod、dev、stg 等。因为我在我的逻辑中重复使用它来制定堆栈的命名约定。
我在 cdk.json 中分配了 env 变量作为
"env_stg": "stg",
"env_prd": "prd",
我可以单独调用它们,但不了解动态调用它们以动态影响我的环境。
非常感谢任何帮助
class VPC(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
env = self.node.try_get_context('env')
self.vpc =ec2.Vpc(self, "Stg",
cidr = '10.0.0.0/16',
max_azs = 2,
enable_dns_support = True,
enable_dns_hostnames = True,
subnet_configuration = [
ec2.SubnetConfiguration(
name = 'Public',
subnet_type = ec2.SubnetType.PUBLIC,
cidr_mask = 24
),
ec2.SubnetConfiguration(
name = 'Isolated',
subnet_type = ec2.SubnetType.PRIVATE_ISOLATED,
cidr_mask = 24
)
]
)
# Store all private subnets in Parameter store
private_subnets = [subnet.subnet_id for subnet in self.vpc.private_subnets]
# public_subnets = [subnet.subnet_id for subnet in self.vpc.public_subnets]
count = 1
for subnets in private_subnets:
ssm.StringParameter(self, 'private-subnet-'+str(count),
string_value = subnets,
parameter_name = '/'+env+'/pivate-subnet-'+str(count)
)
count += 1
您不需要新的环境变量或上下文。 Stacks can introspect their Environment(= 帐户 + 区域)在 synth-time。使用 Python 的语言功能从 Stack 的帐户中获取 account-specific 标签。
# vpc_stack.py
env_label = "stg"
if self.account == "123456789012":
env_label = "prod"
更好的是,使用 CDK-provided CDK_DEFAULT_ACCOUNT
环境变量将标签逻辑提升到应用级别。它的值根据 cli --profile
标志值设置为 synth-time。将标签向下传递到堆栈道具(kwargs)中的堆栈。这样,配置更加集中、可见并且可跨堆栈重用。
# app.py
account = os.environ["CDK_DEFAULT_ACCOUNT"]
env_label = "stg"
if account == "123456789012":
env_label = "prod"
你可以得到比这更奇特的东西,但这些是一些基本模式。
我使用 python aws cdk 创建了以下 vpc class,我需要帮助了解如何通过 self.node.try_get_context('env') 动态设置环境变量到表示将部署堆栈的环境,例如 prod、dev、stg 等。因为我在我的逻辑中重复使用它来制定堆栈的命名约定。
我在 cdk.json 中分配了 env 变量作为 "env_stg": "stg", "env_prd": "prd",
我可以单独调用它们,但不了解动态调用它们以动态影响我的环境。
非常感谢任何帮助
class VPC(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
env = self.node.try_get_context('env')
self.vpc =ec2.Vpc(self, "Stg",
cidr = '10.0.0.0/16',
max_azs = 2,
enable_dns_support = True,
enable_dns_hostnames = True,
subnet_configuration = [
ec2.SubnetConfiguration(
name = 'Public',
subnet_type = ec2.SubnetType.PUBLIC,
cidr_mask = 24
),
ec2.SubnetConfiguration(
name = 'Isolated',
subnet_type = ec2.SubnetType.PRIVATE_ISOLATED,
cidr_mask = 24
)
]
)
# Store all private subnets in Parameter store
private_subnets = [subnet.subnet_id for subnet in self.vpc.private_subnets]
# public_subnets = [subnet.subnet_id for subnet in self.vpc.public_subnets]
count = 1
for subnets in private_subnets:
ssm.StringParameter(self, 'private-subnet-'+str(count),
string_value = subnets,
parameter_name = '/'+env+'/pivate-subnet-'+str(count)
)
count += 1
您不需要新的环境变量或上下文。 Stacks can introspect their Environment(= 帐户 + 区域)在 synth-time。使用 Python 的语言功能从 Stack 的帐户中获取 account-specific 标签。
# vpc_stack.py
env_label = "stg"
if self.account == "123456789012":
env_label = "prod"
更好的是,使用 CDK-provided CDK_DEFAULT_ACCOUNT
环境变量将标签逻辑提升到应用级别。它的值根据 cli --profile
标志值设置为 synth-time。将标签向下传递到堆栈道具(kwargs)中的堆栈。这样,配置更加集中、可见并且可跨堆栈重用。
# app.py
account = os.environ["CDK_DEFAULT_ACCOUNT"]
env_label = "stg"
if account == "123456789012":
env_label = "prod"
你可以得到比这更奇特的东西,但这些是一些基本模式。