使用 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);
}
}
答案 0 :(得分:0)
是的,您可以将它们分成自己的堆栈。 'LambdaStack'、'DynamoDbStack' 等
或者,如果您不想直接在构造函数中使用它,您可以只使用单独的“帮助器”类。这是一个简单的 C# 示例:
-l