cdk FargateService中如何指定VPC ID
How to specify VPC ID in cdk FargateService
我正在尝试创建多个 ECS 服务,每个服务作为不同的堆栈,这样我就可以 update/delete/recreate 单独地创建它们。我还有 2 个堆栈,一个用于 VPC,另一个用于 ECS 集群。
结构:
.
|-- README.md
|-- stacks
| |-- __init__.py
| |-- ecs.py
| |-- iam.py
| |-- tasks_services.py
| |-- test.py
| `-- vpc.py
|-- app.py
|-- cdk.context.json
在我的 app.py 中,我正在将它们融合在一起
vpc = vpcstack(app, "vpcstack", config,
env=cdk_env
)
cluster = ecsstack(app, "ecsstack",vpc,config,
env =cdk_env
)
ExecutionRole = executionRole (app, "role" , environment,
env=cdk_env)
service = mySvc (app,"initial",environment , config,cluster,vpc,
env =cdk_env)
我不确定如何将 VPC 值传递到 ecs.FargateService
ecs.FargateService(self, "Service",
cluster=cluster,
task_definition=task_definition,
vpc_subnets = ec2.SubnetSelection(
subnet_type=ec2.SubnetType.PRIVATE_WITH_NAT
),
报错
TypeError: Cannot read properties of undefined (reading 'selectSubnets')
是有道理的,因为它无法读取 VPC 属性。我在这里看不到任何指定 VPC 值的选项。
例如ec2.securitygroups
有VPC参数
self.security_group = ec2.SecurityGroup(self, "SG", vpc=vpc)
如何为 ecs.FargateService
做同样的事情
将 VPC 构造传递到 ECS 集群,(我将 VPC 和集群组合在一起以便于使用)。
正在创建VPC/cluster:
在 ecs.py
vpc = ec2.Vpc(self, "VPC",
max_azs=3,
ecs.Cluster(self, "Cluster",
vpc=vpc
根据 the documentation,有关 VPC 的信息通过 Cluster
传递。因此,在创建集群时,您应该传入正确的 VPC 引用。
cluster = ecs.Cluster(self, "Cluster",
vpc=vpc
)
感谢@gshpychka 指出确切的问题。花了一些时间才明白。
提取堆栈的VPC并将其传递给下一个堆栈
vpc = vpcstack(app, "vpcstack", config,
env=cdk_env
)
cluster = ecsstack(app, "ecsstack",vpc.vpc,config,
env =cdk_env
)
service = mySvc (app,"initial",environment , config,cluster.ecs_cluster,vpc,
env =cdk_env)
在VPC.py
class vpcstack(Stack):
def __init__(self, scope: Construct, construct_id: str, config,**kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# VPC constructs
self.vpc = ec2.Vpc(self, "VPC",
在ecs.py
class ecsstack(Stack):
def __init__(self, scope: Construct, construct_id: str, config,vpc,**kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# Cluster
self.ecs_cluster = ecs.Cluster(self, "Cluster"
我正在尝试创建多个 ECS 服务,每个服务作为不同的堆栈,这样我就可以 update/delete/recreate 单独地创建它们。我还有 2 个堆栈,一个用于 VPC,另一个用于 ECS 集群。
结构:
.
|-- README.md
|-- stacks
| |-- __init__.py
| |-- ecs.py
| |-- iam.py
| |-- tasks_services.py
| |-- test.py
| `-- vpc.py
|-- app.py
|-- cdk.context.json
在我的 app.py 中,我正在将它们融合在一起
vpc = vpcstack(app, "vpcstack", config,
env=cdk_env
)
cluster = ecsstack(app, "ecsstack",vpc,config,
env =cdk_env
)
ExecutionRole = executionRole (app, "role" , environment,
env=cdk_env)
service = mySvc (app,"initial",environment , config,cluster,vpc,
env =cdk_env)
我不确定如何将 VPC 值传递到 ecs.FargateService
ecs.FargateService(self, "Service",
cluster=cluster,
task_definition=task_definition,
vpc_subnets = ec2.SubnetSelection(
subnet_type=ec2.SubnetType.PRIVATE_WITH_NAT
),
报错
TypeError: Cannot read properties of undefined (reading 'selectSubnets')
是有道理的,因为它无法读取 VPC 属性。我在这里看不到任何指定 VPC 值的选项。
例如ec2.securitygroups
有VPC参数
self.security_group = ec2.SecurityGroup(self, "SG", vpc=vpc)
如何为 ecs.FargateService
将 VPC 构造传递到 ECS 集群,(我将 VPC 和集群组合在一起以便于使用)。
正在创建VPC/cluster: 在 ecs.py
vpc = ec2.Vpc(self, "VPC",
max_azs=3,
ecs.Cluster(self, "Cluster",
vpc=vpc
根据 the documentation,有关 VPC 的信息通过 Cluster
传递。因此,在创建集群时,您应该传入正确的 VPC 引用。
cluster = ecs.Cluster(self, "Cluster",
vpc=vpc
)
感谢@gshpychka 指出确切的问题。花了一些时间才明白。
提取堆栈的VPC并将其传递给下一个堆栈
vpc = vpcstack(app, "vpcstack", config,
env=cdk_env
)
cluster = ecsstack(app, "ecsstack",vpc.vpc,config,
env =cdk_env
)
service = mySvc (app,"initial",environment , config,cluster.ecs_cluster,vpc,
env =cdk_env)
在VPC.py
class vpcstack(Stack):
def __init__(self, scope: Construct, construct_id: str, config,**kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# VPC constructs
self.vpc = ec2.Vpc(self, "VPC",
在ecs.py
class ecsstack(Stack):
def __init__(self, scope: Construct, construct_id: str, config,vpc,**kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# Cluster
self.ecs_cluster = ecs.Cluster(self, "Cluster"