我正在尝试为 2 个资源(即 lambda 函数和 API 网关)创建两个单独的堆栈。下面是我的 app.py 中的代码
import aws_cdk as cdk
from Stack.lambda_function.hello_handler_stack import HelloHandlerStack
from Stack.apigateway.hello_handler_apigateway_handler import HelloHandlerApigatewayStack
app = cdk.App()
Stack1 = HelloHandlerStack(app, "HelloHandlerStack", env=cdk.Environment(Account="**",Region="*"))
Stack2 = HelloHandlerApigatewayStack(app, "HelloHandlerApigatewayStack", env=cdk.Environment(Account="**",Region="*"), temp_lambda = Stack1.my_lambda)
app.synth()
hello_handler_stack.py
from constructs import Construct
from aws_cdk import (
Stack,
aws_lambda as _lambda,
)
class HelloHandlerStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
my_lambda = _lambda.Function(
self, 'HelloHandler',
runtime=_lambda.Runtime.PYTHON_3_7,
code=_lambda.Code.from_asset('lambda'),
handler='hello.handler',
)
self.my_lambda = my_lambda
hello_handler_apigateway_handler.py
from constructs import Construct
from aws_cdk import (
Stack,
aws_lambda as _lambda,
aws_apigateway as apigw,
)
class HelloHandlerApigatewayStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
apigw.LambdaRestApi(
self, 'Endpoint',
handler=kwargs["test_lambda"],
)
但是当我执行 cdk ls 时,我收到一条错误消息
TypeError: Stack.init() got an unexpected keyword argument 'test_lambda'
我应该能够将关键字参数传递给第二个堆栈并使用它来构建 api 网关,在调用类时我还应该提供任何其他引用吗?
感谢任何帮助。
最佳答案
已调试问题。必须在构造函数调用内部传递的构造函数参数定义中写入关键字参数。
hello_handler_apigateway_handler.py
from constructs import Construct
from aws_cdk import (
Stack,
aws_lambda as _lambda,
aws_apigateway as apigw,
)
class HelloHandlerApigatewayStack(Stack):
def __init__(self, scope: Construct, id: str, test_lambda, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
apigw.LambdaRestApi(
self, 'Endpoint',
handler=test_lambda,
)
关于python - 如何使用 aws_cdk 将资源参数从一个堆栈传递到另一个堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72699856/