如何制作可以部署到不同 VPC 的 aws-cdk 应用程序
How to make aws-cdk app that can be deployed to different VPC
我正在尝试通过 cdk 创建与环境无关的应用程序。该应用程序由带有负载均衡器的 EC2 和其他一些 aws 服务组成。
objective 是通过 jenkins 管道在各种 AWS 账户中自动部署堆栈的过程。
目前,我们在每个 AWS 账户中有不同的 VPC,带有不同的标签。这在这里变得越来越复杂,因为我应该如何编写代码,以便它可以从部署 cdk 代码的帐户中获取和使用 VPC 值?
我尝试使用 vpc 作为参数,但它不起作用。如果不对 vpc id 或 vpc 名称进行硬编码,最好的方法是什么?
const vpcparam = new CfnParameter(this, 'VPCParam', {
type: 'String',
description: "Enter the VPC ID ",
}
)
// Allocate to Stack
const vpcId = ec2.Vpc.fromLookup(this, 'VPC', {
vpcId: vpcparam.valueAsString
})
错误
Vpc.fromLookup() 的所有参数必须是具体的(无令牌)
子进程退出,出现错误 1
如果您不使用 CDK 部署 VPC(或者至少不在您正在使用的堆栈之一中),我建议在每个 VPC 上使用一个标签来将它们标识为要将此代码部署到的 VPC。请注意,此解决方案假设您每个账户只有一个 VPC。
如果这些 VPC 中的每一个都有一个像“type”:“appDeploy”这样的标签,你可以像这样编写 CDK 代码:
const vpcId = ec2.Vpc.fromLookup(this, 'VPC', tags:{"type":"appDeploy"})
我上面提到的备用路径是将 VPC 部署为该堆栈或父堆栈的一部分,因此您可以直接引用它。
终于,我找到了解决这个问题的方法。
步骤如下
- 使用 VPC ID 的值创建 SSM 参数
- 在 运行 时间内使用动态引用解析 ssm 参数。
- 使用带有帐户和区域值的 cdk 合成器合成堆栈。
- 运行 cdk 部署
const vpcId = new CfnDynamicReference(CfnDynamicReferenceService.SSM,'ssm-parameter-name').toString();
我正在尝试通过 cdk 创建与环境无关的应用程序。该应用程序由带有负载均衡器的 EC2 和其他一些 aws 服务组成。 objective 是通过 jenkins 管道在各种 AWS 账户中自动部署堆栈的过程。
目前,我们在每个 AWS 账户中有不同的 VPC,带有不同的标签。这在这里变得越来越复杂,因为我应该如何编写代码,以便它可以从部署 cdk 代码的帐户中获取和使用 VPC 值?
我尝试使用 vpc 作为参数,但它不起作用。如果不对 vpc id 或 vpc 名称进行硬编码,最好的方法是什么?
const vpcparam = new CfnParameter(this, 'VPCParam', {
type: 'String',
description: "Enter the VPC ID ",
}
)
// Allocate to Stack
const vpcId = ec2.Vpc.fromLookup(this, 'VPC', {
vpcId: vpcparam.valueAsString
})
错误 Vpc.fromLookup() 的所有参数必须是具体的(无令牌) 子进程退出,出现错误 1
如果您不使用 CDK 部署 VPC(或者至少不在您正在使用的堆栈之一中),我建议在每个 VPC 上使用一个标签来将它们标识为要将此代码部署到的 VPC。请注意,此解决方案假设您每个账户只有一个 VPC。 如果这些 VPC 中的每一个都有一个像“type”:“appDeploy”这样的标签,你可以像这样编写 CDK 代码:
const vpcId = ec2.Vpc.fromLookup(this, 'VPC', tags:{"type":"appDeploy"})
我上面提到的备用路径是将 VPC 部署为该堆栈或父堆栈的一部分,因此您可以直接引用它。
终于,我找到了解决这个问题的方法。
步骤如下
- 使用 VPC ID 的值创建 SSM 参数
- 在 运行 时间内使用动态引用解析 ssm 参数。
- 使用带有帐户和区域值的 cdk 合成器合成堆栈。
- 运行 cdk 部署
const vpcId = new CfnDynamicReference(CfnDynamicReferenceService.SSM,'ssm-parameter-name').toString();