簡體   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