![](/img/trans.png)
[英]Error deploying a CDK stack with a Rest API with a Lambda Function Integration (AWS CDK 2 Python API)
[英]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() 調用(這顯然不是一個選項)來“修復”這個問題。
我的問題如下:
我嘗試了不同級別的分離(都在一個文件中,很多堆棧......)都沒有任何區別。
LambdaStack
不能在MainStack
之前部署,因為它需要MainStack
VPC。 但是也不能先部署MainStack
,因為它需要來自LambdaStack
的 function 引用。 這就是錯誤中的“循環引用”。
最簡單的解決方法是將整個應用程序放入一個堆棧中。 或者,重構您的應用程序,使堆棧間依賴項僅在一個方向上運行。 CDK 最佳實踐文檔解決了“有多少堆棧?”的問題。 問題。
如果您最終保留了多個堆棧,請考慮讓App
成為所有堆棧的公共 scope,而不是嵌套它們。 我還沒有看到作為父子構建的Stack
構造( NestedStacks 除外)。 這可能不會導致錯誤,但至少看起來不是慣用的。
好吧,部分要感謝fedonev (將所有堆棧向上移動一層)和 AWS 文檔中的一些相當幸運的發現,以下是現在運行良好的內容:
希望能幫助別人!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.