繁体   English   中英

使用aws cdk将一个堆栈中定义的所有资源获取到另一个堆栈

[英]Get all the resources defined in one stack to another stack using aws cdk

我正在创建两个堆栈,并想将第一个堆栈资源(如 Lambda、API Gateway、DyanamoDb)引用到第二个堆栈中,或者使用对第一个堆栈的引用名称 object。 注意:我不想使用 Stack Props 将所有资源硬编码到第二个堆栈中。 例如文件 1

export class StackOne extends cdk.Stack {
    constructor(scope: Construct, id: string, props: StackOneProps) {
    super(scope, id, { env: props.env });
    
    const lambda1 = new lambda.Function();
    const lambda2 = new lambda.Function();
    const api = new apigateway.RestApi()
    new apigateway.LambdaIntegration(
      lambda1
    );
    new apigateway.LambdaIntegration(
      lambda2
    );

    }
}

文件 2

export class StackTwo extends cdk.Stack {
    constructor(scope: Construct, id: string, props: StackTwoProps) {
    super(scope, id, { env: props.env });
    
    const StackOne = //Get the StackOne Reference
    StackOne.Resourcs.forEach(rsourcs ==> {} )

    }
}

如果将资源分配为公共只读属性,则可以迭代堆栈 object 的属性并检测IResource (或您感兴趣的其他)类型的属性。

export class StackOne extends cdk.Stack {
    public readonly lambda1: Function;
    public readonly lambda2: Function;
    // etc.

    constructor(scope: Construct, id: string, props: StackOneProps) {
    super(scope, id, { env: props.env });
    
    this.lambda1 = new lambda.Function();
    this.lambda2 = new lambda.Function();
    // etc.
    }
}
export interface StackTwoProps { 
    stackOne: Stack
}

export class StackTwo extends cdk.Stack {
    constructor(scope: Construct, id: string, props: StackTwoProps) {
    super(scope, id, { env: props.env });
    
    const getResource = (r: any) => r instanceof IResource
        ? r
        : undefined;
    const keys = Object.keys(props.stackOne);
    const resources = keys
        .map(x => getResource(props.stackOne[x]))
        .filter(x => x !== undefined) as IResource);

    }
}

理论上,您可以使用转义舱口语法访问 Stack 的合成子项(已处理的资源,而不是您定义的原始构造): myStack.node.children

除非您的用例不寻常,否则这可能是个坏主意。

将资源依赖项作为 props 传递是标准解决方案。 如果您发现自己必须在堆栈之间传递大量资源,这可能表明您应该将资源保留在一个堆栈中。

暂无
暂无

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

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