【问题标题】:CDK: How to get L2 construct instance from L1 (CFN)?CDK:如何从 L1 (CFN) 获取 L2 构造实例?
【发布时间】:2022-11-29 03:29:42
【问题描述】:

在我的 CDK 代码中有一个低级的 ecs.CfnTaskDefinition 任务定义。

my_task_definition = aws_cdk.ecs.CfnTaskDefinition(
    scope=self,
    id="my_task_definition",
    # rest of the parameters...
)

我想使用这个任务定义来创建一个 Ecs 服务,就像这样。

my_service = aws_cdk.ecs.Ec2Service(
    scope=self,
    id="my_service",
    cluster=my_cluster,
    task_definition=my_task_definition,  # NOT COMPATIBLE
    desired_count=1,
    # rest of the parameters..
)

但是由于Ec2Servicetask_definition参数应该是aws_cdk.aws_ecs.TaskDefinition的一个实例;不能在这里使用my_task_definition,它是aws_cdk.aws_ecs.CfnTaskDefinition的实例。

所以问题是有可能从aws_cdk.aws_ecs.CfnTaskDefinition实例中获取aws_cdk.aws_ecs.TaskDefinition对象吗?

【问题讨论】:

  • 我主要使用打字稿进行开发,但这应该只是实现接口的问题。

标签: python amazon-web-services amazon-ecs aws-cdk aws-cdk-python


【解决方案1】:

是否可以从 aws_cdk.aws_ecs.CfnTaskDefinition 实例获取 aws_cdk.aws_ecs.TaskDefinition 对象?

❌ 不可以。您无法从 L1 CfnSomething 获得 L2 Something 构造。您可以使用 from_task_definition_arn 获得 L2 ISomething interface 构造(见下文)。但是 task_definition 属性不会接受接口类型。

✅ 在您的情况下,从 L2 TaskDefinitionECSTaskDefinition 构造开始。然后,如果您需要处理 L1 属性,请使用 escape hatch 语法修改其基础 CfnTaskDefinition

如何从 L1 (CFN) 获取 L2 构造实例?

更一般地说,是的,有 two ways 从 L1 CfnSomething 获得 L2 ISomething

(1) CDK "unescape hatch" 语法,但仅适用于 S3 Buckets 和 KMS 密钥:

cfnBucket = CfnBucket(stack, 'CfnBucket')
bucket: IBucket = Bucket.from_cfn_bucket(cfn_bucket=cfnBucket)

(2) 对于其他构造,from_something_arnreference methods达到相同的结果。

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多