簡體   English   中英

rest_api-lambda-rds 堆棧的 AWS CDK 循環引用

[英]AWS CDK cyclic reference for rest_api-lambda-rds stack

我的設置如下所示:

*Main Stack*
RestApi
VPC (2 subnets, one public, one private_isolated)
DBStack
LambdaStack
*DBStack*
ServerlessCluster (in private_isolated VPC subnet)
*LambdaStack*
LayerVersion
lambda.Function (in private_isolated VPC subnet)

LambdaStack 還(在創建函數之后)通過api.root.addResource() ) 注冊了一個新路由,通過rest_endpoint.addMethod("GET/POST/...", LambdaIntegration(lambaFunction)) ) 注冊了一個方法以及一個database.connections.allowDefaultPortFrom(lambdaFunction)

當我嘗試合成它時,我收到以下錯誤消息:

Error: 'MainStack/lambdastack' depends on 'MainStack' (no description provided, no description provided, no description provided, no description provided, no description provided, no description provided). Adding this dependency (MainStack -> MainStack/lambdastack/lambda_function/Resource.Arn) would create a cyclic reference.

我可以通過刪除 rest_endpoint.addMethod() 調用(這顯然不是一個選項)來“修復”這個問題。

我的問題如下:

  1. 如何修復它(顯然)
  2. 我將如何 go 自己調試這個,因為所有常見的資源描述在這里“沒有提供描述”)

我嘗試了不同級別的分離(都在一個文件中,很多堆棧......)都沒有任何區別。

LambdaStack不能在MainStack之前部署,因為它需要MainStack VPC。 但是也不能先部署MainStack ,因為它需要來自LambdaStack的 function 引用。 這就是錯誤中的“循環引用”。

最簡單的解決方法是將整個應用程序放入一個堆棧中。 或者,重構您的應用程序,使堆棧間依賴項僅在一個方向上運行。 CDK 最佳實踐文檔解決了“有多少堆棧?”的問題。 問題。

如果您最終保留了多個堆棧,請考慮讓App成為所有堆棧的公共 scope,而不是嵌套它們。 我還沒有看到作為父子構建的Stack構造( NestedStacks 除外)。 這可能不會導致錯誤,但至少看起來不是慣用的。

好吧,部分要感謝fedonev (將所有堆棧向上移動一層)和 AWS 文檔中的一些相當幸運的發現,以下是現在運行良好的內容:

  • 現在一切都在一個堆棧中
  • 我必須為秘密管理器向 private_isolated vpc 添加一個接口端點

希望能幫助別人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM