繁体   English   中英

AWS CDK - 从 StackProps 声明输入变量

[英]AWS CDK - Declare input variables from StackProps

我最近开始使用 AWS CDK,但遇到了一个问题。 我希望能够定义自定义输入变量,以便使用我的 AWS CDK 的最终用户能够自行定义输入,而无需编辑整个代码。 我已经设法采用标准类型,例如; 字符串、数字、布尔值等,但是我不太明白如何对自定义类型执行相同的操作,例如:

我尝试创建一个 AWS DynamoDB,首先我定义了一个接口,然后确保最终用户将准确输入所需的数据

这是我的界面:

export interface IDynamoDB extends StackProps {
    tableClass:       unknow,
    billingMode:      unknow
    sortKeyName:      string,
    sortKeyType:      unknow,
    partitionKeyName: string,
    partitionKeyType: unknow
    inTimeRecovery:   boolean
}

这是我的 class:

export class Ddb extends Stack {
    constructor(scope: Construct, name: string, props: IDynamoDB) {
        super(scope, name, props);


        const table = new ddb.Table(this, name, {
            tableName:      name,
            tableClass:     ddb.TableClass.STANDARD,
            billingMode:    ddb.BillingMode.PROVISIONED,
            sortKey: {
                    name: props.sortKeyName,
                    type: ddb.AttributeType.NUMBER
            },
            partitionKey: {
                    name: props.partitionKeyName,
                    type: ddb.AttributeType.STRING
            },
        })
    }
}

进口

import { Construct } from 'constructs';
import { Stack, StackProps } from 'aws-cdk-lib';
import * as ddb from 'aws-cdk-lib/aws-dynamodb';

我的界面存在问题,如您所见,我将unknown作为一种类型,但我不知道如何使它变得更容易。 最后,我希望能够只放置一个字符串,例如:

ddb.TableClass.STANDARD = 标准表类

我希望我已经设法解释了我的问题

通常你的道具将具有与构造相同的ddb枚举类型(参见下面的tableClass )。 但是,当您根据评论优化短值时,您可以使用枚举的字符串值定义道具并在构造函数中查找类型(请参阅billingMode )。

export interface IDynamoDB extends StackProps {
  tableClass: ddb.TableClass;
  billingMode: "PROVISIONED" | "PAY_PER_REQUEST"; // string values of the Typescript Enum type
  sortKeyName: string;
  sortKeyType: ddb.AttributeType;
  partitionKeyName: string;
  partitionKeyType: ddb.AttributeType;
  inTimeRecovery: boolean;
}

table构造函数:

tableClass:     props.tableClass,
billingMode:    ddb.BillingMode[props.billingMode], // map the enum

关于billingMode方法的注意事项:(1) 您可能想要应用更严格的检查,并且 (2) 您的用户将失去智能感知文档上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM