rds.DatabaseInstance 和 rds.IDatabaseInstance 有什么区别?

What the difference between rds.DatabaseInstance and rds.IDatabaseInstance?

我想做的就在这里

下面是我的想法,

创建 dbCluster 变量来存储两者。

在 Prod 中存储 DatabaseCluster 并在 Stag 中存储 rds.DatabaseInstance

这是我的暂存环境

    public readonly dbCluster: rds.DatabaseCluster | rds.DatabaseInstance; 
    constructor(scope: Construct, id: string, props?: StackProps) {
      const existingDatabaseInstance = rds.DatabaseInstance.fromDatabaseInstanceAttributes(this,'mysqlrds',{
        instanceIdentifier: "XXXXXXXXXX",
        securityGroups: [],
        instanceEndpointAddress: "XXXXXXXXXX.cishneowmf1a.ap-northeast-1.rds.amazonaws.com",
        port: 3306
      });

然后在另一个脚本中。

我可以把秘诀给ECS,它有rds.DatabaseCluster或者rds.DatabaseInstance

    export interface CdkStFargateStackProps extends StackProps {
      readonly dbCluster: rds.DatabaseCluster | rds.DatabaseInstance;
        props!.dbCluster.secret?.grantRead(taskDefinitionAdmin.taskRole)

问题是

returns IDatabaseInstance 不是 DatabaseInstance.

我该如何解决这个问题?

How can I solve this?

Return read-only 使用 Secret.fromSecretPartialArn 静态方法引用 RDS MySQL 的秘密。传递不带随机后缀字母的密钥的 ARN。

fromSecretPartialArn returns 实现 ISecret 接口的 class。它与您正在使用的 DatabaseCluster.secret 属性 返回的类型相同。使用其 grantRead 方法,该方法使用其主体策略或资源策略向 IAM 主体(例如您的 taskDefinitionAdmin.taskRole 授予读取访问权限。

What the difference between rds.DatabaseInstance and rds.IDatabaseInstance?

他们属于different CDK categories:

rds.DatabaseInstance 是一个 Construct 库 class,表示一个或多个具体的 AWS 资源

rds.IDatabaseInstance 是一个 Interface,其名称均以“I”开头,定义了相应构造或其他 class 的绝对最小功能。 CDK 使用构造接口来表示在您的 AWS CDK 应用程序外部定义并由 Bucket.fromBucketArn().

等方法引用的 AWS 资源