当前位置: 首页 > 知识库问答 >
问题:

如何提取定义在AWS-cdk类型堆栈类构造函数到单独的文件?

弘浩博
2023-03-14

使用AWS-cdk进行实验,很容易看出堆栈/后端构造类文件是如何变得相当大的。在这个cdk Stack类示例中(从aws-cdk api-cors-lambda-crud-Dynamodb示例中复制和剪枝),是否有一种惯用的方法来从堆栈类构造函数函数中提取Dynamodb、lambda和apigateway构造函数定义到单独的文件中?他们都把this作为第一个参数。我希望有一个单独的文件,用于所有lambda def,一个用于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个答案

夹谷承安
2023-03-14

是的,你可以把它们分成自己的书堆。LambdaStack、DynamoDbStack等。

或者,如果您不想直接在构造函数中使用helper类,则可以使用单独的helper类。下面是一个简单的C#示例:

public class ApiLambdaCrudDynamoDbStack : Stack 
{
    internal ApiLambdaCrudDynamoDbStack(Construct scope, string id) : base (scope, id)
    {
        var helper = new MyHelper();
        
        helper.CreateTable(this, "My-Cool-Table"); 
        
    }
}

public class MyHelper
{
    public void CreateTable(Construct scope, string tableName)
    {
        var table = new Table(scope, "My-Table", new TableProps()
        {
             TableName = tableName
        });
    }
}


 类似资料:
  • 问题内容: 我想知道是否有人可以向我解释这种语法: 我不了解ClientOption发生了什么。指向客户端的函数类型会返回错误吗?然后在NewClient中,它看起来像接受了ClientOption类型的数组并返回了指向Client的新指针。我不确定这是否正确,是否有人可以解释得更多,或者给我一个类似于许多Javascript库所做的类比的不确定性, 在构造函数中。 问题答案: ClientOpt

  • 我有3个独立的堆栈(都在同一个帐户和区域) he AuthStack通过lambda post-confirmation trigger lambda函数进行身份验证,并向EventsBusStack发送一个新的用户事件对象 EventBusStack通过后确认lambda接收newUser对象 然而,使用CDK,我似乎无法找到一种方法来定位位于第三个堆栈中的lambda函数,即RewardsSt

  • 问题内容: 我想在当前的Python 3.5项目中使用类型提示。我的函数应该接收一个函数作为参数。 如何在类型提示中指定类型函数? 我检查了PEP 483,但在那里找不到函数类型提示。 问题答案: 正如@jonrsharpe在评论中指出的,可以使用以下方法完成: 问题是,将其本身翻译为: 一个Callable接受 任意数量的/类型的 参数,并返回任何类型的值。在大多数情况下,这不是您想要的,因为您

  • 首先,这更像是一个理智检查问题,以获得比我更精通语言标准深度的人的认可。 假设我有以下类型(尽管我忽略了任何非构造函数和非赋值成员函数): 好吧,在任何合理的实现中,在内存中都不应该是普通的。但我对标准的保证很感兴趣。以下是我根据C 98/03定义POD的理由: 不能是 POD 类型,因为它具有非公共字段、基类和用户定义的构造函数。 和C 11的losened/扩展定义: > 它应该是微不足道的可

  • 问题内容: 我有一个定义抽象方法的抽象类A。这意味着,要使一个类变得可实例化,必须实现所有抽象方法。 我希望所有子类都以2个整数作为参数实现一个构造函数。 声明构造函数违反了我的目的,因为我希望在子类中定义构造函数,而我对实现一无所知。而且,我不能将构造函数声明为抽象的。 有没有办法做到这一点 ? 我想要的例子: 可以说我正在定义Matrix类的API。在我的问题中,Matrix无法更改其尺寸。