如何将aws-cdk typescript堆栈类构造函数中的定义提取到单独的文件中?

时间:2021-04-15 15:19:43

标签: javascript aws-cdk

使用 aws-cdk 进行实验,很容易看出堆栈/后端构造类文件是如何变得非常大的。在这个 cdk Stack 类示例(从 aws-cdk api-cors-lambda-crud-dynamodb 示例中复制和修剪)中,是否有一种惯用的方法可以将 dynamodb、lambda 和 apigateway 构造函数定义从堆栈类构造函数中提取到单独的文件?它们都将 this 作为第一个参数。我想为所有 lambda defs 创建一个单独的文件,一个用于 db def、api 网关配置等,这些文件仍然在主堆栈类中引用。有没有办法在不必为每个定义创建新类的情况下做到这一点?

export class ApiLambdaCrudDynamoDBStack extends cdk.Stack {
    constructor(app: cdk.App, id: string) {
        super(app, id);

        const dynamoTable = new dynamodb.Table(this, "items", {
            partitionKey: {
                name: "itemId",
                type: dynamodb.AttributeType.STRING
            },
            tableName: "items"
        });

        const getOneLambda = new lambda.Function(this, "getOneItemFunction", {
            code: new lambda.AssetCode("src"),
            handler: "get-one.handler",
            runtime: lambda.Runtime.NODEJS_10_X,
            environment: {
                TABLE_NAME: dynamoTable.tableName,
                PRIMARY_KEY: "itemId"
            }
        });

        const getAllLambda = new lambda.Function(this, "getAllItemsFunction", {
            code: new lambda.AssetCode("src"),
            handler: "get-all.handler",
            runtime: lambda.Runtime.NODEJS_10_X,
            environment: {
                TABLE_NAME: dynamoTable.tableName,
                PRIMARY_KEY: "itemId"
            }
        });

        dynamoTable.grantReadWriteData(getAllLambda);
        dynamoTable.grantReadWriteData(getOneLambda);

        const api = new apigateway.RestApi(this, "itemsApi", {
            restApiName: "Items Service"
        });

        const items = api.root.addResource("items");
        const getAllIntegration = new apigateway.LambdaIntegration(getAllLambda);
        items.addMethod("GET", getAllIntegration);

        const singleItem = items.addResource("{id}");
        const getOneIntegration = new apigateway.LambdaIntegration(getOneLambda);
        singleItem.addMethod("GET", getOneIntegration);
    }
}

1 个答案:

答案 0 :(得分:0)

是的,您可以将它们分成自己的堆栈。 'LambdaStack'、'DynamoDbStack' 等

或者,如果您不想直接在构造函数中使用它,您可以只使用单独的“帮助器”类。这是一个简单的 C# 示例:

-l
相关问题