CDK:如何从L1的CfnTaskDefinition获取L2的TaskDefinition实例?
解决方案:CfnTaskDefinition与Ec2Service的兼容问题
不能直接从aws_cdk.aws_ecs.CfnTaskDefinition实例获取aws_cdk.aws_ecs.TaskDefinition对象,但有两种可行的解决方式:
1. 通过ARN导入高层TaskDefinition实例
利用CfnTaskDefinition的attr_task_definition_arn属性,通过TaskDefinition.from_task_definition_arn方法创建一个引用该底层任务定义的高层TaskDefinition实例,即可传入Ec2Service:
# 从CfnTaskDefinition的ARN导入高层TaskDefinition imported_task_def = aws_cdk.aws_ecs.TaskDefinition.from_task_definition_arn( scope=self, id="ImportedTaskDef", task_definition_arn=my_task_definition.attr_task_definition_arn ) # 使用导入的TaskDefinition创建Ec2Service my_service = aws_cdk.ecs.Ec2Service( scope=self, id="my_service", cluster=my_cluster, task_definition=imported_task_def, desired_count=1, # 其余参数.. )
2. 重构代码使用高层TaskDefinition构造
如果场景允许,推荐直接使用CDK的高层TaskDefinition构造来定义任务,这更符合CDK的设计理念,能自动处理权限、依赖等底层细节,避免层级混用的问题:
# 使用高层TaskDefinition构造 my_task_definition = aws_cdk.aws_ecs.TaskDefinition( scope=self, id="my_task_definition", compatibility=aws_cdk.aws_ecs.Compatibility.EC2, # 补充其他必要参数,比如execution_role、container_definitions等 ) # 直接创建Ec2Service my_service = aws_cdk.ecs.Ec2Service( scope=self, id="my_service", cluster=my_cluster, task_definition=my_task_definition, desired_count=1, # 其余参数.. )
内容的提问来源于stack exchange,提问作者Sazzadur Rahman
相关产品推荐
相关产品推荐

