scala 如何覆盖AWS CDK资源逻辑ID而不会导致cast异常

ppcbkaq5  于 2023-08-05  发布在  Scala
关注(0)|答案(1)|浏览(97)

This article提供了关于覆盖资源的逻辑id的说明,我已经成功地使用了这个技术几个月了:

class MyConstruct(scope: Construct, id: String) extends Construct(scope, id) {
    val barFunc =
      lambda
        .Function
        .Builder
        .create(this, "bar")
        .handler("blah.blah")
        .code(lambda.Code.fromInline("blah"))
        .runtime(lambda.Runtime.PYTHON_3_10)
        .build

    barFunc
      .getNode
      .getDefaultChild
      .asInstanceOf[CfnFunction]
      .overrideLogicalId("mylogicalid")

}

class MyStack(scope: Construct, id: String, stackProps: StackProps) extends Stack(scope, id, stackProps) {
   val barConstruct = new MyConstruct(this, "bar")
}

字符串
突然,这段代码(没有更改)导致cdk在执行synth时失败:
java.lang.ClassCastException:不能将类软件.构造.构造强制转换为类软件.amazon.awscdk.services.lambda.CfnFunction
我认为CDK做出了突破性的改变。

如何手动更改cdk资源的逻辑ID而不导致强制转换异常?

我试过恢复cdk和aws-cdk-lib的版本,但没有成功。
我目前的相依性集合是:


的数据
这是基于以下依赖关系:

lazy val awsCdkLib = "software.amazon.awscdk" % "aws-cdk-lib" % "2.89.0"
  lazy val awsConstructs = "software.constructs" % "constructs" % "10.2.69"


存在与InterfaceVpcEndpoint相关的a similar question,该问题已通过使用单独的方法创建端点来解决。在本例中,我尝试更新一个可以成功示例化但不能修改的现有Function的逻辑id。

oalqel3c

oalqel3c1#

我今天遇到了类似的问题,发现了这个:https://github.com/aws/jsii/issues/4202
为jsii添加一个排除项,然后像下面这样显式地声明一个降级的版本,为我解决了这个问题。

<dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>aws-cdk-lib</artifactId>
            <version>${aws-cdk-lib.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>software.amazon.jsii</groupId>
                    <artifactId>jsii-runtime</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>software.amazon.jsii</groupId>
            <artifactId>jsii-runtime</artifactId>
            <version>1.85.0</version>
        </dependency>

字符串

相关问题